Fix: keep metadata sorted, so that prompt could be the same (#21459)

This commit is contained in:
Wang Qi authored and GitHub committed 2026-10-26 11:36:46 +08:00
1 parent 914bcb0307
commit f178ffed98
3 files changed
+23 -6

No files matched your search

+7 -2
View File
@@ -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"
+8 -2
View File
@@ -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])
}
}
+8 -2
View File
@@ -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")