mirror of
https://gitcode.com/JianFeeeee/TrulyMEM-TrueHumanMEM.git
synced 2026-09-20 17:08:18 +00:00
183 lines
4.8 KiB
Markdown
183 lines
4.8 KiB
Markdown
# 工作记忆链机制说明
|
||
|
||
## 概述
|
||
|
||
TrulyMEM 通过工作记忆链机制维持对话连贯性。由于系统没有传统的消息历史数组,图数据库是唯一的记忆载体,工作记忆链是维持对话上下文的关键机制。
|
||
|
||
## 核心问题
|
||
|
||
传统 AI 对话系统在处理连续性任务时存在以下问题:
|
||
|
||
1. **没有工作记忆链**: AI 无法记住当前正在进行的任务状态
|
||
2. **任务上下文丢失**: 当话题被打断后,AI 无法恢复之前的任务
|
||
3. **缺乏任务状态管理**: 没有明确标注任务的完成状态
|
||
|
||
### 问题示例
|
||
|
||
```
|
||
用户: 咱来玩成语接龙吧,我先开始,为所欲为
|
||
AI: 好的喵!我接:为虎作伥喵!
|
||
|
||
用户: 长门有希 (话题被打断)
|
||
AI: (讨论长门有希的内容)
|
||
|
||
用户: 关于刚才的成语接龙,我并不知道应该怎么接你的成语,请帮我接一下
|
||
AI: [猜测] 看起来我们之前应该没有进行过成语接龙游戏...
|
||
```
|
||
|
||
**问题**: AI 完全忘记了之前的成语接龙游戏。
|
||
|
||
## 解决方案
|
||
|
||
### 专用工具
|
||
|
||
系统提供 4 个专用任务工具:
|
||
|
||
| 工具 | 功能 | 使用场景 |
|
||
|------|------|----------|
|
||
| `task_create` | 创建任务节点 | 开始新任务 |
|
||
| `task_set_state` | 设置任务状态 | 更新进行中/已完成/已暂停/已取消 |
|
||
| `task_delete` | 删除任务 | 清理完成任务 |
|
||
| `task_link_info` | 关联信息节点 | 连接任务与具体信息 |
|
||
|
||
### 任务状态
|
||
|
||
- **进行中**: 任务正在执行
|
||
- **已完成**: 任务成功完成
|
||
- **已暂停**: 任务被中断,可恢复
|
||
- **已取消**: 任务被取消
|
||
|
||
## 使用流程
|
||
|
||
### 每轮对话必须执行
|
||
|
||
1. **查询人设图** (最高优先级)
|
||
```
|
||
调用 memory_recall
|
||
参数: {"query_intent": "AI,人设,角色,性格,语气,说话风格", "depth": 2}
|
||
```
|
||
|
||
2. **查询工作记忆链**
|
||
```
|
||
调用 memory_recall
|
||
参数: {"query_intent": "TaskNode,工作记忆,任务链", "depth": 2}
|
||
```
|
||
|
||
3. **根据上下文生成回复**
|
||
|
||
4. **更新工作记忆链** (如有必要)
|
||
|
||
## 完整示例: 成语接龙游戏
|
||
|
||
### 第一轮: 用户发起游戏
|
||
|
||
```
|
||
用户: 咱来玩成语接龙吧,我先开始,为所欲为
|
||
|
||
AI操作:
|
||
1. 查询人设图 → 获取当前人设(如:猫娘)
|
||
2. 查询工作记忆链 → 无进行中任务
|
||
3. 记录游戏状态:
|
||
调用 memory_commit
|
||
参数: {
|
||
"triplets": [
|
||
{"subject": "成语接龙_当前成语", "relation": "内容", "object": "为所欲为"},
|
||
{"subject": "成语接龙_当前成语", "relation": "游戏", "object": "成语接龙"}
|
||
]
|
||
}
|
||
4. 创建任务节点:
|
||
调用 task_create
|
||
参数: {
|
||
"task_id": "Task_成语接龙",
|
||
"description": "成语接龙游戏,当前成语:为所欲为",
|
||
"info_nodes": ["成语接龙_当前成语"]
|
||
}
|
||
5. 回复: "好的喵!我接:为虎作伥喵!"
|
||
```
|
||
|
||
### 第二轮: 话题被打断
|
||
|
||
```
|
||
用户: 长门有希
|
||
|
||
AI操作:
|
||
1. 查询人设图 → 获取当前人设(猫娘)
|
||
2. 查询工作记忆链 → 发现 Task_成语接龙 状态为"进行中"
|
||
3. 暂停任务:
|
||
调用 task_set_state
|
||
参数: {"task_id": "Task_成语接龙", "state": "已暂停"}
|
||
4. 创建新任务:
|
||
调用 task_create
|
||
参数: {"task_id": "Task_长门有希", "description": "讨论长门有希"}
|
||
5. 回复关于长门有希的内容
|
||
```
|
||
|
||
### 第三轮: 用户要求继续游戏
|
||
|
||
```
|
||
用户: 关于刚才的成语接龙,我并不知道应该怎么接你的成语,请帮我接一下
|
||
|
||
AI操作:
|
||
1. 查询人设图 → 获取当前人设(猫娘)
|
||
2. 查询工作记忆链 → 发现 Task_成语接龙 状态为"已暂停"
|
||
3. 恢复任务:
|
||
调用 task_set_state
|
||
参数: {"task_id": "Task_成语接龙", "state": "进行中"}
|
||
4. 查询信息节点 → 获取当前成语"为虎作伥"
|
||
5. 回复: "好的喵!上一个成语是'为虎作伥',我帮你接:伥鬼害人喵!"
|
||
```
|
||
|
||
## API 参考
|
||
|
||
### task_create
|
||
|
||
创建任务节点,用于跟踪连续性任务。
|
||
|
||
```json
|
||
{
|
||
"task_id": "Task_成语接龙",
|
||
"description": "任务概述",
|
||
"info_nodes": ["关联的信息节点名称"]
|
||
}
|
||
```
|
||
|
||
### task_set_state
|
||
|
||
设置任务状态。
|
||
|
||
```json
|
||
{
|
||
"task_id": "Task_成语接龙",
|
||
"state": "进行中" // 进行中/已完成/已暂停/已取消
|
||
}
|
||
```
|
||
|
||
### task_delete
|
||
|
||
删除任务节点。
|
||
|
||
```json
|
||
{
|
||
"task_id": "Task_成语接龙",
|
||
"delete_info_nodes": true // 是否删除关联的信息节点
|
||
}
|
||
```
|
||
|
||
### task_link_info
|
||
|
||
关联信息节点到任务。
|
||
|
||
```json
|
||
{
|
||
"task_id": "Task_成语接龙",
|
||
"info_node_names": ["成语接龙_当前成语", "成语接龙_上一个成语"]
|
||
}
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
1. **人设图优先级最高**: 每轮必须首先查询人设图
|
||
2. **工作记忆链是唯一上下文载体**: 没有传统消息历史
|
||
3. **任务状态必须及时更新**: 确保状态转换正确
|
||
4. **使用专用工具**: 优先使用 task_* 工具而非 memory_commit 处理任务相关操作
|