diff --git a/internal/service/chat_pipeline.go b/internal/service/chat_pipeline.go index 46e5f28e11..25c435f7e6 100644 --- a/internal/service/chat_pipeline.go +++ b/internal/service/chat_pipeline.go @@ -2497,8 +2497,13 @@ func (s *ChatPipelineService) kbPrompt(kbinfos map[string]interface{}, maxTokens cnt += drawNode("Title", getMapString(ck, "docnm_kwd", "document_name")) cnt += drawNode("URL", getMapString(ck, "url")) if meta, ok := ck["document_metadata"].(map[string]interface{}); ok { - for k, v := range meta { - cnt += drawNode(k, v) + keys := make([]string, 0, len(meta)) + for k := range meta { + keys = append(keys, k) + } + sort.Strings(keys) + for _, k := range keys { + cnt += drawNode(k, meta[k]) } } cnt += "\n└── Content:\n" diff --git a/internal/service/deep_researcher.go b/internal/service/deep_researcher.go index c0c45c82d2..be076dbb7e 100644 --- a/internal/service/deep_researcher.go +++ b/internal/service/deep_researcher.go @@ -24,6 +24,7 @@ import ( "io" "net/http" "regexp" + "sort" "strings" "sync" "time" @@ -760,8 +761,13 @@ func kbPrompt(kbinfos map[string]interface{}, maxTokens int, hashID bool) []stri cnt += drawNode("URL", getMapString(m, "url")) if meta, ok := m["document_metadata"].(map[string]interface{}); ok { - for k, v := range meta { - cnt += drawNode(k, v) + keys := make([]string, 0, len(meta)) + for k := range meta { + keys = append(keys, k) + } + sort.Strings(keys) + for _, k := range keys { + cnt += drawNode(k, meta[k]) } } diff --git a/internal/service/kb_prompt.go b/internal/service/kb_prompt.go index 8d3ea647ec..1eef85fb80 100644 --- a/internal/service/kb_prompt.go +++ b/internal/service/kb_prompt.go @@ -18,6 +18,7 @@ package service import ( "fmt" + "sort" "strings" "ragflow/internal/tokenizer" @@ -103,8 +104,13 @@ func formatChunkEntry(ck SourcedChunk, index int) string { fmt.Fprintf(&b, "├── URL: %s\n", collapseNewlines(ck.URL)) } if ck.DocumentMetadata != nil { - for k, v := range ck.DocumentMetadata { - fmt.Fprintf(&b, "├── %s: %v\n", k, collapseNewlines(fmt.Sprint(v))) + keys := make([]string, 0, len(ck.DocumentMetadata)) + for k := range ck.DocumentMetadata { + keys = append(keys, k) + } + sort.Strings(keys) + for _, k := range keys { + fmt.Fprintf(&b, "├── %s: %v\n", k, collapseNewlines(fmt.Sprint(ck.DocumentMetadata[k]))) } } b.WriteString("└── Content:\n")