mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-09-21 17:38:10 +00:00
test: 补齐4个模块测试 + LLM 图质量评估 + 文件日志
补齐测试: - pipeline_test.go: 29 个测试 (蒸馏/刷盘/加载/三连提取/工具函数) - social_test.go: 11 个测试 (特质CRUD/社交关系/网络/安全 nil 守卫) - text/memory_test.go: 20 个测试 (追加/回放/并发/旋转/清理/持久化) - indexer_test.go: 15 个测试 (同步/上下文/召回过滤/关键词/工具定义) 图质量评估: - reorgGraph 新增 evaluateGraphQuality 步骤 - 自动识别蒸馏噪音 (用户-提及/AI-回应) 和低 confidence 关系 - 通过 enqueueConsolidationTask 交由 LLM 逐条判断保留/删除 文件日志: - 启动时创建 data/log/ 目录 - io.MultiWriter 同时输出到 stderr 和 homed_<时间>.log
This commit is contained in:
@ -1651,6 +1651,65 @@ func (a *Agent) reorgGraph() {
|
||||
} else {
|
||||
log.Printf("[agent] graph reorg: no similar entities found")
|
||||
}
|
||||
|
||||
// 5. 图连接质量评估:由 LLM 判断低质量关系并丢弃
|
||||
a.evaluateGraphQuality()
|
||||
}
|
||||
|
||||
func (a *Agent) evaluateGraphQuality() {
|
||||
if a.memory == nil {
|
||||
return
|
||||
}
|
||||
|
||||
// 召回近期低 confidence 关系(使用默认 recall 获取最新实体和关系)
|
||||
result, err := a.memory.Recall(nil, nil, 1, "")
|
||||
if err != nil || result == nil || len(result.Relations) == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
// 选出低质量候选:generic 关系(如 distiller 自动生成的泛化关系)
|
||||
var lowQuality []string
|
||||
for _, r := range result.Relations {
|
||||
// 自动蒸馏生成的 (用户, 提及, ...) 和 (AI, 回应, ...) 通常是噪音
|
||||
if (r.SourceName == "用户" || r.SourceName == "AI") &&
|
||||
(r.RelationType == "提及" || r.RelationType == "回应") {
|
||||
lowQuality = append(lowQuality, fmt.Sprintf("「%s」-「%s」→「%s」", r.SourceName, r.RelationType, r.TargetName))
|
||||
continue
|
||||
}
|
||||
// 极低 mention 的实体+generic 关系
|
||||
if r.Confidence < 0.3 && r.RelationType != "" {
|
||||
lowQuality = append(lowQuality, fmt.Sprintf("「%s」-「%s」→「%s」(confidence=%.1f)", r.SourceName, r.RelationType, r.TargetName, r.Confidence))
|
||||
}
|
||||
}
|
||||
|
||||
if len(lowQuality) == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
// 分批发送给 LLM 决策,每批最多 10 条
|
||||
batchSize := 10
|
||||
for i := 0; i < len(lowQuality); i += batchSize {
|
||||
end := i + batchSize
|
||||
if end > len(lowQuality) {
|
||||
end = len(lowQuality)
|
||||
}
|
||||
batch := lowQuality[i:end]
|
||||
|
||||
a.enqueueConsolidationTask(ConsolidationTask{
|
||||
Type: "graph_quality",
|
||||
Reason: fmt.Sprintf(
|
||||
"图数据库中发现 %d 条低质量关系,请逐条判断是否应该删除(保留 = keep,删除 = discard):\n%s",
|
||||
len(batch),
|
||||
strings.Join(batch, "\n"),
|
||||
),
|
||||
Data: map[string]interface{}{
|
||||
"candidates": batch,
|
||||
"action": "evaluate_quality",
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
log.Printf("[agent] graph quality: %d low-quality connection batches sent for LLM evaluation", (len(lowQuality)+batchSize-1)/batchSize)
|
||||
}
|
||||
|
||||
// entitySimilarity 计算两个实体名的相似度(字符 bigram Jaccard)
|
||||
|
||||
Reference in New Issue
Block a user