为何编码智能体的记忆应仅保存差异部分,以及如何存储这些差异。
编码代理的记忆应仅存储模型无法猜测的内容。每条记录需要四项测试,存储则需要三项,以及为何 Markdown 在 Git 中适用。
想象在单台机器上为某个编程智能体维护的个性化记忆存储空间。它通过134行的索引来管理181个主题文件,但这些内容几乎都不是通常意义上的知识。该智能体早已掌握了Express中间件、Playwright测试的格式以及Dockerfile的功能,它所了解的这些内容远远超过任何人类。存储空间中的每一行数据存在的原因恰恰相反:它们标记出某个特定领域与行业平均水平存在差异的位置。
两个例子可以说明这一概念。部署验证器会在检查无法运行时阻止版本发布,这是有意为之。而版本发布流程中的自动审批环节会读取.status而非.conclusion,这个细节在最终成为文件中的一行代码之前,曾耗费了人们一个下午的时间。
这就是优秀智能体记忆的形态。它并非智能体所掌握知识的副本,而是差异部分,即剩余的内容。所有人都认同智能体需要记忆,但没人明确其具体形式,因此接下来的内容将分两步阐述:首先说明智能体为何需要记忆,然后再探讨如何组织记忆。后半部分又细分为四个方面:保持简洁性、对每个记忆单元及存储系统的要求、能够满足这些要求的存储方式,以及与之共处的常规方法。
智能体记忆并非人类记忆
人们的自然倾向是通过类比来推理。既然人类能够记住事物,智能体也应该如此。但这种类比在第一步就出现了问题。人类一开始是空白的,因此人类记忆必须同时存储普通情况与异常情况。而智能体模型则预先加载了超越任何单个人类的平均数据。向它说明什么是中间件并不会提供任何信息,只会增加一些标记而已。
令牌是需要付费的,而这正是许多人犯错的地方。那些不必要的上下文并非中立存在,而是会造成净损失。在一项研究中,研究人员统计了模型正确调用 API 的频率。当模型收到它已经很熟悉的 API 文档,且检索结果不完整时,其正确调用率下降了 39 个百分点;而为那些模型从未见过的罕见 API 获取此类文档反而有助于提升准确率,使其增加了 9 个百分点。同样的内容与相同的处理流程,效果却截然相反。
从这个角度看,记忆文件其实是在模型现有假设基础上叠加的差异信息。每一行重复已知规则的文字都在与那唯一重要的信息争夺注意力,而注意力往往是最稀缺的资源。
只记录模型无法猜到的内容。
将真实的上下文文件通过该过滤器处理后,其中的大部分内容都会被剔除。命名规则、“组合优于继承”的原则以及资源文件夹的布局都属于常规知识,这些都可以由代码检查工具处理,模型也已掌握。剩下的通常都是些棘手的内容:临时解决方案、被废弃的路径,或是仅在该代码库中成立而在其他地方不成立的规则。
在那个示例仓库中,代码总行数为3,700行(若计入索引则为3,831行),没有一行会说明使用了哪种中间件或如何构建测试。那些用来解释某个知名工具的代码行也会被删除,因为模型早已知晓这些信息,这样做只会白白消耗请求中的计算资源。
最省内存的方法就是不用它
如果记忆没有出错的话,其大小取决于项目与通用模式的偏离程度。遵循常规架构的话,代理几乎无需做任何额外工作,因为它已经熟悉相关领域。若自行设计模块系统,那么每一条规则都需被明确写出、严格遵守,并在每次请求时付出相应成本。
无需任何基准测试就能感受到差异。在主流技术栈中,代理可直接执行任务;而在小众语言或自研的内部框架中,它则需暂停、猜测或提出疑问。要缩小这种差距,就必须自行管理上下文:将其记录下来、进行版本控制,并始终保持最新状态。
对于这一说法,并不存在严谨的A/B测试,假装存在才是不诚实的。此处引用的研究支持了相关机制,而某个人的文件仅能证明该做法的存在,但这并不能作为该机制的证明。不过体验上确实一致:在普通的代码结构中,新工作的处理速度很快;而在那些大部分上下文都从未被记录下来的大型旧系统中,处理速度则较慢,有时甚至比手动操作还要慢。
因此,架构选择实际上就变成了内存管理的选择。选择那种枯燥但被广泛使用的模式,就无需再为其他问题操心。任何偏离常规模式的做法都意味着必须有人把相关内容记录下来并保持准确,而自定义路径在后续的每一次请求中都会带来更多成本,而不仅仅是在最初创建它时。
最困难的部分在于保持规模小巧
这就是原因。至于方法,首先要面对一个令人不安的事实:在实际应用中,破坏记忆系统的并非遗忘,而是数据积累。
实用性会落后于容量。双倍的记忆容量并不等同于双倍的效用,因为杂乱数据积累的速度比有用信息更快,一旦超过某个临界点,即便对于原本设计用来处理的查询,更大的存储空间也会给出比较小空间更差的答案。
冲突的增长速度比容量更快。任何新出现的事实都可能与现有事实相矛盾,因此潜在冲突的数量增长速度远远快于文件数量。而矛盾带来的代价也远高于信息缺失。当某条信息缺失时,系统会处于不确定状态,而这种不确定是可以接受的:它要么主动询问,要么在有人可见的情况下出错。但当两条事实相互矛盾时,系统虽然看似确定,实则错误,但由于循环过程中没有任何异常表现,因此没人会察觉到。
更糟糕的是,大多数记忆系统都无法察觉这个问题。向量相似度算法能识别出同一主题下的两句话,却无法发现其中一句为“是”而另一句为“否”。这样一来,数值就会趋于平缓,冲突却持续加剧,一旦超过一定规模,记忆系统反而会让智能体的表现变得更差。
记忆系统很少会以明显的方式出错。它通常是通过始终给出错误的答案来出错,而所有的查询却仍能得到正确结果。
因此,难点并不在于堆积更多信息,因为所有系统都会乐意这么做。真正的难点在于在保持足够功能的同时控制规模。这就需要删除一些内容,而删除意味着要对自己之前的记录进行评判。
人们往往首先寻求结构化方案。面对杂乱无章的信息,他们会强行套用层级分类、类别划分、图表或正式的知识框架。但这通常适得其反。在2026年的一项评估中,使用同一模型和工具为按需上下文索引增加更多层次结构后,准确率从0.91降至0.64。无论在何种情况下,扁平结构都优于层级结构。复杂的结构并不能解决复杂性问题,它只是在第一层复杂性之上又叠加了第二层复杂性,如今两者都需要维护。
因此,组织记忆的重点不在于绘制更完美的图表,而在于设定每条信息都必须达到的标准,同时提供一个能低成本实现该标准的存储方式。
每个记忆单元的四个测试标准
这些标准适用于单个记忆单元,而非整个系统。在团队中,这也是审核人员会检查的内容。
- 简洁且精炼。仅包含种子信息。没有一句内容只是为了显得完整而存在。那些不会改变智能体行为的内容纯属装饰,而装饰是需要付出代价的。
- 无冲突性。不存在两处同时为真的事实。这一点需要主动努力去维护,因为冲突会逐渐积累,且绝非刻意为之。
- 具有可衡量的实用性。记忆并不会让智能体变得更聪明,但它能让智能体在保持相同质量的前提下更快、更省成本地给出相同答案,无需重复探索。如果一个文件无法在实际任务中显著节省时间或计算资源,那就没有存在的必要。
reference_文件中,既定规则存储在50个feedback_文件中,而临时状态则存储在14个project_文件中。读者在打开文件前就能知晓其内容类别。有一项已发表的研究结果似乎削弱了第三项测试,但实际上却支持它。苏黎世联邦理工学院的研究人员将存储库中的上下文文件与完全没有文件的情况进行了对比,结果发现任务成功率并未提升,反而增加了超过20%的推理成本,而机器生成的文件表现略逊于完全没有文件的情况。仔细阅读差异规则就会明白,这并非相反的结论——充满普通知识的文件恰恰符合该规则所预测的会带来成本却毫无收益的情况。这项研究并未表明上下文文件整体失败,只是指出那些重复普通内容的文件无效,而这正是大多数此类文件的情况。
因此,规范化的要求意味着减少写作内容并加强精简:每一行都需保持信息密度,且任意两行之间不得存在矛盾。
8月时,Addy Osmani从维护角度提出了同样的问题,他认为随着模型不断改进,代理文件会逐渐过时(他的帖子标题为“代理文件审计”),因此这些文件需要定期清理和重建,而非无限积累。只会不断扩大的内存其实正处于倒计时状态。
然后像你自己的记忆机制那样,按任务对留存的内容进行划分。用于生成文本的内容与用于调试构建的内容是不同的。
没人需要一个完整的内存体。真正需要的是针对当前任务的最小且正确的部分。
存储系统的三个要求
那四项测试并未涉及文件存储的位置问题,而这正是组织管理的另一重要方面。
现有工具的共性为我们提供了线索。AGENTS.md是一个位于固定路径上的普通Markdown文件,尽管各工具的开发者在其他方面几乎都在竞争,仍有二十多种工具会读取它。竞争对手之间从未有过同时实现相同内存API的情况。
一篇关于已上线编码代理工具的调查报告(发布在Substack上)显示,这七种工具在未经协调的情况下都采用了相同的设计:始终在内存中保留一个小型Markdown文件,同时在磁盘上存放一个较大的归档文件,仅在任务需要时才打开。这些工具均未使用向量搜索功能。虽然它们没有统一的测试标准,但都满足同样的三项要求。
无需安装即可搜索。人们通常认为“搜索”意味着语义搜索,但实际上这并非普遍情况。Anthropic自身的记忆工具仅支持查看、创建、替换、插入、删除和重命名操作,完全不具备查询功能。该工具只会列出目录并读取其中的内容。只有在索引已构建、嵌入向量最新且服务提供商正常运行时才能使用的记忆系统,会在上下文处理过程中形成薄弱环节;而当这些条件都不满足时,它仍需继续工作。
在有人观察时仍会发生变化。能够自我更新的记忆正是该领域面临问题的核心。据报道,对生产环境中10,134条自动提取的记录进行的审核显示,其中97.8%属于无用数据。另一项研究让模型将自身成功的运行结果保存回内存中,结果在所有四种测试的智能体中都比没有内存的情况更差。自我写入的记忆会以剧烈而非渐进的方式发生偏移,因此任何变化都必须以差异形式呈现,且可被拒绝和撤销。
借助现有的开源工具即可进行维护。数据损坏很少会导致内存系统崩溃,但疏于管理却会:文件仅被写入一次后便无人再查看,逐渐出现错误。根据2026年的一项研究,一半的上下文文件在首次提交后就再未被修改过,而那6%持续被修改的文件则属于那些认为该工具能带来实际好处的人所有。维护工作必须在人们日常使用的编辑器、搜索及版本控制工具中完成。
以上就是全部规范要求,剩下的问题就是哪种存储方式能够满足这些要求。
为何 git 中的 markdown 文件适合
支持使用文件的观点并非新鲜事。过去一年中,Medium上的作者至少六次提出“在智能体记忆方面,Markdown优于向量数据库”,而Hacker News上的相关讨论也不断出现以纯文本为解决方案的玩笑言论。但很少有人解释其中的理由。
在三个月内,有三家销售内存数据库的厂商反对使用文件,而两家提供主流智能体的厂商早已选择了文件格式。这里的争论并无商业目的,只是为了使用文件夹而已。
该领域存储的内容
系统存储的内容决定了后续的所有处理方式。
- Mem0会存储由大语言模型提取的句子及其嵌入向量,形成向量索引中的一行数据。返回的结果并非原始文档,而是提取工具的意译版本,且无法被直接打开。
/memories 目录下执行文件操作,由用户自己的客户端来运行。其托管的、仍处于测试阶段的 Memory Stores API 采用文件系统风格的路径来命名资源,并通过内容哈希来解决并发写入问题,本质上相当于带有 HTTP 接口的 git 数据模型。真正的区别在于内存是否可被读取,而“文件与数据库”的划分方式并未抓住这一核心。所有非文件类型的工具都有一个共同点:无法对比两个时间点的内存状态。修改是通过切换操作完成的,而非通过提交操作。
各方均有自己的解决方案,且都有一定道理
2026年3月,MatrixOrigin声称静态Markdown会逐渐失效且无法起到任何约束作用。五周后,Mem0发表了一篇题为《你的AI智能体的记忆仅仅是一个文件?问题就在这里》的文章,指出纯文本文件重蹈了20世纪70年代数据库出现前的错误:没有语义搜索功能,没有时间推理能力,无法实现安全的并发写入,也无法实现信息遗忘。Zep在6月补充指出“Markdown并非智能体记忆”,并强调了一个核心观点:Markdown文件仅能显示曾经写过的内容,而无法体现它取代了什么内容或为何如此做。
与此同时,Anthropic自研的编程智能体也将其记忆以普通Markdown格式存储在磁盘上,而Windsurf的文档则建议将任何值得保留的内容从智能体的内存存储中移出,转而存入受版本控制的Markdown文件中。值得注意的是,不同公司都在推销各自的产品。
数据库供应商确实有两个合理的观点。当问题与笔记之间没有共同词汇时,向量方法更占优势,比如询问“关于精疲力尽的感觉是什么”,而笔记中从未出现“精疲力尽”这个词。只有嵌入技术能够在处理数百万行数据时以稳定的速度弥合这一差距。如果无法用语言表述,grep就无法找到相关内容。
在处理时间相关问题时,图模型更具优势。要回答某人上周二相信什么以及后来被什么取代,需要带有起始和结束日期的事实依据,而相似度分数无法判断两个相互矛盾的事实中哪个是当前的。据报道,针对某个长时记忆基准测试中的时间相关问题,第三方重新测试后显示图模型的准确率为63.8%,而向量模型的准确率为49.0%。在这两方面,文件处理方式都处于劣势。
证据及其局限性
2026年的检索结果令该领域大为震惊。那些使用grep、find以及直接读取文件的方式来处理文件堆的智能体,其性能优于所有基于关键词、嵌入模型以及重新排序的基准方法。某项智能体搜索基准测试显示,去掉嵌入模型检索器、让智能体直接读取文件,可使准确率从69%提升至80%,同时成本还降低了近三分之一。另一项关于长期记忆问题的研究则发现,在每种内联工具调用配置下,单纯的关键词搜索都优于语义搜索。不过,当结果以文件形式返回时,有一半的对比组合中顺序会发生反转,因为这些问题更看重能否找到确切的信息,如日期、数值、标识符或错误信息字符串。
那篇关于智能搜索的论文也明确指出了一个显而易见的问题:当文档数量从10万增加到40万时,同样的方法准确率会从80%降至40%以下,同时工具调用次数则增加三倍。grep的效率受限于一定的数据规模,并非永恒有效的法则;在适用范围内,它在质量和成本方面更具优势,但超出范围后性能就会急剧下降。
因此,真正值得探讨的问题是某个系统处于该效率范围的哪一侧,而非哪种方法在所有情况下都更优。181个文件的存储规模远小于据说会出现问题的那种大规模数据量,而像LinkedIn这样的大型公司的生产级内存系统则并非如此,也没人主张它应该使用markdown格式。
对比评估:文件处理方式与其他方案的比较
针对这三项要求,Markdown文件几乎无需任何成本即可满足每一项。Grep可作为备用方案,任何更改都会以差异形式呈现(即仓库中的可逆提交),而且维护工具早已存在于桌面环境中。
还有两项好处更是无需付出任何代价。当出现矛盾时,是因为两个冲突的事实表现为两行文本,而非两个浮点数数组,而且存储格式同时也可用作导出格式。
这种权衡应当被明确指出而非隐藏起来。当需要在大量文档中进行模糊检索时,文件格式会不如嵌入向量高效。解决方法是在这些文件之上构建一个索引,该索引可随时重建,而非取代文件本身。基于SQLite的基本内存存储方案会在其上构建该索引,memsearch则在Milvus之上构建,而Karpathy的复合维基方案仅依靠索引页即可实现功能,完全不需要嵌入向量。一旦索引成为存储介质,检索功能虽仍可保留,但查看、对比、权限控制和可移植性等功能则需放弃。
如果无法用grep搜索、对比内容或删除其中的某一行,那它就不是你的内存,而是别人存储关于你的缓存。
运行中的系统是怎样的
原则本身成本很低,以下就是一个可行的实现方案。
- 多层指针结构,却无明确规范。代理程序首先打开的文件共有21行内容,它充当一张地图,包含三个顶层区域,每个区域占一行,分别指向更深层的文件。再往下一层,项目文件中存储着真正属于个人的内容:正在使用的代码库与因重命名而失效的代码库、所有内容所依赖的版本、以及需要遵守的沟通规则。在整个项目结构中分布着28个这样的文件,它们都是手写的,只有当工作流程需要时才会被加载。
- 代理程序负责写入,人类进行最终确认。与之相邻的是自动内存系统,它由134行内容的索引文件以及181个主题文件构成。只有当会话开始时索引文件才会被加载,而一旦有任务需要,对应的主题文件就会立即被打开。
用于加载而非推理的层次结构
统计上述层级数量,共有四层,这正是早先0.91至0.64的实验结果所警告的深度阈值。但那项研究中的变量是深度,而索引在所有实验设置中都保持不变。最佳配置是为每项任务设置固定的索引,智能体只需一次性读取即可决定打开哪个选项,这样做的准确率几乎比直接导航高出两倍,且成本仅为其一半。只有当索引出现分支,迫使模型必须逐层向下探索,并仅凭标签猜测哪条路径包含答案时,实验结果才会变差。
该结构的索引采用扁平排序方式:仅有一层,会喺会话开始时一次性读取完整内容。它包含134行,大致每个主题对应一行,每行都会用简短的总结语句标注其所指向的文件。由于没有分支结构,因此无需猜测。这只是一个手动维护的小型路由表,而非供模型推理使用的分类体系,且可能存在缺陷——181个文件中有11个并未收录其中。下面的主题文件体积较小、结构扁平且会被完整读取,某个层级的打开是因为相关工作进入了该领域,而非因为有查询触发。这就是渐进式披露机制。
测试很简单。如果模型只能根据标签来猜测答案位于哪个分支,那就意味着已经构建了树结构,此时得分将为0.64。而如果它能读取完整索引并按名称打开文件,那就属于按加载顺序处理。
结构的存在是为了决定加载什么内容,而非让模型自行推理。
防止偏离的保障措施
智能体提出修改建议,这些修改会以差异形式呈现,随后由人工决定是否接受。存储在仓库中的文件自带历史记录,因此可以通过查阅这些记录来解答智能体为何会持有某种观点的问题,而这是任何向量存储或供应商内存页面都无法提供的。未经任何人审核的记忆不过是带有文件名的谣言而已。
偶尔会进行一次简单的清理工作:删除在六月份还有效的行、模型后来已吸收的文件,以及被更优规则取代的规则。存储空间的缩减频率往往高于人们的预期。
在本地磁盘上,所有内容都是普通的 Markdown 格式,无需依赖辅助工具即可运行。明年若有更强大的工具出现,只需将其应用于同一个文件夹并继续使用即可。
今天即可进行的检查
整个架构可以概括在一张卡片上:每保留一行就需要四项测试,存储位置需满足三项要求,同时在智能体与文件之间还需有人类介入。
要确定自己的职责范围,打开项目的上下文文件,无论是 CLAUDE.md、AGENTS.md 还是工具能识别的其他格式,然后删除模型在没有辅助情况下可能猜错的每一行。删掉一半内容是较为现实的目标。之后将剩余的文件交给智能体处理,看看情况是否会恶化。此后,每当智能体在它本无法知晓的情况下出错时,就添加一行内容并像审查代码一样对其进行检查。这就是应有的规范,而且不能通过增加更多内容来突破这一限制。
智能体已经知道平均值了,唯一需要计算的是变化量。
相关阅读
- 为何智能体记忆基准测试会产生误导,以及如何利用自身数据进行评估 —— 公开的记忆排行榜存在有缺陷的答案键和评分标准。应将信息检索与答案生成分开,加入一致性、最新性、弃权情况及遗忘检测,并跟踪相关成本。
- 提示注入与致命三重威胁:如何保护人工智能智能体 —— 为何智能体无法区分用户的指令与攻击者的指令,EchoLeak及GitHub MCP攻击的运作原理,以及哪些防御措施有效。