Files
TrulyMEM-TrueHumanMEM/docs/zh/working_memory.md
root 29d15707f5 docs: 重构为 docs/zh/ + docs/en/ 子文件夹结构
- 拆分为 docs/zh/(中文) 和 docs/en/(英文)
- README 索引对应语言子文件夹
- 保留所有文档内容
2026-04-14 13:25:53 +08:00

4.8 KiB
Raw Permalink Blame History

工作记忆链机制说明

概述

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

创建任务节点,用于跟踪连续性任务。

{
  "task_id": "Task_成语接龙",
  "description": "任务概述",
  "info_nodes": ["关联的信息节点名称"]
}

task_set_state

设置任务状态。

{
  "task_id": "Task_成语接龙",
  "state": "进行中"  // 进行中/已完成/已暂停/已取消
}

task_delete

删除任务节点。

{
  "task_id": "Task_成语接龙",
  "delete_info_nodes": true  // 是否删除关联的信息节点
}

关联信息节点到任务。

{
  "task_id": "Task_成语接龙",
  "info_node_names": ["成语接龙_当前成语", "成语接龙_上一个成语"]
}

注意事项

  1. 人设图优先级最高: 每轮必须首先查询人设图
  2. 工作记忆链是唯一上下文载体: 没有传统消息历史
  3. 任务状态必须及时更新: 确保状态转换正确
  4. 使用专用工具: 优先使用 task_* 工具而非 memory_commit 处理任务相关操作