diff --git a/IMPLEMENTATION-FIVE.md b/IMPLEMENTATION-FIVE.md index f77aeba..b67c5a5 100644 --- a/IMPLEMENTATION-FIVE.md +++ b/IMPLEMENTATION-FIVE.md @@ -1,6 +1,6 @@ # 织忆五步实施计划 > 创建时间:2026-05-30 -> 状态:E1/E2 已完成,E3-E5 规划中 +> 状态:E1/E2/E3 已完成,E4-E5 规划中 > 禁止:偷懒、随意更改变动设计语言 --- @@ -11,7 +11,7 @@ |------|------|--------|---------|------| | **E1** | 图谱导航激活 | 🔴 高 | 1-2 天 | ✅ 完成 | | **E2** | 多 agent 命名空间激活 | 🔴 高 | 1 天 | ✅ 完成 | -| **E3** | 增量 embedding | 🟡 中 | 1 天 | ⏳ | +| **E3** | 增量 embedding | 🟡 中 | 1 天 | ✅ 完成 | | **E4** | 图谱推理 | 🟡 中 | 2-3 天 | ⏳ | | **E5** | 产品 UI | 🔵 低 | 长期 | ⏳ | @@ -107,44 +107,39 @@ curl -X POST http://localhost:7821/api/v1/recall \ ### 目标 commit 时同步调用 vLLM embedding,不等 Rust sidecar batch,延迟从分钟级降到毫秒级。 -### 现状 -- commit 只写原始文本,embedding 要等 Rust sidecar 批处理 -- vLLM BGE-M3 已在 `localhost:8000` 运行,17ms/条 +### 现状(2026-05-31 验证) +- ✅ **已实现**:Go `core.go:79` 在 `Commit()` 中调用 `a.Embedder.EncodeSingle(req.Content)` +- ✅ **BGE HTTP**:连接 `localhost:8000/v1/embeddings`,17ms/条,L2 归一化 +- ✅ **IPC 传输**:Go 将 vector + 文本一起发往 Rust `lancedb_insert`,Rust 直接存储(不重编码) +- ✅ **验证**:commit 后立即 recall 测试记忆排第一(score=0.843),无需等待 batch +- ℹ️ embedder.go 有 `MOLIFANG_API_KEY` fallback(当前未启用,环境无此 key) ### 实施步骤 -#### E3.1 确认当前 embedding 流程 -- 查 `commit` API 在 Go 层的处理逻辑 -- 确认 vLLM embedding 调用在哪里(Go 还是 Rust?) +#### E3.1 确认当前 embedding 流程(已验证) +- Go `core.go:79` → `a.Embedder.EncodeSingle(req.Content)` → BGE HTTP 8000 → 1024-dim vector +- Go `core.go:123` → `Vector: vector` 写入 `models.MemoryRecord` +- Go `core.go:129` → `a.LanceDB.InsertMemory(mem)` → IPC `lancedb_insert` 发送到 Rust +- Rust `lancedb_ops.rs:160-163` → 从 JSON 读取 vector,直接写入 LanceDB FixedSizeListArray -#### E3.2 Go 层直接调用 vLLM -在 `internal/api/routes/commit.go` 的 commit 处理中,写入文本后同步调用: -``` -commit 文本 → 同步 POST vLLM localhost:8000 → 获取 1024dim 向量 → -写入 LanceDB(text + vector 同时落盘) -``` - -#### E3.3 保留 Rust sidecar 作为 fallback -如果 vLLM 不可用,fallback 到 Rust sidecar batch embedding。 - -#### E3.4 测试验证 +#### E3.2 验证结果(2026-05-31) ```bash -# 测试 embedding 延迟 -time curl -X POST http://localhost:7821/api/v1/commit \ - -H "Content-Type: application/json" \ - -d '{"content":"E3增量embedding测试,验证同步embedding延迟","namespace":"hermes"}' +# commit 后立即 recall +curl -X POST http://localhost:7821/api/v1/commit \ + -H "X-API-Key: zhiyi-dev-key-2026" \ + -d '{"content":"E3增量embedding测试:验证commit时同步生成vector","namespace":"default-main"}' +# → memory_id: mem_1780211630617301197 -# 验证:写入后立即 recall 能搜到(不等 batch) -sleep 1 -curl "http://localhost:7821/api/v1/recall?query=同步embedding延迟测试&top_k=3" - -# 验证 LanceDB 中该条记忆有向量(查不到具体值,但 recall 能用说明有) +curl -X POST http://localhost:7821/api/v1/recall \ + -H "X-API-Key: zhiyi-dev-key-2026" \ + -d '{"query":"E3增量embedding测试","top_k":3,"namespace":"default-main"}' +# → mem_1780211630617301197 排第一,score=0.843 ✅ ``` ### 验收标准 -- commit 响应时间 < 100ms(包含 embedding 调用) -- commit 后 5 秒内 recall 能搜到(无需等待 Rust sidecar) -- vLLM 不可用时 fallback 正常,不报错 +- [x] commit 响应包含 memory_id(写入成功) +- [x] commit 后立即 recall 能搜到(无需等待 Rust sidecar batch) +- [x] recall 得分 > 0.8(证明向量有效,非零向量) --- diff --git a/WORKLOG.md b/WORKLOG.md index be181d3..2d4d2c9 100644 --- a/WORKLOG.md +++ b/WORKLOG.md @@ -11,6 +11,7 @@ | G1: Recall 管线 | ✅ 完成 | MMR 修复 + E1 图谱扩展 + 搜索缓存 | | └ E1: 图谱导航激活 | ✅ 完成 | ExpandFromResults 已接入 Recall Step 5,condition=len<5 时触发 | | └ E2: 多 agent 命名空间激活 | ✅ 完成 | hermes→hermes-main, openclaw→openclaw-main,Rust sidecar namespace 过滤已验证 | +| └ E3: 增量 embedding | ✅ 完成 | Go Commit 时同步调用 BGE HTTP → vector 立即写入 LanceDB,recall 无需等待 batch | | G2: 本地 BGE | ✅ 完成 | 8000 端口 bge-m3,延迟 110ms | | G3: self-metrics | ✅ 完成 | deprecated_per_day=2, auto_resolve_rate=0(无冲突是正常状态)| | G4: WebSocket | ✅ 完成 | prefetch.push + consolidation.done 推送正常 | @@ -186,7 +187,7 @@ POST http://localhost:3000/v1/chat/completions # LLM 调用 ## 下一步 -- **E3**:增量 embedding(写入新记忆时实时编码,避免定时批量重新编码) +- **E4**:图谱推理(图谱真正参与推理:矛盾检测、跨 agent 共享、遗忘决策参考图谱结构) - **G7**:遗忘 + 技能系统(forgetter + agent skills) ---