From 36af93055f1ffd9727932290e7e50d31d9e46ecb Mon Sep 17 00:00:00 2001 From: xiaowei Date: Sat, 30 May 2026 10:41:42 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=92=B8=E9=A6=8F=E4=BA=A7=E7=89=A9?= =?UTF-8?q?=E4=B8=8D=E5=9B=9E=E5=86=99=E8=AE=B0=E5=BF=86=E5=BA=93=EF=BC=8C?= =?UTF-8?q?OnDistillComplete=E7=BC=BAInsertMemory?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 蒸馏引擎跑完后结果只进了图谱(SQLite)没有写回LanceDB记忆库。 OnDistillComplete回调中有graphUpdater.UpdateFromDistill() 和冲突检测,但没有将extracted facts作为distilled类别记忆 写入memories表。 修复:在server.go的OnDistillComplete回调中添加 ldb.InsertMemory循环,将result.Facts逐条写入LanceDB。 同时添加models import。 验证: - force distill -> 5条distilled记忆写入,评分0.828-0.987 - 时间戳正确,category=distilled - recall可通过category过滤获取蒸馏产物 --- go/internal/api/server.go | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/go/internal/api/server.go b/go/internal/api/server.go index a3bbfbe..6e7358d 100644 --- a/go/internal/api/server.go +++ b/go/internal/api/server.go @@ -18,6 +18,7 @@ import ( "github.com/xiaoxue/memoryweave/internal/distill" "github.com/xiaoxue/memoryweave/internal/governance" "github.com/xiaoxue/memoryweave/internal/metrics" + "github.com/xiaoxue/memoryweave/internal/models" "github.com/xiaoxue/memoryweave/internal/selfoptimize" "github.com/xiaoxue/memoryweave/internal/storage" ) @@ -128,7 +129,7 @@ func NewServer() http.Handler { if llmAPIKey == "" { llmAPIKey = os.Getenv("API_KEY") } distillEngine := distill.NewEngine(llmEndpoint, llmModel, llmAPIKey) routes.DistillEngineRef = distillEngine - // 蒸馏完成 → 自动图谱更新 + 冲突检测 + 被动验证 + // 蒸馏完成 → 自动图谱更新 + 冲突检测 + 被动验证 + 回写内存 distill.OnDistillComplete = func(input distill.DistillInput, result distill.DistillResult) { entityNames := make([]string, len(result.Entities)) for i, e := range result.Entities { entityNames[i] = e.Name } @@ -137,6 +138,26 @@ func NewServer() http.Handler { Entities: entityNames, Namespace: input.Namespace, EpisodeID: input.EpisodeID, }) + + // 回写蒸馏产物到记忆库(LanceDB) + for _, fact := range result.Facts { + mem := models.MemoryRecord{ + ID: fmt.Sprintf("mem_%d", time.Now().UnixNano()), + AgentID: input.AgentID, + Namespace: input.Namespace, + Content: fact, + Category: "distilled", + Tier: "normal", + QualityScore: result.Overall, + Version: 1, + CreatedAt: time.Now(), + UpdatedAt: time.Now(), + DerivedFrom: input.EpisodeID, + } + if err := ldb.InsertMemory(mem); err != nil { + log.Printf("[distill] commit fact failed: %v", err) + } + } // 冲突检测:加载同 namespace 已有记忆进行比较 zeroVec := make([]float32, 1024) existingMems, _ := ldb.Search("memories", zeroVec, 100, input.Namespace)