memoryweave/WORKLOG.md

8.1 KiB
Raw Blame History

织忆系统修复工作记录

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

阶段状态

阶段 状态 备注
G1: Recall 管线 完成 MMR 修复 + E1 图谱扩展 + 搜索缓存
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 持久化 + 多级存储

提交记录

  • 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

验证数据

  • 搜索缓存: 首次 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 修复

下一步

  • G7:遗忘 + 技能系统forgetter + agent skills
  • G6.2:实际 full 模式触发验证(需数据积累或手动构造测试数据)
  • G8:备份恢复

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
  • 监控系统检查的路径必须和实际运行的进程路径一致