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