fix: 修复记忆系统自循环与计算层污染

- 删 syncGraphToDocs(): Graph 快照不再写入 Document,避免污染向量索引和三层隔离
- 删 toolCallRing(): 已被工具 NoMemory/Cleaner 机制取代,不再需要独立环形缓冲
- 加 toolOutputClean 回调线程 Prune→ContextToDoc: 归档时按 NoMemory 跳过、Cleaner 清洗后再过 jieba,原文保留
- 加 eval_status 持久化 (RecallPending/UpdateEvalStatus/ResolveEvaluating): 避免重复 LLM 评估
This commit is contained in:
root
2026-07-26 19:29:01 +08:00
parent db4844c6c6
commit d19b7bd13e
7 changed files with 373 additions and 280 deletions

View File

@ -111,6 +111,25 @@ func textForVector(evt *ContextEvent, toolDefLookup func(name string) *sdk.ToolD
return memory.CleanText(text)
}
// toolOutputClean 根据工具定义的 NoMemory/Cleaner 清洗输出,用于计算层。
// 返回 "" 表示跳过(NoMemory),否则返回清洗后文本(Cleaner 或原文)。
func (c *RelevanceContext) toolOutputClean(name, output string) string {
if c.toolDefLookup == nil {
return output
}
def := c.toolDefLookup(name)
if def == nil {
return output
}
if def.NoMemory {
return ""
}
if def.Cleaner != nil {
return def.Cleaner(output)
}
return output
}
func (c *RelevanceContext) computeVector(evt *ContextEvent) vector.Vector {
return c.embedder.Vectorize(textForVector(evt, c.toolDefLookup))
}
@ -255,7 +274,7 @@ func (c *RelevanceContext) Prune(currentInput string, topK int, docStore *docume
ToolResults: convertToolResults(s.event.ToolResults),
}
}
doc, err := docStore.ContextToDoc("context_archived", entries, c.embedder)
doc, err := docStore.ContextToDoc("context_archived", entries, c.embedder, nil, c.toolOutputClean)
if err == nil && doc != nil {
archived = len(entries)
}