memoryweave/README.md

632 lines
25 KiB
Markdown
Raw Permalink 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.

# 织忆 (MemoryWeave) — 独立记忆基础设施
> **Go + Rust 双二进制架构** | port 7821 | 版本 v0.1.0-dev
> Gitea: http://192.168.123.11:3000/xiaoxue_admin/memoryweave/
织忆是多 Agent 系统的共享记忆层。它提供**语义记忆检索**、**知识图谱导航**、**自动蒸馏整合**三大核心能力,为 Hermes Agent、OpenClaw、Obsidian 等多客户端提供统一的记忆读写接口。
**织忆不是小唯系统的子模块——它是独立的基础设施服务。** 小唯系统xiaowei-system是上层应用织忆是底层存储引擎两者代码独立、仓库独立、进程独立通过 HTTP API 交互。
---
## 相关项目关系图
```
┌─────────────────────────────────────────────────────────┐
│ 基础设施层(独立仓库,独立进程) │
│ │
│ 织忆 memoryweave TencentDB │
│ /tmp/memoryweave/ ~/.memory-tencentdb/ │
│ port 7821 port 8420 │
│ zhiyid + LanceDB tdai-gateway │
│ + bge-embed Node.js │
└────────────────────┬────────────────────────────────────┘
│ HTTP APIlocalhost
┌─────────────────────────────────────────────────────────┐
│ 上层应用层(小唯系统) │
│ │
│ ~/.hermes/ ← xiaowei-system 仓库Git 版本控制) │
│ │
│ ┌─────────┐ ┌──────────┐ ┌─────────┐ ┌──────────┐ │
│ │ Soulful │ │ daemon │ │ cron │ │ skills │ │
│ │ 牵挂 │ │ 持久意识 │ │ 定时任务│ │ 仓颉技能 │ │
│ │ 心迹 │ │ L1→L6 │ │ 自检 │ │ 股票投研 │ │
│ │ 画像 │ │ 蒸馏 │ │ 升级 │ │ │ │
│ └─────────┘ └──────────┘ └─────────┘ └──────────┘ │
│ │
│ daemon.py → 统一写入 → llm_context.jsonL7统一层
└─────────────────────────────────────────────────────────┘
│ daemon.py 读取
┌────────────────────┴────────────────────────────────────┐
│ 参考架构项目GitHub/Gitea
│ │
│ agent-memory-skill ← tier分层/线性衰减 参考 │
│ memory-os ← 7层记忆架构 参考 │
└─────────────────────────────────────────────────────────┘
```
---
## 各项目详情
### 织忆 memoryweave底层存储引擎
| 属性 | 值 |
|------|-----|
| 源码位置 | `/tmp/memoryweave/` |
| Gitea | http://192.168.123.11:3000/xiaoxue_admin/memoryweave |
| 进程 | zhiyidport 7821+ zhiyi-consolidate + bge-embedport 8000|
| 数据 | LanceDBmemories+ graph.db8397 节点图谱)|
| API | `http://127.0.0.1:7821/api/v1/` |
### 小唯系统 xiaowei-system上层应用
| 属性 | 值 |
|------|-----|
| 源码位置 | `~/.hermes/` |
| Gitea | http://192.168.123.11:3000/xiaoxue_admin/xiaowei-system |
| 进程 | daemon.py持久意识 |
| 数据 | llm_context.jsonL7 统一层)+ soulful/Soulful 数据)|
**Soulful牵挂/心迹/画像)** 是 xiaowei-system 的子模块,数据文件在 `~/.hermes/soulful/`
- `cares-queue.json` — 牵挂队列
- `heart-traces.jsonl` — 心迹(重要时刻记录)
- `user-profile.json` — 用户画像(含 distilled_rules
### TencentDB memory-tdai对话记忆
| 属性 | 值 |
|------|-----|
| 源码位置 | `~/.memory-tencentdb/memory-tdai/` |
| Gitea | 无(未版本控制)|
| 进程 | tdai-gatewayport 8420Node.js|
| 数据 | `memory.db`(对话)+ `vectors.db`(向量)|
| API | `http://127.0.0.1:8420/` |
| 小唯调用 | daemon.py 通过 `/capture``/recall` 写入/读取 |
### 参考项目
| 仓库 | 用途 |
|------|------|
| `xiaoxue_admin/agent-memory-skill` | tier 分层、线性衰减架构参考 |
| `xiaoxue_admin/memory-os` | 7层记忆操作系统架构参考 |
---
## 安装顺序
```
第一步:织忆(底层)
第二步TencentDB对话存储
第三步:小唯系统(上层应用,包含 Soulful
```
**安装顺序:织忆 → TencentDB → 小唯系统。** 三者通过 HTTP API 互联,代码完全解耦。
---
## 架构依赖
```
小唯系统(daemon.py)
├── /capture (TencentDB) ← L3/L4 scenes 存储
│ └── session_key + user_content + assistant_content
├── http://127.0.0.1:7821 ← 织忆 L1/L2 recall
│ └── X-API-Key: zhiyi-dev-key-2026
├── ~/.hermes/soulful/ ← Soulful L5/L6 读写
│ └── cares + heart-traces + user-profile
└── → 统一写入 ~/.hermes/llm_context.jsonL7
```
| 项目 | 仓库 | 定位 | 依赖关系 |
|------|------|------|---------|
| **织忆 memoryweave** | `xiaoxue_admin/memoryweave` | 底层存储引擎zhiyid + LanceDB + bge-embed| 被依赖方 |
| **小唯 xiaowei-system** | `xiaoxue_admin/xiaowei-system` | 上层应用daemon + cron + 记忆蒸馏)| 依赖方 |
**安装顺序:先织忆,再小唯系统。** 小唯系统通过 `localhost:7821` 调用织忆 API。
```bash
# 小唯系统调用织忆示例
curl -s -H "X-API-Key: zhiyi-dev-key-2026" \
-d '{"query":"牧尘偏好","top_k":3}' \
http://127.0.0.1:7821/api/v1/recall
```
---
## 架构总览
```
┌──────────────────────────────────────────────────────────────┐
│ Hermes Agent (Plugin) │
│ plugins/memory/zhiyi/ — 7 tools + 自动注入 + 社交关闭 │
└──────────────────────────┬───────────────────────────────────┘
│ HTTP (localhost:7821)
┌──────────────────────────────────────────────────────────────┐
│ zhiyid (Go daemon, port 7821) │
│ │
│ ┌─────────────┐ ┌──────────────┐ ┌──────────────────────┐ │
│ │ REST API │ │ 蒸馏引擎 │ │ 冲突治理 / 缺口检测 │ │
│ │ ~84 端点 │ │ distill/ │ │ conflict + gap │ │
│ └──────┬──────┘ └──────┬───────┘ └──────────────────────┘ │
│ │ │ │
│ │ ┌──────────▼───────────┐ │
│ │ │ SQLiteGraphStore │ │
│ │ │ (7014 节点/61058 边)│ │
│ │ └──────────────────────┘ │
│ │ │
│ │ Unix Socket (/tmp/zhiyi-ipc.sock) │
└─────────┼─────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────┐
│ zhiyi-consolidate (Rust sidecar) │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌────────────────────┐ │
│ │ LanceDB 原生 │ │ DBSCAN 聚类 │ │ Embedding + │ │
│ │ 读写 │ │ 衰减回归 │ │ Rerank 管线 │ │
│ └──────┬───────┘ └──────────────┘ └────────────────────┘ │
│ ▼ │
│ ┌─────────────────────────────────────┐ │
│ │ /var/lib/memoryweave/ (LanceDB) │ │
│ │ memories: 3510 条 / episodes: 73 │ │
│ └─────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘
┌──────────────────────────┐
│ bge-embed (port 8000) │ ← Python ONNX 推理
│ BGE-M3 embedding 服务 │
└──────────────────────────┘
```
### 语言分工
| 组件 | 语言 | 原因 |
|------|------|------|
| HTTP API + 业务逻辑 | Go | goroutine 高并发,单二进制 |
| LanceDB + 向量管线 | Rust | 原生 `lancedb` crate零 FFI |
| Embedding 推理 | Python (ONNX) | BGE-M3 模型,最佳推理生态 |
| Hermes 插件 | Python | Hermes MemoryProvider 接口 |
---
## 功能特性
### 语义记忆commit / recall
```
POST /api/v1/commit — 提交记忆(需 agent_id + content
POST /api/v1/recall — 语义检索(支持 hybrid / keyword / semantic 三模式)
```
- 1024 维向量嵌入BGE-M3
- MMR diversity 默认 0.3,结果去重
- freshness 生命周期:`fresh` → `verified`
- 支持 namespace 隔离
### 知识图谱Navigate / Stats
```
POST /api/v1/graph/navigate — BFS 节点关系遍历
GET /api/v1/graph/stats — 图谱统计
POST /api/v1/graph/query — 精确边查询
GET /api/v1/graph/pagerank — PageRank 排序
```
- SQLite 存储7014 节点 / 61058 边
- 自动实体归一化(`n_` 前缀)
- 按关系类型分组 + 推荐探索建议
- 自然语言查询(`nl_query`
### P0 — Recall 降级策略
当 bge-embed (8000) 或 Rust IPC sidecar 不可用时recall 自动降级到 graph.db 关键词搜索FallbackTextSearch返回 `X-Fallback: graph` 响应头。保证单点故障不导致全挂。
### P1 — 自动注入钩子 + 社交关闭
- `queue_prefetch` 后台线程自动查织忆 + 缓存TTL 30s
- 社交关闭检测:短消息、纯社交用语("好的" / "ok" / "👍")跳过注入
- 输出标记:`[织忆 Memory]` / `[织忆 Graph]`
- 无缝融入 Hermes 对话流
### P2 — 信任评分
`graph_edges` 表新增三列:
| 列名 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `trust_score` | REAL | 0.5 | 信任评分(贝叶斯先验) |
| `retrieval_count` | INTEGER | 0 | 被检索次数 |
| `helpful_count` | INTEGER | 0 | 被标记有用次数 |
评分公式:`trust_score = helpful_count / retrieval_count`retrieval_count > 0 时)
### P3 — CREATIVE.md 隔离
`~/.hermes/CREATIVE.md` 存储织忆工作记忆,插件 `system_prompt_block()` 自动加载标注为 `[织忆 工作记忆]`Ground Truth level 2解决 memory 工具与织忆 plugin 的双写入冲突。
### P4 — Ground Truth Prompt
SOUL.md 定义 4 级权威层级:
1. **Terminal 实时输出** — curl / 工具调用真实结果
2. **注入记忆**`[织忆 Memory]` / `[织忆 Graph]`(插件注入)
3. **项目官方文档**`docs/` / README / INSTALL
4. **训练知识** — 模型权重中存储的通用知识
低层级不可推翻高层级。另有记忆反馈规则确保信任评分闭环。
### P5 — Wiki 策展管线
`scripts/wiki_curator.py` 自动知识库管线:
- 扫描 `~/mc/``.md` 文件SHA-256 diff 跟踪
- 启发式提取headings → 概念bold / key phrases → 实体
- 写入织忆:概念 `/commit`category=wiki关系 `/graph/edge`
- 支持 `--dry-run`(预览)、`--force`(全量)、`--llm`LLM 增强)
- 跳过 <500 字符文件和 `_` 前缀文件
### H1-H6 精度优化
| 编号 | 优化 | 状态 |
|------|------|------|
| H1 | BM25 关键词评分0.7 向量 + 0.3 关键词融合 | |
| H2 | LLM Wiki 策展--llm 模式回退启发式 | |
| H3 | 自动信任评分recall 后异步 UpdateEdgeTrustScores | |
| H4 | 默认 MMR diversity = 0.3 | |
| H5 | 三模式搜索hybrid / keyword / semantic | |
| H6 | 多级存储LanceDB SQLite 内存三级降级 | |
### cli-anything 命令行伴侣
织忆原生集成 cli-anything 框架 Go Rust API 封装为 CLI 子命令支持
- `zhiyi commit` / `zhiyi recall` 记忆操作
- `zhiyi navigate` / `zhiyi stats` 图谱查询
- `zhiyi health` 健康检查
- 详见 `cli-anything/` 目录
### rag-skill 渐进式检索(新增)
三段式检索架构
```
用户查询 → keyword 粗筛 → semantic 精排 → rerank 重排序
```
- 粗筛层BM25 关键词倒排索引快速缩减候选集
- 精排层BGE-M3 语义嵌入向量相似度排序
- 重排序层cross-encoder rerank微调 top-K 结果
- 默认返回 top-K 结果支持 `top_k` 参数调优
---
## 快速开始
### 前置依赖
- Go 1.21+
- Rust 1.75+仅需构建 zhiyi-consolidate
- Redis 7.0+可选默认降级为内存模式
- Python 3.10+bge-embedding 服务
### 构建
```bash
# 克隆
git clone http://192.168.123.11:3000/xiaoxue_admin/memoryweave.git
cd memoryweave
# 构建 Go daemonzhiyid
make build
# 构建 Rust sidecar可选
make build-rust
# 构建 CLI 工具
make build-cli
```
### 运行
```bash
# 方式一:直接运行
~/.local/bin/zhiyid
# 方式二systemd用户级推荐
systemctl --user enable --now zhiyid
systemctl --user enable --now bge-embed
systemctl --user enable --now zhiyi-consolidate
curl http://localhost:7821/health
# 方式三Docker
docker compose up -d
curl http://localhost:7821/health
```
### 验证完整链路
```bash
# 1) 健康检查
curl -s -H "X-API-Key: zhiyi-dev-key-2026" http://localhost:7821/api/v1/health
# 2) 提条记忆试试
curl -s -X POST -H "X-API-Key: zhiyi-dev-key-2026" \
-H "Content-Type: application/json" \
-d '{"agent_id":"a06","content":"Hello 织忆","metadata":{"source":"test"}}' \
http://localhost:7821/api/v1/commit
# 3) 搜一下
curl -s -X POST -H "X-API-Key: zhiyi-dev-key-2026" \
-H "Content-Type: application/json" \
-d '{"query":"织忆","top_k":3}' \
http://localhost:7821/api/v1/recall
# 4) 图谱统计
curl -s -H "X-API-Key: zhiyi-dev-key-2026" http://localhost:7821/api/v1/graph/stats
```
### Hermes 插件安装
```bash
cp -r plugins/hermes-zhiyi ~/.hermes/hermes-agent/plugins/memory/zhiyi
uv pip install websocket-client
cd ~/.hermes/hermes-agent
python3 -c "from plugins.memory.zhiyi import HermesZhiYiMemoryProvider; \
p = HermesZhiYiMemoryProvider(); \
print(f'可用: {p.is_available()}, 工具数: {len(p.get_tool_schemas())}')"
```
---
## 配置参考
### 环境变量
| 变量 | 默认值 | 说明 |
|------|--------|------|
| `PORT` | `7821` | API 监听端口 |
| `STORAGE_BACKEND` | `lancedb` | 存储后端`lancedb` / `sqlite` / `memory` |
| `SQLITE_PATH` | `/var/lib/memoryweave/memoryweave.db` | SQLite 数据库路径 |
| `LANCEDB_SOCKET` | `/tmp/zhiyi-ipc.sock` | Rust IPC socket 路径 |
| `GRAPH_PATH` | `/var/lib/memoryweave/graph.db` | 图谱数据库路径 |
| `API_KEY` | | API 认证密钥 |
| `VLLM_ENDPOINT` | | Embedding 模型端点 |
| `BGE_MODEL_DIR` | | BGE-M3 ONNX 模型目录 |
| `RERANK_ENDPOINT` | | Rerank 模型端点 |
| `LLM_ENDPOINT` | | LLM 端点蒸馏/自动修复用 |
| `LLM_MODEL` | | LLM 模型名称 |
| `LLM_API_KEY` | | LLM API Key |
| `STATIC_DIR` | 内置静态文件 | Web UI 静态文件目录 |
| `ZHIYI_WEB_UI_ROOT` | 内置 HTML | Web UI 入口路径 |
---
## API 速查表
> 所有 `/api/v1/*` 接口需要 Header: `X-API-Key: ***`
### 健康检查
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/health` | 健康检查无认证 |
| GET | `/api/v1/health` | 健康检查需认证 |
### 核心记忆
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | `/api/v1/commit` | 提交记忆 |
| POST | `/api/v1/recall` | 语义检索支持 mode=hybrid\|keyword\|semantic |
| POST | `/api/v1/batch-commit` | 批量提交 |
| GET | `/api/v1/memories` | 列出记忆分页 |
| POST | `/api/v1/feedback` | 反馈useful / not-useful / deprecate |
### 统计
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/api/v1/stats` | 系统统计total_memories, episodes |
### 知识图谱
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/api/v1/graph/stats` | 图谱统计节点数 / 边数 / 密度 |
| POST | `/api/v1/graph/navigate` | BFS 节点遍历entity + max_hops |
| POST | `/api/v1/graph/query` | 精确边查询 |
| POST | `/api/v1/graph/nl_query` | 自然语言图谱查询 |
| POST | `/api/v1/graph/edge` | 添加关系边 |
| POST | `/api/v1/graph/edge/feedback` | 边信任评分反馈 |
| GET | `/api/v1/graph/pagerank` | PageRank 节点排名 |
| POST | `/api/v1/graph/export` | 导出图谱 |
| POST | `/api/v1/graph/cleanup` | 脏数据清理支持 dry_run |
| GET | `/api/v1/cache/stats` | 图谱缓存命中率 |
### WebSocket
| 方法 | 路径 | 说明 |
|------|------|------|
| WS | `/api/v1/ws/{agent_id}` | 实时记忆流订阅 |
### 管理接口
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | `/api/v1/admin/consolidate` | 手动触发记忆整合 |
| POST | `/api/v1/admin/forget` | 删除记忆 |
| POST | `/api/v1/admin/backup` | 创建备份 |
| GET | `/api/v1/admin/backups` | 列出备份 |
| POST | `/api/v1/admin/restore` | 恢复备份 |
| POST | `/api/v1/admin/distill/force` | 强制蒸馏 |
| GET | `/api/v1/admin/audit` | 审计日志 |
### 冲突治理
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/api/v1/conflicts` | 列出记忆冲突 |
| POST | `/api/v1/conflicts/resolve` | 解决冲突 |
### 缺口检测
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/api/v1/gaps` | 列出记忆缺口 |
| POST | `/api/v1/gaps/detect` | 检测缺口 |
| POST | `/api/v1/gaps/repair` | 修复缺口 |
| POST | `/api/v1/gaps/close/{id}` | 关闭缺口 |
### 蒸馏管理
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/api/v1/distill/status` | 蒸馏状态 |
| GET | `/api/v1/distill/queue` | 蒸馏队列 |
| GET | `/api/v1/distill/quota` | 蒸馏配额 |
### L3 世界模型
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/api/v1/l3/worldmodel` | 获取世界模型 |
| POST | `/api/v1/l3/worldmodel` | 更新世界模型 |
---
## 目录结构
```
memoryweave/
├── go/ # Go daemonzhiyid
│ ├── cmd/zhiyid/ # 主入口
│ ├── internal/
│ │ ├── api/ # HTTP 路由 + 端点(~84 端点)
│ │ │ └── routes/ # 路由实现core, graph, ws, l3, ...
│ │ ├── governance/ # 冲突治理、图谱存储、自动扩展
│ │ ├── storage/ # 存储引擎lancedb, sqlite, redis, recall, ...
│ │ ├── models/ # 数据模型
│ │ ├── distill/ # 蒸馏引擎
│ │ ├── consolidate/ # 记忆整合客户端
│ │ ├── selfoptimize/ # 自优化管线
│ │ ├── distributed/ # 分布式支持
│ │ └── metrics/ # 监控指标
│ └── zhiyid-new # 编译产物
├── rust/ # Rust sidecarzhiyi-consolidate
│ └── src/
│ ├── main.rs # IPC 监听 + 调度
│ ├── lancedb_ops.rs # LanceDB 原生读写
│ ├── embed.rs # Embedding 推理
│ ├── rerank.rs # Rerank 管道
│ ├── cluster.rs # DBSCAN 聚类
│ ├── decay_calibrate.rs # 衰减校准
│ ├── graph_prune.rs # 图谱剪枝
│ ├── quality_backtrace.rs # 质量回溯
│ └── report.rs # 报告生成
├── plugins/
│ ├── hermes-zhiyi/ # Hermes MemoryProvider 插件7 工具)
│ │ └── __init__.py # v1.1.0: 自动注入 + 社交关闭
│ └── obsidian/ # Obsidian 侧边栏插件
├── scripts/ # 运维脚本
│ ├── wiki_curator.py # P5 Wiki 策展管线
│ ├── three-way-check.sh # 三方交叉健康检查
│ ├── verify-p0p1p2.sh # P0/P1/P2 一键验证
│ └── daily-check.sh # 每日巡检
├── deploy/ # 部署配置
│ └── systemd/ # systemd service 文件
│ ├── zhiyid.service
│ ├── bge-embed.service
│ └── zhiyi-consolidate.service
├── cli-anything/ # CLI 命令行伴侣集成
├── carriers/ # 载体Obsidian / 飞书等)
├── proto/ # Protocol Buffers 定义
├── web-ui/ # Web 管理界面
├── docs/ # 设计文档 / 方案文档
├── tests/ # 集成测试
├── backups/ # 备份目录
├── skills/ # Hermes skills 定义
├── docker-compose.yml # Docker 编排
├── Makefile # 构建入口
├── DESIGN.md # 完整架构设计v3.8
├── INSTALL.md # systemd 详细安装步骤
├── BENCHMARK.md # 性能基准测试
└── VERSION # 版本文件
```
---
## 运维
### 进程管理
```bash
# 查看所有相关进程
ps aux | grep -E 'zhiyi|bge' | grep -v grep
# 查看端口
ss -tlnp | grep -E '7821|8000'
```
### systemd 操作
```bash
# 状态检查
systemctl --user status zhiyid
systemctl --user status bge-embed
systemctl --user status zhiyi-consolidate
# 日志
journalctl --user -u zhiyid -f
journalctl --user -u bge-embed -f
journalctl --user -u zhiyi-consolidate -f
# 重启
systemctl --user restart zhiyid
```
### 健康检查
```bash
# 一键三方交叉验证(进程 + 端口 + 端点)
bash scripts/three-way-check.sh
# 或手动
curl -s -H "X-API-Key: zhiyi-dev-key-2026" http://localhost:7821/api/v1/health
curl -s http://localhost:8000/health # bge-embed
```
### 日志位置
| 进程 | 日志 |
|------|------|
| zhiyid | `/tmp/zhiyid.log` / `journalctl --user -u zhiyid` |
| Rust sidecar | `/tmp/zhiyi-sidecar.log` / `journalctl --user -u zhiyi-consolidate` |
| bge-embed | `journalctl --user -u bge-embed` |
---
## 相关项目
- **Hermes Agent** 织忆的主要消费者通过 `memory.provider: zhiyi` 配置自动集成 7 个记忆工具
- **OpenClaw** 第二消费者通过 `openclaw-zhiyi-plugin/` 集成织忆记忆
- **Obsidian** 知识管理前端通过 `plugins/obsidian/` 侧边栏插件交互
- **cli-anything** 命令行伴侣将织忆 API 封装为 CLI 子命令
- **Memory-OS** 竞品对比参考7 层记忆架构)。详见 `docs/memory-os-7-layer-comparison.md`
---
## 文档
- [DESIGN.md](DESIGN.md) 完整架构设计 v3.8
- [INSTALL.md](INSTALL.md) systemd 详细安装步骤
- [Makefile](Makefile) 构建入口`make build` / `make build-rust` / `make build-cli`
- [docker-compose.yml](docker-compose.yml) Docker 编排
- [BENCHMARK.md](BENCHMARK.md) 性能基准
- [docs/](docs/) 方案文档与竞品分析