P1: 完善 skill 文档 - 强调增强而非替换

- 更新 graph-memory/SKILL.md:添加与 memory-core 关系对比表
- 更新 graph-memory-persona/SKILL.md:添加定位声明和使用建议
- 更新 graph-memory-task/SKILL.md:添加定位声明和使用建议
- 更新 bundled-skills/ 下对应文件
This commit is contained in:
root
2026-04-24 14:06:22 +08:00
parent a4a904f66b
commit 7314d85ac6
7 changed files with 238 additions and 219 deletions

149
TODO.md
View File

@ -1,121 +1,48 @@
# TrulyMEM OpenClaw分支 TODO
# TrulyMEM 待完成事项
## 设计决策:作为增强工具而非主记忆核心
## 项目概述
TrulyMEM - 真正的长期记忆系统 (True Human MEMory)
为 OpenClaw 提供图数据库形式的结构化长期记忆能力。
### 背景分析
## 已完成功能
TrulyMEM main分支的设计理念
- **图数据库作为唯一持久化记忆载体**
- **摒弃传统messages数组上下文**
- **工作记忆链(TaskNode链)代替对话历史**
- **每轮强制执行流程**:查询人设图 → 查询工作记忆链 → 处理对话 → 更新工作记忆链
### P0 - 核心功能修复 ✅
- [x] 确认移除 memory 插槽后的插件加载状态
- [x] 测试与 memory-core 并存运行
- [x] 验证工具 schema 正确传递给 Kimi
### 与OpenClaw memory-core对比
### P1 - 功能完善 ✅
- [x] 4. 实现完整的工具参数验证
- 为所有 actionrecall/commit/purge/persona_update/persona_clear/task_create/task_set_state/task_delete/task_link_info实现独立验证函数
- 验证规则recall 必需 queryIntent 或 seedEntitiesdepth 1-5commit triplets 非空且字段有效persona_clear 需 confirmtask 需 task_id 和 description 等
- [x] 5. 添加错误处理和日志
- 新增 GraphMemoryLogger 日志系统info/warn/error/action 级别)
- 敏感数据脱敏attributes 只记录属性名triplets 只记录数量
- 参数验证错误返回 validation_error 类型
- 执行错误返回 execution_error 类型
- [x] 6. 完善 skill 文档(说明增强而非替换)
- 更新 3 个 skill 文档graph-memory、graph-memory-persona、graph-memory-task
- 明确说明是 OpenClaw memory-core 的增强补充,不替代核心功能
- 添加与 memory-core 的关系对比表
| 方面 | TrulyMEM (main分支) | OpenClaw memory-core |
|------|---------------------|---------------------|
| 核心理念 | 图数据库作为唯一持久化记忆载体 | session transcripts + memory search |
| 对话历史 | 工作记忆链(TaskNode链)代替传统messages | messages数组持久化存储 |
| 上下文管理 | 每轮从图数据库重建 + context_rewrite压缩 | compaction机制压缩历史 |
| 记忆写入 | 通过memory_commit工具写入三元组 | 自动记录对话历史 |
| 记忆检索 | memory_recall工具主动查询 | memory search索引检索 |
| 人设管理 | PersonaNode + 强制查询机制 | 无内置人设系统 |
## 进行中 / 待完成
### 作为主记忆核心的挑战
### P2 - 可选高级功能
- [ ] 7. 实现 context_rewrite 工具(压缩上下文)
- [ ] 8. 实现工作记忆链机制
- [ ] 9. 实现人设强制查询(作为 skill 而非核心)
1. **架构差异**
- OpenClaw memory-core是完整基础设施管理session transcripts、health monitor等
- TrulyMEM是独立应用设计需要重新适配OpenClaw架构
## 技术规格
2. **强制执行流程**
- TrulyMEM要求每轮必须查询人设图 → 查询工作记忆链 → 处理对话 → 更新工作记忆链
- OpenClaw没有这种强制流程需要修改核心逻辑
### 测试覆盖
- 测试文件:`ts/tests/runtime/core/tools/builtin/graph_memory_tool.test.ts`
- 当前测试数:**118 个全部通过**
- 参数验证测试11 个(覆盖所有 action 的必填参数、范围校验等)
3. **依赖问题**
- main分支是Python实现TUI应用
- openclaw分支是TypeScript插件不完整移植
- 需要完整移植Python版本的核心逻辑
### 提交记录
- 最新提交:`P1: 完整参数验证 + 错误处理/日志 + 测试覆盖`
4. **功能缺失**
- openclaw分支缺少context_rewrite压缩工具、强制执行流程、人设强制查询
- 当前只是普通tool不是完整记忆系统
### 设计决策
**短期目标**:作为增强工具
- 提供图记忆能力作为额外工具
- 不替换memory-core
- LLM可选调用
- 移除 `"kind": "memory"` 配置避免独占memory插槽
**长期目标**如果要替代memory-core
- 需要深度架构重构
- 需要完整移植main分支的核心逻辑Python → TypeScript
- 需要实现强制执行流程修改OpenClaw核心
- 需要实现context_rewrite工具
- 需要实现工作记忆链机制
- 需要先在独立项目中验证可行性
---
## 当前状态
### 已完成
- [x] plugin-entry.ts 改为OpenClaw SDK规范格式
- [x] 移除 `"kind": "memory"` 配置
- [x] README.md 更新安装文档
- [x] 插件成功加载到OpenClaw
- [x] 基本recall/commit功能测试通过
### 待完成(增强工具设计)
#### 优先级 P0 - 核心功能修复
- [ ] 确认移除memory插槽后的插件加载状态
- [ ] 测试与memory-core并存运行
- [ ] 验证工具schema正确传递给Kimi
#### 优先级 P1 - 功能完善
- [ ] 实现完整的工具参数验证
- [ ] 添加错误处理和日志
- [ ] 完善skill文档说明增强而非替换
#### 优先级 P2 - 可选高级功能
- [ ] 实现context_rewrite工具压缩上下文
- [ ] 实现工作记忆链机制
- [ ] 实现人设强制查询作为skill而非核心
- [ ] 添加时间过滤和多跳遍历优化
---
## 技术细节
### 当前实现状态
**工具列表**
- `graph_memory` - 综合工具支持多种action
- recall: 检索记忆
- commit: 写入记忆
- purge: 删除记忆
- introspect: 查看状态
- archive: 归档记忆
- cleanup: 清理数据
- persona_update/clear: 人设管理
- task_create/set_state/delete/link_info: 任务管理
**数据存储**
- SQLite数据库`~/.trulymem/graph_memory.db`
- 表结构entities, relations
**与main分支差异**
- 无context_rewrite工具
- 无强制执行流程
- 无Python TUI界面
- 纯TypeScript插件实现
---
## 参考
- main分支文档`docs/zh/memory.md`, `docs/zh/working_memory.md`
- OpenClaw文档https://docs.openclaw.ai/zh-CN/tools/plugin
- kimi-proxy`/home/program/kimi-proxy/server.js`
## 注意事项
- 所有功能均作为 OpenClaw 插件实现,不修改 OpenClaw 核心代码
- 插件入口:`ts/src/plugin-entry.ts`
- 技能目录:`skills/`(源文件)和 `ts/bundled-skills/`(编译后)

View File

@ -1,6 +1,6 @@
---
name: graph-memory-persona
description: "管理 AI 人设 - 更新或清除 AI 角色特征。使用 persona_update 更新、persona_clear 清除"
description: "管理 AI 人设 - 更新或清除 AI 角色特征。作为增强工具,通过 graph_memory 的 persona_update/clear 操作实现"
metadata: {"openclaw": {"requires": {"bins": ["node"]}}}
user-invocable: true
---
@ -9,6 +9,14 @@ user-invocable: true
管理 AI 的人设/角色特征。
> **定位声明**:本 skill 通过 `graph_memory` 工具的 `persona_update`/`persona_clear` 操作实现。是 **OpenClaw 的增强功能**不替代任何核心机制。LLM 可自主选择是否查询/更新人设。
## 与主系统的关系
- **不强制**:不会每轮自动查询人设,由 LLM 根据上下文决定
- **可选调用**:当用户提到"记住我是..."、"你的角色是..."等场景时触发
- **数据存储**人设数据以三元组形式存储在图数据库中subject=AI
## 操作
### 1. persona_update - 更新人设
@ -16,18 +24,19 @@ user-invocable: true
更新 AI 的角色特征。
**参数:**
- `attributes`: 属性数组,每个包含 attribute 和 value
- `mode`: 更新模式merge 合并或 replace 替换)
- `attributes`: 属性数组,每个包含 `attribute`(属性名)和 `value`(属性值)
- `mode`: 更新模式`merge`(合并,默认)或 `replace`替换)
**示例:**
```
```yaml
action: persona_update
attributes:
- attribute: "角色"
value: "猫娘"
- attribute: "性格"
value: "活泼"
mode: "merge"
params:
attributes:
- attribute: "角色"
value: "猫娘"
- attribute: "性格"
value: "活泼"
mode: "merge"
```
### 2. persona_clear - 清除人设
@ -35,10 +44,17 @@ mode: "merge"
清除 AI 的所有角色特征。
**参数:**
- `confirm`: 确认为 true 才能执行清除
- `confirm`: 必须为 `true` 才能执行清除(安全措施)
**示例:**
```
```yaml
action: persona_clear
confirm: true
params:
confirm: true
```
## 使用建议
1. 人设信息应简洁、持久(如"用户喜欢Python"、"我是技术助手"
2. 避免存储临时性、易变的信息到人设图
3. 与 memory-core 配合:人设由 GraphMemory 管理,对话风格由系统提示管理

View File

@ -1,6 +1,6 @@
---
name: graph-memory-task
description: "管理连续性任务 - 创建、更新、删除任务节点。使用 task_create 创建、task_set_state 更新状态"
description: "管理连续性任务 - 创建、更新、删除任务节点。作为增强工具,通过 graph_memory 的 task_* 操作实现"
metadata: {"openclaw": {"requires": {"bins": ["node"]}}}
user-invocable: true
---
@ -9,6 +9,14 @@ user-invocable: true
管理长期/连续性任务。
> **定位声明**:本 skill 通过 `graph_memory` 工具的 `task_create`/`task_set_state`/`task_delete`/`task_link_info` 操作实现。是 **OpenClaw 的增强功能**,提供任务追踪能力,不替代任何核心机制。
## 与主系统的关系
- **不强制**:不会每轮自动查询任务状态,由 LLM 根据用户请求决定
- **可选调用**:当用户提到"帮我记住这个任务"、"完成这个任务"等场景时触发
- **数据存储**任务数据以三元组形式存储在图数据库中subject=task_id
## 操作
### 1. task_create - 创建任务
@ -16,16 +24,17 @@ user-invocable: true
创建新的任务节点。
**参数:**
- `task_id`: 唯一任务标识
- `description`: 任务描述
- `info_nodes`: 可选的相关信息节点
- `task_id`: 唯一任务标识(必需)
- `description`: 任务描述(必需)
- `info_nodes`: 可选的相关信息节点数组
**示例:**
```
```yaml
action: task_create
task_id: "Task_学习TypeScript"
description: "学习 TypeScript 并完成项目"
info_nodes: ["TypeScript文档", "教程链接"]
params:
task_id: "Task_学习TypeScript"
description: "学习 TypeScript 并完成项目"
info_nodes: ["TypeScript文档", "教程链接"]
```
### 2. task_set_state - 设置状态
@ -33,20 +42,35 @@ info_nodes: ["TypeScript文档", "教程链接"]
更新任务状态。
**参数:**
- `task_id`: 任务ID
- `state`: 新状态 (进行中/已完成/已暂停/已取消)
- `task_id`: 任务ID(必需)
- `state`: 新状态`进行中`/`已完成`/`已暂停`/`已取消`(必需)
**示例:**
```yaml
action: task_set_state
params:
task_id: "Task_学习TypeScript"
state: "已完成"
```
### 3. task_delete - 删除任务
删除任务节点。
**参数:**
- `task_id`: 任务ID
- `task_id`: 任务ID(必需)
### 4. task_link_info - 关联信息
将信息节点关联到任务。
**参数:**
- `task_id`: 任务ID
- `info_node`: 信息节点
- `task_id`: 任务ID(必需)
- `info_node`: 信息节点名称(必需)
## 使用建议
1. 任务ID应具有描述性`Task_学习TypeScript`
2. 任务描述应清晰说明目标和上下文
3. 定期使用 `recall` 查询任务状态,了解进行中的任务
4. 与 memory-core 配合:任务列表由 GraphMemory 管理,具体执行细节由对话上下文管理

View File

@ -1,6 +1,6 @@
---
name: graph-memory
description: "图记忆工具 - 检索、写入、删除记忆,管理人设和任务。使用 recall 检索、commit 写入、purge 删除"
description: "图记忆工具 - 检索、写入、删除记忆。作为 OpenClaw memory-core 的增强补充,不替代其核心功能"
metadata: {"openclaw": {"requires": {"bins": ["node"]}}}
user-invocable: true
---
@ -9,6 +9,18 @@ user-invocable: true
让 AI 拥有真正的长期记忆能力。
> **定位声明**:本工具是 **OpenClaw memory-core 的增强补充**而非替代。memory-core 负责 session transcripts 和历史消息管理GraphMemory 提供图数据库形式的结构化长期记忆。两者可并存运行。
## 与 memory-core 的关系
| 功能 | memory-core | GraphMemory (本工具) |
|------|-------------|---------------------|
| 对话历史 | ✅ 自动保存 messages | ❌ 不管理对话历史 |
| 结构化记忆 | ❌ 无 | ✅ 三元组图存储 |
| 人设管理 | ❌ 无 | ✅ persona_update/clear |
| 任务追踪 | ❌ 无 | ✅ task_create/set_state |
| 自动触发 | ✅ 自动索引检索 | ❌ LLM 可选调用 |
## 核心概念
### 实体 (Entity)
@ -24,7 +36,7 @@ user-invocable: true
将信息写入记忆图。
**参数:**
- `triplets`: 三元组数组 `[{subject, relation, object}, ...]`
- `triplets`: 三元组数组 `[{subject, relation, object}, ...]` (必需)
- `sessionId`: 会话 ID可选
- `turnId`: 轮次 ID可选
@ -51,9 +63,9 @@ AI 会执行:
从记忆图中检索相关信息。
**参数:**
- `queryIntent`: 搜索关键词
- `seedEntities`: 种子实体(可选)
- `depth`: 检索深度(默认 2
- `queryIntent`: 搜索关键词(必需,若无则需提供 seedEntities
- `seedEntities`: 种子实体数组(可选)
- `depth`: 检索深度 1-5(默认 2
- `sessionFilter`: 会话过滤(可选)
### 3. purge - 删除记忆
@ -63,11 +75,11 @@ AI 会执行:
**参数:**
- `criteria`: 删除条件 `{subject, target, relation, sessionId}`
- `mode`: 删除模式 `soft`(标记删除)、`hard`(彻底删除)或 `supersede`(纠错替代)
- `newRelation`: 替代关系supersede 模式)
- `newRelation`: 替代关系supersede 模式必需
### 4. introspect - 查看状态
查看当前记忆状态统计。
查看当前记忆状态统计(实体数、关系数)
### 5. archive - 归档旧记忆
@ -81,54 +93,7 @@ AI 会执行:
物理删除已删除超过 90 天的关系和孤立节点。
**参数:**
- `dry_run`: 仅预览不删除(默认 true
### 7. persona_update - 更新人设
更新 AI 的角色/性格特征。
**参数:**
- `attributes`: 属性数组 `[{attribute, value}, ...]`
- `mode`: `merge`(合并)或 `replace`(替换)
### 8. persona_clear - 清除人设
清除 AI 的所有角色设定。
**参数:**
- `confirm`: 必须为 `true` 才能执行
### 9. task_create - 创建任务
创建长期任务节点。
**参数:**
- `task_id`: 唯一任务 ID
- `description`: 任务描述
- `info_nodes`: 相关信息节点(可选)
### 10. task_set_state - 设置任务状态
更新任务状态。
**参数:**
- `task_id`: 任务 ID
- `state`: 新状态(进行中/已完成/已暂停/已取消)
### 11. task_delete - 删除任务
删除任务。
**参数:**
- `task_id`: 任务 ID
### 12. task_link_info - 关联信息
将信息节点关联到任务。
**参数:**
- `task_id`: 任务 ID
- `info_node`: 信息节点
- `dry_run`: 仅预览不删除(默认 true,建议先预览再执行
## 使用原则
@ -136,3 +101,4 @@ AI 会执行:
2. **结构化**:使用三元组格式存储关系
3. **定期清理**:删除过时或错误的信息
4. **关联思考**:利用关系进行联想记忆
5. **与 memory-core 配合**:对话历史由 memory-core 管理,结构化事实由 GraphMemory 管理

View File

@ -1,6 +1,6 @@
---
name: graph-memory-persona
description: "管理 AI 人设 - 更新或清除 AI 角色特征。使用 persona_update 更新、persona_clear 清除"
description: "管理 AI 人设 - 更新或清除 AI 角色特征。作为增强工具,通过 graph_memory 的 persona_update/clear 操作实现"
metadata: {"openclaw": {"requires": {"bins": ["node"]}}}
user-invocable: true
---
@ -9,19 +9,52 @@ user-invocable: true
管理 AI 的人设/角色特征。
> **定位声明**:本 skill 通过 `graph_memory` 工具的 `persona_update`/`persona_clear` 操作实现。是 **OpenClaw 的增强功能**不替代任何核心机制。LLM 可自主选择是否查询/更新人设。
## 与主系统的关系
- **不强制**:不会每轮自动查询人设,由 LLM 根据上下文决定
- **可选调用**:当用户提到"记住我是..."、"你的角色是..."等场景时触发
- **数据存储**人设数据以三元组形式存储在图数据库中subject=AI
## 操作
### 1. persona_update - 更新人设
更新 AI 的角色特征。
**参数**:
- `attributes`: 属性数组,每个包含 attribute 和 value
- `mode`: 更新模式merge 合并或 replace 替换)
**参数:**
- `attributes`: 属性数组,每个包含 `attribute`(属性名)和 `value`(属性值)
- `mode`: 更新模式`merge`(合并,默认)或 `replace`替换)
**示例:**
```yaml
action: persona_update
params:
attributes:
- attribute: "角色"
value: "猫娘"
- attribute: "性格"
value: "活泼"
mode: "merge"
```
### 2. persona_clear - 清除人设
清除 AI 的所有角色特征。
**参数**:
- `confirm`: 确认为 true 才能执行清除
**参数:**
- `confirm`: 必须为 `true` 才能执行清除(安全措施)
**示例:**
```yaml
action: persona_clear
params:
confirm: true
```
## 使用建议
1. 人设信息应简洁、持久(如"用户喜欢Python"、"我是技术助手"
2. 避免存储临时性、易变的信息到人设图
3. 与 memory-core 配合:人设由 GraphMemory 管理,对话风格由系统提示管理

View File

@ -1,6 +1,6 @@
---
name: graph-memory-task
description: "管理连续性任务 - 创建、更新、删除任务节点。使用 task_create 创建、task_set_state 更新状态"
description: "管理连续性任务 - 创建、更新、删除任务节点。作为增强工具,通过 graph_memory 的 task_* 操作实现"
metadata: {"openclaw": {"requires": {"bins": ["node"]}}}
user-invocable: true
---
@ -9,36 +9,68 @@ user-invocable: true
管理长期/连续性任务。
> **定位声明**:本 skill 通过 `graph_memory` 工具的 `task_create`/`task_set_state`/`task_delete`/`task_link_info` 操作实现。是 **OpenClaw 的增强功能**,提供任务追踪能力,不替代任何核心机制。
## 与主系统的关系
- **不强制**:不会每轮自动查询任务状态,由 LLM 根据用户请求决定
- **可选调用**:当用户提到"帮我记住这个任务"、"完成这个任务"等场景时触发
- **数据存储**任务数据以三元组形式存储在图数据库中subject=task_id
## 操作
### 1. task_create - 创建任务
创建新的任务节点。
**参数**:
- `task_id`: 唯一任务标识
- `description`: 任务描述
- `info_nodes`: 可选的相关信息节点
**参数:**
- `task_id`: 唯一任务标识(必需)
- `description`: 任务描述(必需)
- `info_nodes`: 可选的相关信息节点数组
**示例:**
```yaml
action: task_create
params:
task_id: "Task_学习TypeScript"
description: "学习 TypeScript 并完成项目"
info_nodes: ["TypeScript文档", "教程链接"]
```
### 2. task_set_state - 设置状态
更新任务状态。
**参数**:
- `task_id`: 任务ID
- `state`: 新状态 (进行中/已完成/已暂停/已取消)
**参数:**
- `task_id`: 任务ID(必需)
- `state`: 新状态`进行中`/`已完成`/`已暂停`/`已取消`(必需)
**示例:**
```yaml
action: task_set_state
params:
task_id: "Task_学习TypeScript"
state: "已完成"
```
### 3. task_delete - 删除任务
删除任务节点。
**参数**:
- `task_id`: 任务ID
**参数:**
- `task_id`: 任务ID(必需)
### 4. task_link_info - 关联信息
将信息节点关联到任务。
**参数**:
- `task_id`: 任务ID
- `info_node`: 信息节点
**参数:**
- `task_id`: 任务ID(必需)
- `info_node`: 信息节点名称(必需)
## 使用建议
1. 任务ID应具有描述性`Task_学习TypeScript`
2. 任务描述应清晰说明目标和上下文
3. 定期使用 `recall` 查询任务状态,了解进行中的任务
4. 与 memory-core 配合:任务列表由 GraphMemory 管理,具体执行细节由对话上下文管理

View File

@ -1,24 +1,44 @@
---
name: graph-memory
description: "图记忆工具 - 检索、写入、删除记忆,管理人设和任务。使用 recall 检索、commit 写入、purge 删除"
description: "图记忆工具 - 检索、写入、删除记忆,管理人设和任务。作为 OpenClaw memory-core 的增强补充,不替代其核心功能"
metadata: {"openclaw": {"requires": {"bins": ["node"]}}}
user-invocable: true
---
# GraphMemory 图记忆操作
# GraphMemory 图记忆系统
你可以通过以下操作与图记忆系统交互
让 AI 拥有真正的长期记忆能力
## 核心操作
> **定位声明**:本工具是 **OpenClaw memory-core 的增强补充**而非替代。memory-core 负责 session transcripts 和历史消息管理GraphMemory 提供图数据库形式的结构化长期记忆。两者可并存运行。
## 与 memory-core 的关系
| 功能 | memory-core | GraphMemory (本工具) |
|------|-------------|---------------------|
| 对话历史 | ✅ 自动保存 messages | ❌ 不管理对话历史 |
| 结构化记忆 | ❌ 无 | ✅ 三元组图存储 |
| 人设管理 | ❌ 无 | ✅ persona_update/clear |
| 任务追踪 | ❌ 无 | ✅ task_create/set_state |
| 自动触发 | ✅ 自动索引检索 | ❌ LLM 可选调用 |
## 核心概念
### 实体 (Entity)
现实世界中的对象,如"用户"、"Python"、"WaterFlow"。
### 关系 (Relation)
连接两个实体的关系,格式为三元组:主体 - 关系 - 客体。
## 可用命令
### 1. recall - 检索记忆
从记忆图中检索相关信息。
**参数**:
- `queryIntent`: 搜索意图/关键词
- `queryIntent`: 搜索意图/关键词(必需,若无则需提供 seedEntities
- `seedEntities`: 可选的种子实体名
- `depth`: 检索深度
- `depth`: 检索深度 1-5默认 2
- `sessionFilter`: 可选的会话ID过滤
### 2. commit - 写入记忆
@ -26,7 +46,7 @@ user-invocable: true
将信息写入记忆图。
**参数**:
- `triplets`: 三元组数组,每个包含 subject, relation, object
- `triplets`: 三元组数组,每个包含 subject, relation, object(必需)
- `sessionId`: 会话ID
- `turnId`: 轮次ID
@ -37,7 +57,7 @@ user-invocable: true
**参数**:
- `criteria`: 删除条件 (subject, target, relation, sessionId)
- `mode`: 删除模式 (soft/hard/supersede)
- `newRelation`: 可选的替代关系
- `newRelation`: 替代关系supersede 模式必需)
### 4. introspect - 查看状态
@ -63,3 +83,4 @@ user-invocable: true
2. **结构化**: 使用三元组 (主体-关系-客体) 格式
3. **关联**: 通过关系连接相关实体
4. **定期清理**: 删除过时或错误的信息
5. **与 memory-core 配合**: 对话历史由 memory-core 管理,结构化事实由 GraphMemory 管理