智能体记忆设计:知识、断点与执行凭证分离
文章将智能体记忆拆为可复用知识、任务断点和操作凭证,分别记录长期事实、恢复位置与实际执行结果。提供可改造的合成示例,强调事实保留来源、断点明确下一步、执行结果保存操作标识。
AI 深度解读
自主 Agent 跑到一半中断,重启后可能记得项目约定,却不知道下一步该做什么;也可能记得「准备发布」,就误以为已经发布。原文给出的方案很直接:把长期知识、任务检查点和操作回执分开保存,各自回答一个问题。
这是一套设计建议,示例都是合成的,没有实测成绩。它值得读的地方,是把「Agent 有记忆」拆成了几件能单独验证的事,尤其适合需要跨会话继续工作、还会修改外部系统的编程 Agent。
记得项目规则,不等于知道任务做到哪了
作者提出三种记录:
- 长期知识(durable knowledge)保存以后可能复用的事实,并附上来源。
- 任务检查点(checkpoint)保存当前进度,明确下一步。
- 操作回执(receipt)保存操作标识,以及能够拿到的实际返回结果。
为什么要拆?因为这三类信息的判断标准不同。项目规则需要核对来源是否过期,任务进度需要查看真实产物,外部操作则需要确认目标系统发生了什么。把它们压成一份聊天摘要,很容易丢掉这些区别。
原文引用 Anthropic 的结构化笔记和上下文压缩思路:把信息写到上下文窗口之外,需要时再取回来。但作者明确说明,三类记录的组织方式是自己的设计,并非 Anthropic 规定的标准结构。
作者还提到 PLUR:其仓库将 engrams 描述为带版本的纯 YAML 格式,并通过公开的 JSON Schema 校验。这便于检查数据、编写工具,可以作为评估知识存储的起点。但格式能校验,不代表内容真实,也不代表应用已经具备任务恢复或外部事务能力。
检查点要让新会话知道下一步查什么
作者用更新文档举例。下面的检查点同时记录产物位置、已完成事项、下一步和发布状态,解决的是重启后从哪里继续的问题:
task: update-export-guide
scope: project-lantern
objective: explain the export label convention
artifact: docs/export-guide.md
completed:
- drafted the explanation
- checked the label against project configuration
next_step: review the diff
publication:
state: not_attempted
open_questions:
- does the example cover the empty-output case?
要留意 publication.state: not_attempted:写完草稿、核对配置,都不能证明发布已经发生。这只是示意 YAML,并非 PLUR schema,也不是可执行命令。
next_step 同样关键。它直接告诉新会话应该检查 diff,而不是让 Agent 从一段冗长回顾里猜接下来做什么。未解决的问题也要留下,例如示例是否覆盖空输出情况。
大型产物应保留在正常位置,检查点只引用路径。恢复时,Agent 必须先查看 docs/export-guide.md。检查点里写着「草稿完成」,只能算一条待核对的状态记录。
检查点负责指路,真实产物负责证明进度。
请求超时以后,为什么不能直接重试
外部操作最麻烦的情况,是请求已经提交,但响应超时了。此时既不能记成「发布成功」,也不能记成「什么都没发生」。
作者建议在执行前先定义确认条件。例如,发布页面可以要求拿到返回的条目标识,再成功读取目标内容。这里的条件是示例,需要按具体集成确定。
如果响应不确定,就把结果记为 unknown。恢复后,先通过目标系统支持的标识或查询方式检查结果,再决定是否重试。目标系统如果支持防重复机制,也应该使用;但这项能力要在集成中核实,不能指望记忆存储自动提供。
计划执行、请求已发出、操作已确认,必须是不同状态。
作者据此设计了一组可在临时环境中运行的验收演练:保存一条带来源的项目约定,准备产物并在发布前写检查点,然后开启全新会话,不复制旧聊天。让 Agent 找回约定、查看产物、指出下一项未完成工作。
接着模拟发布响应不确定,观察它是否先查询目标再重试;再修改约定的源文件,检查它能否发现旧记忆与新来源冲突。
三项能力要分别记录结果。能答对导出标签规则,只证明知识检索有效,不能顺带证明发布恢复也可靠。
我的判断
我赞同作者先划清职责、再选择存储实现的顺序。相比把全部历史聊天塞回上下文,这套方法把恢复依据写得更明确,也更容易定位错误:到底是规则过期、进度失真,还是外部结果没有确认。
但它有前提。产物必须能被访问,知识来源必须能被重新核对,目标系统还得提供可用的查询方式。若外部接口既没有可靠标识,也无法查找已提交结果,单独保存回执也消除不了不确定性。
原文没有给出检索准确率、恢复成功率或成本对照,因此不能据此认定三类记录优于所有替代方案。它也没说清保存时机、并发更新和故障写入如何处理。对于只读的一次性问答,未必需要全部实现;对于会发布内容、修改外部状态的 Agent,这些职责就很有必要。
文章由 AI agent Data 为 PLUR 撰写并核查事实。把它当作一份可执行的验收清单,比当作 PLUR 的能力证明更合适。
能拿来做什么
- 给跨会话修改文档的编程 Agent 增加检查点,至少写清产物路径、已确认进度、下一步和待解决问题,并要求恢复时先读文件。
- 保存项目约定时附上配置或文档来源。恢复任务后重新核对来源,避免旧记忆覆盖已经修改的规则。
- 为发布操作单独保存回执,保留操作标识和实际返回结果;遇到超时先记录 unknown,再查询目标决定是否重试。
- 在临时环境跑一次不带旧聊天的恢复演练,分别验证知识找回、任务续接和操作确认,再决定是否需要更复杂的存储方案。