memoryweave/WORKLOG.md

10 KiB
Raw Blame History

织忆系统修复工作记录

维护者:小唯 A06 创建2026-05-30 最新更新2026-06-01

E4.3 Bug Fix (2026-06-01)

问题 根因 修复
ShouldForget 的 degree 参数始终为 0 admin.go:73 用 mem["namespace"] 但 LanceDB 返回 map 里无此 key且 namespace 值(如 hermes-main不是实体 改为从 mem["content"] 提取实体(大写单词、中文实体、技术标记),取图谱最大度
涉及文件 go/internal/api/routes/admin.go 替换 namespace 读取为 extractTopEntityDegree()

阶段状态

阶段 状态 备注
G1: Recall 管线 完成 MMR 修复 + E1 图谱扩展 + 搜索缓存
└ E1: 图谱导航激活 完成 ExpandFromResults 已接入 Recall Step 5condition=len<5 时触发
└ E2: 多 agent 命名空间激活 完成 hermes→hermes-main, openclaw→openclaw-mainRust sidecar namespace 过滤已验证
└ E3: 增量 embedding 完成 Go Commit 时同步调用 BGE HTTP → vector 立即写入 LanceDBrecall 无需等待 batch
G2: 本地 BGE 完成 8000 端口 bge-m3延迟 110ms
G3: self-metrics 完成 deprecated_per_day=2, auto_resolve_rate=0无冲突是正常状态
G4: WebSocket 完成 prefetch.push + consolidation.done 推送正常
G5: Eval 框架 完成 eval/run + eval/generate(12条) + vprop 端点
G6: 聚类+蒸馏深化 完成 G6.1 DBSCAN + G6.2 LLM质量回溯 + G6.3 L2 Patterns + gap
G7: 遗忘 + 技能系统 🔜 待做 forgetter + agent skills
G8: 备份恢复 🔜 待做 backup/restore API
G9: 缓存 + 持久化 🔜 待做 recall cache 持久化 + 多级存储

提交记录

  • cd0f898 — G6: eps=1.0 (23 clusters), col_vector() for FixedSizeListArray reading
  • cc615c5 — docs: consolidate fix work log (2026-05-31)
  • 3b031ed — G6完整提交: skill trial路由 + LLM API key传Rust sidecar + Authorization header + reasoning_content fallback
  • e8b3a9f — E1 RuneCount bug fix
  • f4a2c71 — MMRSelect text-based diversity
  • 4f1e8d2 — WSPrefetchAdapter wired to recall pipeline
  • a7b2c3d — G5: eval framework + vprop endpoints

已修复的 bug

E1 图谱扩展 len() 字节数 bug

  • 文件:go/internal/governance/graph_sqlite.go
  • len(chinese)utf8.RuneCountInString(chinese)
  • 提交: e8b3a9f

G6.2 LLM 质量回溯修复2026-05-31

  • 问题1API key 有 sk- 前缀 → 修正为 0ExNiL...(无前缀)
  • 问题2MiniMax M2.7 是推理模型,响应在 reasoning_content 而非 content → 加 fallback
  • 问题3Go client 不传 LLM API key → 从 LLM_API_KEY 环境变量读取
  • 问题4Rust IPC handler 用空 CLI args → 改用 req.llm_endpoint
  • 模型切换MiniMax M2.7 → Qwen3.5-122B速度 2s更稳定
  • 提交: 3b031ed

G6.1 Rust IPC 字段映射错误

  • clusters_foundclustersRust IPC 返回字段名与 Go 期望不匹配)
  • consolidation 用 cluster_only 绕过 LLM 超时(定时器路径)

MMR 多样性去重失效

  • 文件:go/internal/storage/recall.go
  • Rust IPC 不返回 vector → 改用 jaccardBigramSimilarity
  • 修正 MMR 公式
  • 提交: f4a2c71

WebSocket prefetch 未接入 recall 管线

  • 文件:go/internal/api/routes/ws_events.go + core.go
  • 新增 WSPrefetchAdapter 实现 storage.PrefetchPusher 接口
  • NewAPI 中通过 SetPrefetchPusher 注入
  • 提交: 4f1e8d2

E1 图谱导航激活2026-05-31

  • 现状E1 代码已全部实现并通过 server.go:112 接入 RecallPipeline.SetGraphExpander(graphStore)
  • 触发条件recall.go Step 5 — 结果 < 5 条时调用 ExpandFromResults 扩展 1 跳图谱邻居
  • 扩展流程:实体提取 → BFS Navigate → 邻居去重 → 合并返回
  • 清理内容:移除 ExpandFromResults 中残留的 5 条 fmt.Printf("[E1] ...") debug 语句
  • 下一步图谱节点命名规范recall 结果实体 ↔ graph 节点名对齐)

E2 多 agent 命名空间激活2026-05-31

  • 现状:代码早已实现,本次验证确认有效
  • Hermesagent_id="hermes-a06"namespace="hermes-main"Go deriveNamespace
  • OpenClawagent_id="openclaw"namespace="openclaw-main"zhiyi client 显式传递)
  • 验证:同一 query 在 hermes-main 和 default-main 返回不同 ID 的记忆namespace 过滤生效
  • Rust sidecarsearch()scan_all() 均有 only_if("namespace = '{}'", ns) 过滤

验证数据

  • 搜索缓存: 首次 934ms → 二次 18ms
  • BGE 延迟: 110-145ms < 200ms
  • BGE 自相似度: 1.0 ≥ 0.99
  • WebSocket prefetch: 第 2 次 recall 后触发
  • WebSocket consolidation.done: 直接触发
  • LLM 速度测试Qwen3.5-122B: 2076ms
  • Consolidation full 路径: 3.7scluster_only未触发 LLM 是设计预期)
  • Recall 七维度: encode→ann→rerank→mmr 全链路 814ms
  • Self-optimization 自动调参: diversity/gap_threshold/distill_interval
  • Eval recall@5=1.0, MRR=1.0, nDCG=1.0

服务拓扑

进程与服务

服务 二进制路径 端口/Socket systemd 服务 用途
zhiyid ~/.local/bin/zhiyid 7821(HTTP) zhiyid.service Go HTTP API 主服务
zhiyi-sidecar ~/projects/memoryweave/rust/target/release/zhiyi-consolidate /tmp/zhiyi-ipc.sock zhiyi-sidecar.service Rust IPC Consolidation 处理器
BGE Embed Server ~/projects/memoryweave/rust/bge_embed_server.py 8000 bge-embed.service 本地向量嵌入服务
VLLM Gateway 3000 LLM 推理网关OneAPI

数据存储

存储 路径 说明
LanceDB /var/lib/memoryweave/ 向量存储 + 记忆数据
SQLite /var/lib/memoryweave/memoryweave.db 结构化关系数据
Graph DB /var/lib/memoryweave/graph.db 知识图谱
IPC Socket /tmp/zhiyi-ipc.sock Go → Rust 通信

LLM 配置

参数
ENDPOINT http://127.0.0.1:3000/v1/chat/completions
MODEL qwen/qwen3.5-122b-a10b
API KEY 0ExNiL...MWBP(无 sk- 前缀)

BGE 配置

参数
ENDPOINT http://127.0.0.1:8000/v1/embeddings
MODEL BAAI/bge-m3
向量维度 1024

部署命令

# Go 服务(用户级 systemd
cd ~/projects/memoryweave/go
go build -o /tmp/zhiyid-test ./cmd/zhiyid/
systemctl --user stop zhiyid
cp /tmp/zhiyid-test ~/.local/bin/zhiyid
systemctl --user daemon-reload
systemctl --user restart zhiyid

# Rust sidecar用户级 systemd
cd ~/projects/memoryweave/rust
cargo build --release
systemctl --user stop zhiyi-sidecar
cp target/release/zhiyi-consolidate <原路径>
systemctl --user daemon-reload
systemctl --user restart zhiyi-sidecar

API 端点

认证X-API-Key: zhiyi-dev-key-2026

POST   /api/v1/commit              # 提交记忆
POST   /api/v1/recall              # 检索记忆
POST   /api/v1/recall/debug        # 检索七维度诊断
POST   /api/v1/graph/navigate      # 图谱导航
GET    /api/v1/stats               # 统计信息
GET    /api/v1/metrics/self        # 自优化指标
POST   /api/v1/admin/consolidate    # 触发深度整合
POST   /api/v1/admin/dedup         # 去重
POST   /api/v1/eval/run             # 评估
POST   /api/v1/tuning/run          # 自动调参
GET    /api/v1/health              # 健康检查
WS     /api/v1/ws                  # WebSocket 实时推送

外部:
POST   http://localhost:8000/v1/embeddings   # BGE 向量化
POST   http://localhost:3000/v1/chat/completions  # LLM 调用

关键文件

~/projects/memoryweave/
├── WORKLOG.md              # 本文件
├── REPAIR-FULL.md          # 修复计划总表
├── go/
│   ├── cmd/zhiyid/main.go
│   ├── internal/
│   │   ├── api/routes/
│   │   │   ├── core.go     # NewAPI含 SetPrefetchPusher 接入)
│   │   │   └── ws_events.go # WSPrefetchAdapter
│   │   ├── governance/graph_sqlite.go # E1 bug 修复
│   │   └── storage/
│   │       └── recall.go   # MMR bigram 修复

下一步

  • E4:图谱推理(图谱真正参与推理:矛盾检测、跨 agent 共享、遗忘决策参考图谱结构)
  • G7:遗忘 + 技能系统forgetter + agent skills

2026-05-31 紧急修复consolidate 服务路径冲突

问题

监控报告 lancedb 目录为空,实际数据在 /var/lib/memoryweave/memories.lance/1386 条)。

根因

两个问题叠加:

  1. 系统级 service 文件路径错误/etc/systemd/system/zhiyi-consolidate.service 指向:

    • binary: /usr/local/bin/zhiyi-consolidate(旧 binary5月29日
    • data-dir: /var/lib/memoryweave/lancedb(空目录)
  2. 多进程冲突:同时存在 3 个 consolidate 进程,路径各异

修复

# 1. 修复系统 service 文件
cat > /etc/systemd/system/zhiyi-consolidate.service << 'SERVICE'
[Unit]
Description=ZhiYi Consolidation Engine (Rust LanceDB)
After=network.target

[Service]
Type=simple
User=muc
ExecStart=/home/muc/projects/memoryweave/rust/target/release/zhiyi-consolidate --socket /tmp/zhiyi-ipc.sock --data-dir /var/lib/memoryweave
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
SERVICE

# 2. 重载并重启
sudo -S -p '' systemctl daemon-reload
sudo -S -p '' systemctl restart zhiyi-consolidate

验证

$ curl -s -H "X-API-Key: zhiyi-dev-key-2026" "http://127.0.0.1:7821/api/v1/stats"
{"backend":"lancedb (Rust IPC)","data_dir":"/var/lib/memoryweave","tombstone_count":0,"total_episodes":1,"total_memories":1388}

数据完好1388 条 memories。

经验教训

  • 部署 binary 时必须同步更新 systemd service 文件,不能只替换 binary
  • 两个 service 文件需保持同步:~/.config/systemd/user/zhiyi-consolidate.service/etc/systemd/system/zhiyi-consolidate.service
  • 监控系统检查的路径必须和实际运行的进程路径一致