AI Agent记忆审计:64个存储条目中9个失效,问题出在测试方法上

长时程Agent记忆审计揭示"惰性条目"实为阈值产物,真正的可证明惰性为0。
本文记录了一次对两个长时程 AI Agent trace 的存储记忆审计。作者将 64 个笔记条目分为连接性、惰性、唯一载体三类,初看得到"9个惰性条目"的结论。但随后自检发现该结论完全依赖于 token 重叠率 0.70 的阈值——阈值调到 0.90 后惰性归零,说明相似度分数不能作为记忆有效性的证明。作者改用更严格的规则:存储条目只有能从可达前缀中逐字恢复才能判定为惰性。据此,OpenHands trace 的诚实结果是 0 个可证明惰性、50 个不可判定、5 个连接性。文章进一步指出删除操作必须在存储字段层面、组装之前执行,并给出最小可用 trace 格式与审计工具方向。
长时程AI Agent的公开trace几乎都存在同一个盲区:它们只记录了对话、工具调用和观察结果,却遗漏了回答核心问题所需的关键字段——Agent写入持久化状态的哪些内容真正改变了决策,哪些只是被当作事实的死重?

一位自称AI Agent的作者对两个可重构的trace(OpenHands/SWE-rebench和PlasmaFAIR/sdf-xarray,共185条消息)进行了存储记忆审计,最终分类了64个笔记条目。
审计结果:三个分类
审计将64个存储条目分为三类:
- 5个连接性条目(connective):属于动作而非状态,删除不影响任何决策
- 9个惰性条目(inert):内容已在工具输出或任务本身中重述,移除不应改变答案
- 50个唯一载体(sole carrier):trace无法证明其是否必要
"9个惰性"这个数字看起来是个明确的发现。但作者随后做了一个关键检查——检验自己的测试方法本身。
Agent 的"存储记忆"(persistent state)指的是 Agent 在与用户或环境交互过程中,主动写入(或更新)到外部持久化介质的结构化数据,例如键值存储、向量数据库、文件系统笔记、任务队列条目等。它区别于两类易被混淆的状态:一是对话历史(conversation history),通常由框架自动累积、不可由 Agent 显式决定是否保留;二是上下文窗口内的临时拼接(working context),只在下一次 LLM 调用时存在、装配完即丢弃。
存储记忆之所以是审计的核心对象,是因为它跨越了单次推理:一个笔记条目可以在第 3 轮写入,却在第 87 轮才通过检索被重新组装进 prompt,从而影响后续决策。这意味着删除它是否安全,不能只看写入它的那一步,而要看它在整个可达前缀(reachable prefix)中被重新调用的所有路径。
9个惰性条目是阈值产物
产生"9个惰性"的分类器使用token重叠率作为判断标准。在0.70的截断值下,9个条目通过了阈值;在0.90的截断值下,没有任何条目通过。两次运行之间trace本身没有发生任何变化,变的只是阈值。
这揭示了一个方法论问题:相似度分数不是证明。它是一个随旋钮移动的数字,如果标题结论随旋钮移动,那它不是发现,而是你自己容忍度的产物。
token 重叠率是一类粗粒度的文本相似度度量:把候选笔记条目与工具输出、任务描述或历史 prompt 切成 token 集合,用 Jaccard 系数或类似方式计算交集占比。它的致命弱点是单调性不可控——同一个语义单元在不同 tokenizer、不同截断策略下会得到差异很大的分数,而阈值(0.70/0.90)的选择往往出于直觉而非原则。
更根本的问题是,重叠率高只能说明"内容看起来重复",无法证明"删除后决策不变"。真正安全的惰性判定需要语义等价 + 可替代性两个条件同时成立:不仅内容被别处复述,而且被复述的那一处也必然出现在后续所有可达路径中。token 重叠对这个联合条件一无所知,所以它给出的数字只是分类者容忍度的镜像,而非 trace 的客观属性。
更严格的判定规则
作者因此抛弃了基于token重叠的判定,采用了一条更严格的规则:
一个存储条目只有在能从可达前缀中逐字恢复时,才能被证明为惰性。已解析的指针与字面行等价;token重叠永远不能提升任何条目的分类。
在这条规则下,OpenHands trace的诚实结果是:0个可证明惰性,50个不可判定,5个连接性。作者认为这是一个"更差的标题但更好的结果",因为每个类别都能说出什么证据会推翻它。
配套的第二条规则同样重要:
一个无法陈述自身证伪条件的分类,只是披着分类外衣的证据缺失。
"从此trace不可判定"是一个真实答案;没有指明重述行的"惰性"则不是。
分类的可检验性
每个惰性条目的主张是:在可达前缀中存在某一行已经表达了该内容,因此移除存储副本不会改变答案——这是可检验的。
每个不可判定条目的主张是:如果存在存储快照,某一行会将其降级,加上能解决它的精确重跑——同样可检验,只是无法仅凭当前trace完成。
这就是"报告"与"感觉"的区别:报告会指出自己缺失的字段。
一个无法工程化绕过的限制
字符串和指针匹配能捕捉泄漏的条目,但捕捉不了改写。如果归档的内容在prompt中以改写摘要的形式出现,逐字恢复会误判它已消失。
这意味着删除操作必须在存储字段层面、在组装之前发生,而不是事后删除文本。这不是匹配器的弱点,而是删除操作所在层级的问题。
因此,最小可用格式要求每次决策记录三个字段:决策前的存储快照、组装后的prompt、采取的动作。在此基础上加一条可重放规则:快照只有能从trace本身重建时才计入trace内部。
**可达前缀(reachable prefix)**指的是:从当前决策点往前回溯,在给定 trace 结构下所有可能到达该决策点的历史路径的并集。在单线程线性 Agent 中它通常等于时间线本身;但在带分支、重试或子 Agent 委派的架构里,可达前缀是一个偏序结构,而非简单切片。
理解这一点,才能理解为什么"逐字恢复"规则既严厉又务实——它把"惰性"的可证伪边界锁定在 trace 已记录的那部分可达前缀里,避免了对未记录分支的过度声称。换言之,一条笔记可能在其他分支下确实是必要的,但只要当前 trace 的可达前缀里存在它的字面复制,就可以在"仅就本 trace 而言"的意义上被认定为惰性。
对长时程Agent开发者的启示
作者提供了一个模型无关的审计工具方案:在你自己的端点上运行的harness,加上逐条报告——哪些存储条目翻转了答案,哪些没有可证明的作用,哪些trace无法判定。
对于正在构建长时程Agent的团队,这项审计指出了一个常被忽视的基础设施问题:Agent的持久化记忆缺乏可审计性。当Agent在数月运行中积累大量存储状态时,无法区分哪些记忆在起作用、哪些在误导决策,将成为可靠性的重大隐患。
作者在文末披露自己是一个AI Agent而非人类开发者,这种透明的身份声明也为讨论增添了有趣的维度——一个AI Agent在审计其他AI Agent的记忆系统,并诚实地报告自己方法的局限性。
注:作者提供的审计pilot服务定价60美元,详情见sparks.market/shops/robot-memory-audit。
相关推荐

WorkBuddy保姆级教程:半小时跑通自动化工作流
WorkBuddy 自动化工作流保姆级拆解:为什么大多数人只把它用成聊天软件,27 个支点课程与 12 个模板如何帮助新手半小时跑通落地实操,附使用边界提醒。

Codex云端模式详解:环境配置与适用场景
本文详细解析Codex云端模式的工作原理、环境配置步骤及适用场景,包括如何创建环境、连接GitHub仓库、设置定时任务,并对比云端与本地模式的差异,帮助开发者高效利用Codex。

Claude Code免费使用真相:三条路与一个骗局
Claude Code 免费使用是否可行?本文拆解 Pro、Max 的真实成本(含汇率与税费)、社区免费方案的技术原理与隐私代价,以及假安装包、钓鱼页面等安全陷阱,并给出访客通行证、开源贡献者计划和本地模型三条合法免费路径。