织忆 MemoryWeave 实施计划 v0.1
目标:Python 原型 → Go+Rust 生产级基础设施
代码生成:全部由 opencode 生成,不做手工编码
仓库:http://192.168.123.11:3000/xiaoxue_admin/memoryweave
里程碑概览
| 里程碑 |
天数 |
输出 |
验收标准 |
| M1: 骨架 |
1-2 |
go build + cargo build 通过 |
/health 200 OK |
| M2: 存储 |
3-5 |
LanceDB 集成 + Embedding 管线 |
recall 延迟 < 200ms(本地 BGE) |
| M3: 核心 API |
6-10 |
/commit + /recall + /bootstrap |
对比 Python 版本结果一致 |
| M4: 蒸馏 |
11-15 |
自动蒸馏 + 质量评分 |
commit → distill → LanceDB 全链路 |
| M5: 治理 |
16-20 |
冲突检测 + 遗忘 + 知识图谱 |
/conflicts/scan 返回正确结果 |
| M6: 自优化 |
21-25 |
仪表盘 + 缺口检测 + 因果追踪 |
7 项指标产出有效趋势 |
| M7: 分布式 |
26-30 |
Redis Streams + CRDT |
双实例 doc_count 一致 |
| M8: 切换 |
31-35 |
影子部署 → 灰度 → 全量 |
7821 端口 Go 服务稳定 72h |
M1: 项目骨架(Day 1-2)
任务
| ID |
任务 |
文件 |
预估 |
| M1.1 |
Go go mod tidy 通过 |
go/go.mod |
0.5h |
| M1.2 |
Rust cargo check 通过 |
rust/Cargo.toml |
0.5h |
| M1.3 |
/health 端点 + Auth 中间件 |
go/internal/api/server.go |
2h |
| M1.4 |
Protobuf 定义 (Go↔Rust IPC) |
go/proto/consolidate.proto |
1h |
| M1.5 |
Rust main.rs 参数解析 |
rust/src/main.rs |
1h |
| M1.6 |
systemd unit 文件 |
deploy/*.service |
0.5h |
| M1.7 |
CI: build + test (Makefile) |
Makefile |
1h |
验收
make build # go build + cargo build 通过
sudo make install # systemd 服务安装成功
curl http://localhost:7821/health # {"status":"ok"}
M2: 存储层(Day 3-5)
任务
| ID |
任务 |
文件 |
预估 |
| M2.1 |
LanceDB schema 创建(memories/episodes/tombstones) |
go/internal/storage/lancedb.go |
3h |
| M2.2 |
LanceDB 读写(Insert/Search/Update) |
go/internal/storage/lancedb.go |
3h |
| M2.3 |
bge-m3 编码客户端(本地 vLLM + 模力方舟 fallback) |
go/internal/storage/embedder.go |
3h |
| M2.4 |
bge-reranker-v2-m3 客户端 |
go/internal/storage/reranker.go |
2h |
| M2.5 |
Recall pipeline: encode → LanceDB search → rerank |
go/internal/storage/recall.go |
3h |
| M2.6 |
JSONL 分片读写(episodes 历史数据) |
go/internal/storage/jsonl.go |
2h |
| M2.7 |
Redis 客户端(commit store + 事件流) |
go/internal/storage/redis.go |
2h |
| M2.8 |
SQLite 初始化(distill_queue + graph + audit_log) |
go/internal/storage/sqlite.go |
2h |
| M2.9 |
Rust LanceDB 原生读写(lancedb crate) |
rust/src/lancedb.rs |
2h |
| M2.10 |
Rust Embedding 管线(Candle/ort) |
rust/src/embed.rs |
3h |
验收
# LanceDB 创建表 + 插入 10 条测试数据 + 搜索 → 返回正确结果
curl -X POST -H "X-API-Key: $KEY" localhost:7821/api/v1/recall \
-d '{"query":"牧尘的系统配置","limit":5}'
# → 返回 5 条相关记忆,延迟 < 200ms
M3: 核心 API(Day 6-10)
任务
| ID |
任务 |
预估 |
| M3.1 |
POST /api/v1/commit — 写入 episode |
3h |
| M3.2 |
POST /api/v1/recall — 混合检索(向量+图谱+MMR) |
3h |
| M3.3 |
GET /api/v1/bootstrap — 冷启动 |
1h |
| M3.4 |
POST /api/v1/batch-commit — 批量提交 |
2h |
| M3.5 |
GET /api/v1/stats — 统计 |
1h |
| M3.6 |
全端点 Auth 中间件 |
1h |
| M3.7 |
API 对比测试(Python vs Go) |
3h |
| M3.8 |
WebSocket /api/v1/ws/{agent_id} — 实时推送 |
3h |
验收
# 与 Python 版本相同输入 → 相同输出
python -m pytest tests/api_compat.py -v
# → 全部通过
M4: 蒸馏引擎(Day 11-15)
任务
| ID |
任务 |
预估 |
| M4.1 |
硬规则过滤(Layer 1) |
2h |
| M4.2 |
LLM 评估蒸馏(Layer 2)— 5 维度评分 |
4h |
| M4.3 |
commit → 自动触发蒸馏 |
2h |
| M4.4 |
Distilled 写入 LanceDB |
2h |
| M4.5 |
批量蒸馏(攒 N 条一起处理) |
2h |
| M4.6 |
每日 LLM 调用限额(50 次/agent) |
2h |
| M4.7 |
降级策略(LLM 不可用 → 规则提取) |
2h |
| M4.8 |
/api/v1/feedback/useful + /not-useful 端点 |
2h |
| M4.9 |
质量评分(quality_score = useful/(useful+not_useful)) |
1h |
验证
# 提交 3 条 episode → 自动蒸馏 → 检查 distilled 表
curl -X POST /api/v1/commit -d '{...}' # x3
curl /api/v1/stats | jq '.distilled_count'
# → 3
M5: 治理引擎(Day 16-20)
任务
| ID |
任务 |
预估 |
| M5.1 |
冲突检测 — entity/fact/decision 三种冲突 |
4h |
| M5.2 |
/api/v1/conflicts 端点 |
2h |
| M5.3 |
冲突自动裁决(latest_wins / primary_wins) |
2h |
| M5.4 |
遗忘策略:线性衰减 + 核心记忆保护 |
3h |
| M5.5 |
知识图谱 SQL schema + 建图 |
4h |
| M5.6 |
多跳导航(双向 BFS + 打分) |
4h |
| M5.7 |
图谱修剪(4 条规则) |
2h |
| M5.8 |
Namespace 隔离(shared vs agent-local graph) |
2h |
| M5.9 |
/api/v1/graph/* 端点 |
2h |
| M5.10 |
WebSocket 冲突通知 → 牧尘裁决 |
2h |
验收
# 写入两条冲突事实 → 检测冲突
curl -X POST /api/v1/commit -d '{"content":"Docker used_by hermes"}'
curl -X POST /api/v1/commit -d '{"content":"Docker used_by openclaw"}'
curl /api/v1/conflicts | jq '.count'
# → 1
# 知识图谱多跳导航
curl /api/v1/graph/navigate -d '{"entity":"Docker","max_hops":2}'
# → 返回 Docker → hermes, Docker → openclaw 完整路径
M6: 自优化引擎(Day 21-25)
任务
| ID |
任务 |
预估 |
| M6.1 |
自优化仪表盘 (GET /api/v1/metrics/self) — 7 项指标 |
3h |
| M6.2 |
知识缺口检测(连续 3 次 miss → gap) |
3h |
| M6.3 |
缺口自动分类(Type A/B/C/D) |
3h |
| M6.4 |
Type B/C 自动修复(同义词映射/阈值重试) |
2h |
| M6.5 |
Type A 学习任务创建 + WebSocket 推送 |
2h |
| M6.6 |
记忆预取 — 共访关系图谱 |
3h |
| M6.7 |
记忆刷新 — freshness 字段 + stale 标记 |
2h |
| M6.8 |
溯源链 — version_history + source + trigger |
2h |
| M6.9 |
来源信任加权(牧尘 1.0 > 配置 0.7 > LLM 0.4) |
1h |
| M6.10 |
Rust 深度整合(DBSCAN + 衰减回归 + 质量回溯) |
5h |
| M6.11 |
蒸馏质量反向测试(L0→L1→L0' cosine 检验) |
3h |
| M6.12 |
周期性触发器(条件触发 > 24h 定时) |
2h |
验收
# 仪表盘有数据
curl /api/v1/metrics/self | jq '.recall_useful_rate'
# → 0.85
# 缺口检测正常工作
curl /api/v1/gaps | jq '.count'
# → > 0
# Rust 深度整合
sudo systemctl start zhiyi-consolidate
journalctl -u zhiyi-consolidate | grep "completed"
# → "consolidation completed: 3 clusters, decay calibrated, quality score 0.92"
M7: 分布式部署(Day 26-30)
任务
| ID |
任务 |
预估 |
| M7.1 |
Redis Streams 事件传播(XADD/XREAD) |
4h |
| M7.2 |
CRDT 合并策略(时间戳 + 来源优先) |
4h |
| M7.3 |
服务发现(Redis Hash + TTL 心跳) |
2h |
| M7.4 |
速率限制(per-agent 令牌桶) |
2h |
| M7.5 |
Nginx 负载均衡配置 |
1h |
| M7.6 |
备份原子性(LanceDB checkpoint + SQLite .backup) |
2h |
| M7.7 |
灾难恢复脚本 |
1h |
| M7.8 |
Prometheus metrics 端点 |
2h |
| M7.9 |
双实例 E2E 测试 |
3h |
验收
# 双实例同步
# Instance A commit → Instance B 30s 内可见
# Instance B 宕机重启 → 自动补齐缺失数据
# doc_count 一致
M8: 灰度切换(Day 31-35)
| ID |
任务 |
预估 |
| M8.1 |
FAISS → LanceDB 迁移脚本 |
3h |
| M8.2 |
影子部署:Go 在 7822 运行 48h |
— |
| M8.3 |
灰度:Nginx upstream 10% → 50% → 100% |
— |
| M8.4 |
systemd 切换:zhiyi.service → Go 二进制 |
1h |
| M8.5 |
Hermes bridge 验证:memory_search/write 正常 |
1h |
| M8.6 |
旧 Python 代码归档(7 天可快速回滚) |
0.5h |
| M8.7 |
Go 版本稳定运行 72h 无回滚 |
— |
验收
curl http://localhost:7821/health
# → {"status":"ok","service":"zhiyid","version":"1.0.0","uptime":"72h"}
关键路径
M1 → M2 → M3 → M4 → M5 → M6 → M7 → M8
↘ M5(可与 M4 并行)
↘ M6(依赖 M5 图谱)
可并行
| 并行组 |
任务 |
| M2.9-M2.10(Rust) |
与 M2.1-M2.8(Go)并行 |
| M5(治理) |
可与 M4(蒸馏)部分并行 |
| M7.5-M7.8(运维) |
与 M7.1-M7.4 并行 |
风险
| 风险 |
概率 |
缓解 |
| opencode 限流 |
中 |
核心路径优先;多轮生成 |
| LanceDB Go 绑定不稳定 |
低 |
备选:Rust lancedb crate 原生 |
| bge-m3 向量不一致 |
中 |
cosine_sim ≥ 0.99 阈值检验 |
| FAISS 数据迁移丢失 |
低 |
备份 → 迁移 → 数目对比 → 抽查 |
| Rust Candle/ort 编译失败 |
中 |
先 HTTP 调用 vLLM,Rust 仅用 LanceDB |
分支策略
main ← 稳定版本,只接受 PR
develop ← 开发主线
feature/m1-* ← 各里程碑特性分支
release/v1.0 ← 发布分支
Commit 规范
feat: M3.1 POST /api/v1/commit 实现
fix: LanceDB schema timestamp 类型修正
docs: IMPLEMENTATION.md M2 验收标准更新
refactor: recall pipeline 提取为独立模块
版本标签
| 标签 |
对应 |
日期目标 |
| v0.1.0-dev |
M1 骨架完成 |
Day 2 |
| v0.2.0-dev |
M2 存储完成 |
Day 5 |
| v0.3.0-dev |
M3 核心 API |
Day 10 |
| v0.4.0-dev |
M4 蒸馏 |
Day 15 |
| v0.5.0-dev |
M5 治理 |
Day 20 |
| v0.6.0-dev |
M6 自优化 |
Day 25 |
| v0.7.0-dev |
M7 分布式 |
Day 30 |
| v1.0.0 |
M8 全量切换 |
Day 35 |