memoryweave/WORKLOG.md

232 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 织忆系统修复工作记录
> 维护者:小唯 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
- **问题1**API key 有 `sk-` 前缀 → 修正为 `0ExNiL...`(无前缀)
- **问题2**MiniMax M2.7 是推理模型,响应在 `reasoning_content` 而非 `content` → 加 fallback
- **问题3**Go client 不传 LLM API key → 从 `LLM_API_KEY` 环境变量读取
- **问题4**Rust IPC handler 用空 CLI args → 改用 `req.llm_endpoint`
- **模型切换**MiniMax M2.7 → Qwen3.5-122B速度 2s更稳定
- 提交: `3b031ed`
### G6.1 Rust IPC 字段映射错误
- `clusters_found``clusters`Rust 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 七维度: encodeannrerankmmr 全链路 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 |
## 部署命令
```bash
# 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 进程路径各异
### 修复
```bash
# 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`
- 监控系统检查的路径必须和实际运行的进程路径一致