文章指出共享状态即使格式正确,也可能因人工改向、智能体异常退出或未写回而失效,因此仅约束写入端并不可靠。作者尝试在读取时附带更新时间和后续写入次数,以帮助智能体判断状态是否仍可信。
关于 Agent 记忆的大多数文章,都在讨论如何把信息存进去——该存什么、如何分块、选择哪种 embedding model。我想问问另一端的问题,因为我们恰恰在那里出了岔子。

当 Agent 读取一段共享状态时,它怎么知道这段状态现在仍然为真?
我们维护了一个任务画布,Agent 会在每次 session 开始时读取它,并在工作过程中持续更新。画布中包含计划、当前步骤、已经完成的事项,以及接下来要做什么。下一个 Agent 会从上一个 Agent 停下来的地方继续。当这套机制正常运转时,感觉就像魔法一样。
但有一种失败模式,是我设计时没有考虑到的。某个 Agent 打开了一份最后更新于六天前的画布。上面写着:当前步骤:API integration。这在写入时确实是真的。但此后,人类改变了方向,另一个 Agent 做了一些不相关的工作,而 API integration 已经被放弃了。
Agent 读到这段状态后,信心十足地继续执行。没有任何数据损坏,也没有抛出任何错误。只是状态已经过时,而一次过时读取,在字节层面和一次最新读取完全相同。
我的第一反应是修复写入端:要求 Agent 在停止工作前更新状态。但这行不通,而且我认为原因具有普遍性。这类失败源自某种“缺失”。如果 Agent 没有写入就退出了——可能是因为崩溃、触发配额限制,或者只是认为工作已经完成——那就不会留下任何可供拦截的东西。你无法验证一次从未发生的写入。
所以,我们把检查移到了读取端。每次读取都会附带它自身的时效信息:
[canvas: last updated 6 days ago, 40 memory writes since. Treat completed/next as unverified.]
这确实有所帮助。Agent 会变得谨慎,而不是不加判断地继续向前冲。但这只是一种提醒,并不是保证——我只是在给一个概率系统贴上警告标签,然后寄希望于它真的会看。
我一直以为,这应该是某个领域里早已解决的问题,只是我还没有找到描述它的正确术语。下面是几个我特别想了解其他人如何处理的问题:
时间间隔真的是正确的信号吗? 一段六天前写入、此后无人触碰的状态,对于进展缓慢的项目来说可能完全有效。可一段六分钟前写入的状态,如果期间已经有三个 Agent 做过写入,也可能毫无价值。我使用“此后发生的写入次数”作为状态漂移的代理指标,但它也会把不相关的写入计算在内。有没有人找到过真正与“这件事已经不再为真”相关的信号?
时间间隔真的是正确的信号吗? 一段六天前写入、此后无人触碰的状态,对于进展缓慢的项目来说可能完全有效。可一段六分钟前写入的状态,如果期间已经有三个 Agent 做过写入,也可能毫无价值。我使用“此后发生的写入次数”作为状态漂移的代理指标,但它也会把不相关的写入计算在内。有没有人找到过真正与“这件事已经不再为真”相关的信号?
谁有权让状态失效? 我们允许 Agent 提议某项决策已经被取代,但凡是要覆盖先前决策的操作,都必须由人类确认。老实说,我不知道这究竟是明智的判断,还是单纯出于恐惧。如果允许 Agent 自由地让彼此的状态失效,系统最终会收敛,还是会陷入反复震荡?
谁有权让状态失效? 我们允许 Agent 提议某项决策已经被取代,但凡是要覆盖先前决策的操作,都必须由人类确认。老实说,我不知道这究竟是明智的判断,还是单纯出于恐惧。如果允许 Agent 自由地让彼此的状态失效,系统最终会收敛,还是会陷入反复震荡?
并发写入者。 两个 Agent 在相隔几秒的时间内更新同一份状态。我们使用带租约的锁,它可以防止数据损坏,却完全无法解决语义冲突——两次写入单独来看都有效,放在一起却互不协调。有没有比 last-write-wins,再加上事后由人类发现问题更好的模式?
并发写入者。 两个 Agent 在相隔几秒的时间内更新同一份状态。我们使用带租约的锁,它可以防止数据损坏,却完全无法解决语义冲突——两次写入单独来看都有效,放在一起却互不协调。有没有比 last-write-wins,再加上事后由人类发现问题更好的模式?
模型真的会重视这种谨慎提示吗? 这是我掌握数据最少的问题。我在读取结果中加入了状态过时警告,也确实观察到了更好的行为,但我还没有构建一个能够单独评估其影响的 eval。如果你测量过工具输出中的谨慎提示是否会改变模型的行为,我真心想知道你是如何设计这项评估的。
模型真的会重视这种谨慎提示吗? 这是我掌握数据最少的问题。我在读取结果中加入了状态过时警告,也确实观察到了更好的行为,但我还没有构建一个能够单独评估其影响的 eval。如果你测量过工具输出中的谨慎提示是否会改变模型的行为,我真心想知道你是如何设计这项评估的。
这一切与缓存失效真的有什么不同吗? 有些时候,我觉得这不过是戴着 AI 帽子的缓存失效问题,我应该去阅读分布式系统领域的文献,而不是自己发明术语。但另一些时候,消费者是语言模型这一事实——它会心甘情愿地用看似合理的虚构内容填补空白——又让我觉得这确实改变了问题的性质。我无法确定。
这一切与缓存失效真的有什么不同吗? 有些时候,我觉得这不过是戴着 AI 帽子的缓存失效问题,我应该去阅读分布式系统领域的文献,而不是自己发明术语。但另一些时候,消费者是语言模型这一事实——它会心甘情愿地用看似合理的虚构内容填补空白——又让我觉得这确实改变了问题的性质。我无法确定。
传统软件读取到错误内容时,通常会以明显的方式失败。类型不匹配、解析失败、断言触发。Agent 读取过时状态时却恰恰相反:它会基于一个已经不复存在的世界,产出自信、连贯而且完全合乎情理的工作成果。这样的输出,甚至比直接崩溃看起来更值得信任。
正是这种颠倒,让问题变得棘手。作为工程师,我的所有直觉都被训练成去捕捉那些会坏掉的东西。但它并没有坏掉,只是悄无声息地不再正确。
如果你正在让多个 Agent 共同使用共享状态,我很想知道你是如何处理这个问题的——哪怕答案是“目前什么都没做,而且我们还没因此吃过亏”。这同样是一个有价值的数据点。
披露:本文是在我个人笔记的基础上,借助 AI 辅助完成初稿的;发布前由我本人进行了编辑与事实核查。
如需采取进一步措施,你可以考虑屏蔽此人和/或举报滥用行为。