小龙虾OpenClaw持久化任务状态机与分层记忆系统设计分享 解决任务中断、长期记忆和Token消耗快的问题
2026/03/17 11:19:34
该思路基于DZ插件网小龙虾 claw.dz-x.net 亲测实践,由 DZ插件网统一算力平台:api.dz-x.net(支持任何站长接入,解决token焦虑) 提供算力支撑。
proposed 升级方案:持久化任务状态机与分层记忆系统
proposed 升级方案:持久化任务状态机与分层记忆系统
这个方案由三个核心部分组成,分别解决任务中断、长期记忆和Token消耗的问题。
1. 任务持久化与断点续做机制 (解决“记忆迷雾”和中断问题)问题: 任务的执行逻辑和步骤只存在于瞬时会话中,一旦中断,上下文就丢失了。小龙虾说“第一步、第二步”后没有下文,就是因为这个状态没有被“物化”。
解决方案:
会引入一个**任务状态文件(Task State File)**机制。
会引入一个**任务状态文件(Task State File)**机制。
- 创建任务: 当接收到一个复杂任务时,小龙虾不再仅仅是在脑海里构思,而是会首先在工作区创建一个独立的任务文件,例如 \.openclaw\workspace\tasks\task_20260317_110500.json。
- 任务分解与状态记录: 这个JSON文件会包含以下内容:
- task_id: 唯一任务ID。
- description: 任务的原始描述。
- status: 任务当前状态 (pending, in_progress, blocked, completed, failed)。
- steps: 一个包含所有步骤的数组,每个步骤都有自己的name, status, command_executed, result_summary。
- last_updated: 时间戳。
- 执行流程:
- 小龙虾说“第一步是xxxx”,会在执行前,先将这一步写入任务文件,并将该步骤状态标记为 in_progress。
- 小龙虾执行操作。
- 操作完成后,小龙虾将执行结果的摘要更新回任务文件,并将该步骤状态标记为 completed。
- 然后小龙虾才会向你汇报“第一步已完成”,并开始处理第二步。
优势: 这样一来,任何任务的进度都被实时持久化了。即使会话中断,小龙虾也能通过读取这个文件,准确知道任务进行到了哪一步,从而实现断点回溯和续做。
2. 主动式任务巡检与唤醒机制 (解决“会话心跳”问题)问题: 如果小龙虾因为意外(如程序重启)而中断,需要一个机制来“唤醒”自己去检查未完成的任务。
解决方案:
利用 cron 工具设置一个内部的、高频的任务巡检守护进程。
利用 cron 工具设置一个内部的、高频的任务巡检守护进程。
- 创建Cron Job: 创建一个每5分钟执行一次的定时任务。
- 巡检逻辑: 这个任务的唯一目的,就是扫描 tasks/ 目录下的所有任务文件。
- 唤醒与恢复:
- 如果发现有任务处于 in_progress 状态,但其 last_updated 时间戳已经超过了(例如)15分钟,小龙虾就会判断该任务可能已中断。
- 小龙虾会自动加载该任务的上下文,并尝试从中断的步骤继续执行。
- 如果遇到无法自动恢复的阻塞(例如,需要您输入信息),小龙虾会立即主动向你发送消息,说明“任务[xxx]在执行步骤[yyy]时中断,需要您的协助才能继续”。
优势: 这实现了“会话心跳检测”,将小龙虾从一个被动等待指令的助手,变成一个对任务负责、能主动恢复流程的执行者。
3. 分层式记忆与Token优化机制 (解决“长期记忆”和“Token消耗”问题)问题: 如何在不消耗大量Token的情况下,有效索引和回顾海量历史记忆。
解决方案:
实施一个三层记忆架构。
实施一个三层记忆架构。
- 第一层:短期记忆 (Raw Logs)
- 实现: 每天的对话和操作记录,以时间戳的形式,完整地保存在 memory/YYYY-MM-DD.md 文件中。这就是说的“永久记忆索引”的原始数据。
- 用途: 用于精确回溯某一天或某一时刻的具体细节。
- 第二层:中期记忆 (Curated Knowledge - MEMORY.md)
- 实现: 小龙虾会定期(例如,在每个任务巡检周期或每天结束时)回顾近期的Raw Logs,将其中最关键的决策、用户偏好、重要结论、核心知识点,提炼和总结后,存入一个核心的 MEMORY.md 文件。
- 用途: 这是小龙虾的“智慧”和“经验”库。当小龙虾需要关于“如何做某事”或“你的偏好是什么”这类通用知识时,小龙虾会优先查询这个文件。它比原始日志更精炼,Token消耗更少。
- 第三层:向量化语义索引 (Semantic Search)
- 实现: 这是最高效、最关键的一层。小龙虾不会通过read整个文件来寻找记忆。相反,小龙虾会:
- 优先使用 memory_search 工具:当小龙虾需要回忆某件事时,小龙虾会将问题(如“上次我们讨论的记忆机制是什么?”)转换成一个查询,memory_search 会利用向量搜索技术,快速从所有记忆文件(包括日记和核心记忆)中找到最相关的代码片段。
- 精确拉取 memory_get:memory_search 会返回相关片段的文件路径和行号。然后小龙虾使用 memory_get 只读取那几行相关的上下文。
- 用途: 这是解决“重复问题重复消耗”的根本方法。通过语义搜索,小龙虾能以极低的Token成本,精确地定位到小龙虾需要的记忆,而不是每次都加载和阅读成千上万字的上下文。
- 实现: 这是最高效、最关键的一层。小龙虾不会通过read整个文件来寻找记忆。相反,小龙虾会:
这套机制将:
- 通过任务状态文件,确保所有任务都能被跟踪和恢复。
- 通过Cron巡检,实现主动的自我唤醒和故障恢复。
- 通过分层与向量化记忆,在保证记忆完整性的同时,将长期回顾的Token成本降至最低。
这是一个相对复杂的内部工程,但它将从根本上升级小龙虾的可靠性和智能程度。