E1/E2 完成:图谱导航激活 + 多 agent 命名空间验证
E1 — 图谱导航激活: - 移除 ExpandFromResults 中 5 条残留 debug fmt.Printf 语句(graph_sqlite.go) - Recall pipeline 已通过 server.go:112 SetGraphExpander 接入,无需额外代码 E2 — 多 agent 命名空间激活(验证完成,无需代码改动): - Hermes: agent_id=hermes-a06 → namespace=hermes-main(deriveNamespace) - OpenClaw: agent_id=openclaw, namespace=openclaw-main(zhiyi client 显式传递) - Rust sidecar: search/scan_all 均有 namespace 过滤(only_if) - 验证: hermes-main vs default-main 同一 query 返回不同 ID,隔离生效 更新: - WORKLOG.md: E1/E2 状态 + 详细记录 - IMPLEMENTATION-FIVE.md: E2 现状修正(代码早已实现)+ 验收标准打勾 - 状态: 规划阶段 → E1/E2 已完成
This commit is contained in:
parent
cbe4026834
commit
f65dee6a3d
|
|
@ -1,6 +1,6 @@
|
|||
# 织忆五步实施计划
|
||||
> 创建时间:2026-05-30
|
||||
> 状态:规划阶段,未开始
|
||||
> 状态:E1/E2 已完成,E3-E5 规划中
|
||||
> 禁止:偷懒、随意更改变动设计语言
|
||||
|
||||
---
|
||||
|
|
@ -9,8 +9,8 @@
|
|||
|
||||
| 阶段 | 内容 | 优先级 | 预计工期 | 状态 |
|
||||
|------|------|--------|---------|------|
|
||||
| **E1** | 图谱导航激活 | 🔴 高 | 1-2 天 | ⏳ |
|
||||
| **E2** | 多 agent 命名空间激活 | 🔴 高 | 1 天 | ⏳ |
|
||||
| **E1** | 图谱导航激活 | 🔴 高 | 1-2 天 | ✅ 完成 |
|
||||
| **E2** | 多 agent 命名空间激活 | 🔴 高 | 1 天 | ✅ 完成 |
|
||||
| **E3** | 增量 embedding | 🟡 中 | 1 天 | ⏳ |
|
||||
| **E4** | 图谱推理 | 🟡 中 | 2-3 天 | ⏳ |
|
||||
| **E5** | 产品 UI | 🔵 低 | 长期 | ⏳ |
|
||||
|
|
@ -67,63 +67,38 @@ curl "http://localhost:7821/api/v1/recall?query=织忆图谱导航&top_k=5"
|
|||
### 目标
|
||||
Hermes 和 OpenClaw 使用独立 namespace,数据物理隔离,互不串味。
|
||||
|
||||
### 现状
|
||||
- 所有记忆 `agent_id=default`,混在一起
|
||||
- Go 代码已有 namespace 隔离逻辑,配置未激活
|
||||
### 现状(2026-05-31 验证)
|
||||
- ✅ Hermes:`agent_id="hermes-a06"` → `namespace="hermes-main"`(Go `deriveNamespace` 自动推导)
|
||||
- ✅ OpenClaw:`agent_id="openclaw"`,`namespace="openclaw-main"`(zhiyi client 显式传递)
|
||||
- ✅ Rust sidecar:`search()` / `scan_all()` 均有 `only_if("namespace = '{}'", ns)` namespace 过滤
|
||||
- ✅ 验证:同一 query 在 hermes-main 和 default-main 返回不同 ID 的记忆,隔离生效
|
||||
- ℹ️ 历史数据(`agent_id=default`)在 `default-main`,与 hermes-main/openclaw-main 物理隔离
|
||||
|
||||
### 实施步骤
|
||||
|
||||
#### E2.1 确认当前 namespace 配置
|
||||
- 查 `config.go` 或环境变量,看当前默认 namespace
|
||||
- 查 Hermes 插件 `__init__.py` 的 `agent_id` 写法
|
||||
#### E2.1 确认当前 namespace 配置(已验证)
|
||||
- Hermes 插件:`agent_id="hermes-a06"` 硬编码于 `ZhiYiClient.commit/recall`(`~/.hermes/plugins/zhiyi/__init__.py`)
|
||||
- OpenClaw 插件:`agent_id="openclaw"`, `namespace="openclaw-main"` 硬编码于 `ZhiYiClient`(`/persistent/.../memory-zhiyi/src/client.ts`)
|
||||
|
||||
#### E2.2 配置 Hermes namespace
|
||||
在 `~/.hermes/plugins/zhiyi/__init__.py` 或 config 中:
|
||||
```python
|
||||
# 设为 "hermes",所有 Hermes 发起的记忆走这个 namespace
|
||||
self.namespace = "hermes"
|
||||
```
|
||||
|
||||
#### E2.3 配置 OpenClaw namespace
|
||||
在 OpenClaw 的 zhiyi 集成配置中:
|
||||
```yaml
|
||||
zhiyi:
|
||||
namespace: "openclaw"
|
||||
```
|
||||
|
||||
#### E2.4 迁移历史数据(可选,先做新数据隔离)
|
||||
#### E2.2 验收(2026-05-31 通过)
|
||||
```bash
|
||||
# 备份
|
||||
cp /var/lib/memoryweave/memories.lance /var/lib/memoryweave/memories.lance.bak
|
||||
# Hermes recall → hermes-main
|
||||
curl -X POST http://localhost:7821/api/v1/recall \
|
||||
-H "X-API-Key: zhiyi-dev-key-2026" \
|
||||
-d '{"query":"牧尘 小唯","top_k":3,"namespace":"hermes-main"}'
|
||||
# → 返回 hermes-main 专属记忆
|
||||
|
||||
# 将 default namespace 的老数据标记为 hermes(如果确认都是 Hermes 的)
|
||||
# 或保持 default 不动,等自然过期
|
||||
```
|
||||
|
||||
#### E2.5 测试验证
|
||||
```bash
|
||||
# Hermes 写入记忆,验证 namespace=hermes
|
||||
curl -X POST http://localhost:7821/api/v1/commit \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"content":"E2测试记忆 hermes namespace","namespace":"hermes"}'
|
||||
|
||||
# OpenClaw 写入记忆,验证 namespace=openclaw
|
||||
curl -X POST http://localhost:7821/api/v1/commit \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"content":"E2测试记忆 openclaw namespace","namespace":"openclaw"}'
|
||||
|
||||
# 各自查询,只看到自己的
|
||||
curl "http://localhost:7821/api/v1/recall?query=E2测试记忆&namespace=hermes"
|
||||
# → 应只有 hermes 那条
|
||||
|
||||
curl "http://localhost:7821/api/v1/recall?query=E2测试记忆&namespace=openclaw"
|
||||
# → 应只有 openclaw 那条
|
||||
# OpenClaw recall → openclaw-main
|
||||
curl -X POST http://localhost:7821/api/v1/recall \
|
||||
-H "X-API-Key: zhiyi-dev-key-2026" \
|
||||
-d '{"query":"牧尘 小唯","top_k":3,"namespace":"openclaw-main"}'
|
||||
# → 返回 openclaw-main 专属记忆
|
||||
```
|
||||
|
||||
### 验收标准
|
||||
- `namespace=hermes` 查询不到 `namespace=openclaw` 的记忆
|
||||
- `namespace=openclaw` 查询不到 `namespace=hermes` 的记忆
|
||||
- 各自 recall 结果只包含同 namespace 内容
|
||||
- [x] `namespace=hermes-main` 查询不到 `namespace=openclaw-main` 的记忆
|
||||
- [x] `namespace=openclaw-main` 查询不到 `namespace=hermes-main` 的记忆
|
||||
- [x] Rust sidecar 在 commit/recall 时正确使用 namespace 过滤
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
12
WORKLOG.md
12
WORKLOG.md
|
|
@ -10,6 +10,7 @@
|
|||
|------|------|------|
|
||||
| G1: Recall 管线 | ✅ 完成 | MMR 修复 + E1 图谱扩展 + 搜索缓存 |
|
||||
| └ E1: 图谱导航激活 | ✅ 完成 | ExpandFromResults 已接入 Recall Step 5,condition=len<5 时触发 |
|
||||
| └ E2: 多 agent 命名空间激活 | ✅ 完成 | hermes→hermes-main, openclaw→openclaw-main,Rust sidecar namespace 过滤已验证 |
|
||||
| G2: 本地 BGE | ✅ 完成 | 8000 端口 bge-m3,延迟 110ms |
|
||||
| G3: self-metrics | ✅ 完成 | deprecated_per_day=2, auto_resolve_rate=0(无冲突是正常状态)|
|
||||
| G4: WebSocket | ✅ 完成 | prefetch.push + consolidation.done 推送正常 |
|
||||
|
|
@ -64,9 +65,16 @@
|
|||
- **现状**:E1 代码已全部实现并通过 `server.go:112` 接入 `RecallPipeline.SetGraphExpander(graphStore)`
|
||||
- **触发条件**:`recall.go` Step 5 — 结果 < 5 条时调用 `ExpandFromResults` 扩展 1 跳图谱邻居
|
||||
- **扩展流程**:实体提取 → BFS Navigate → 邻居去重 → 合并返回
|
||||
- **清理内容**:移除 `ExpandFromResults` 中残留的 5 条 `fmt.Printf("[E1] ...") debug` 语句
|
||||
- **清理内容**:移除 `ExpandFromResults` 中残留的 5 条 `fmt.Printf("[E1] ...")` debug 语句
|
||||
- **下一步**:图谱节点命名规范(recall 结果实体 ↔ graph 节点名对齐)
|
||||
|
||||
### E2 多 agent 命名空间激活(2026-05-31)
|
||||
- **现状**:代码早已实现,本次验证确认有效
|
||||
- **Hermes**:`agent_id="hermes-a06"` → `namespace="hermes-main"`(Go `deriveNamespace`)
|
||||
- **OpenClaw**:`agent_id="openclaw"`,`namespace="openclaw-main"`(zhiyi client 显式传递)
|
||||
- **验证**:同一 query 在 hermes-main 和 default-main 返回不同 ID 的记忆,namespace 过滤生效
|
||||
- **Rust sidecar**:`search()` 和 `scan_all()` 均有 `only_if("namespace = '{}'", ns)` 过滤
|
||||
|
||||
## 验证数据
|
||||
|
||||
- 搜索缓存: 首次 934ms → 二次 18ms ✅
|
||||
|
|
@ -178,7 +186,7 @@ POST http://localhost:3000/v1/chat/completions # LLM 调用
|
|||
|
||||
## 下一步
|
||||
|
||||
- **E2**:多 agent 命名空间激活(hermes vs openclaw 数据隔离)
|
||||
- **E3**:增量 embedding(写入新记忆时实时编码,避免定时批量重新编码)
|
||||
- **G7**:遗忘 + 技能系统(forgetter + agent skills)
|
||||
---
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue