四月底,我做了一个小实验:让一个 Agent 替我完成跨越三天的任务——整理一门课的全部笔记,找出概念之间的依赖关系,再生成一份复习路径。第一天它表现得近乎完美。第二天恢复会话后,它把前一天已经否决过的方案又提了一遍,语气里甚至带着初次发现的兴奋。
这次失败比任何论文都更直接地把问题摆在我面前:我们说一个 Agent「有记忆」的时候,到底在说什么?
上下文不是记忆
最直接的回答是:把所有历史都塞进上下文窗口。窗口在变大,这件事看起来迟早会被硬件解决。但实验里我很快发现,问题不在「装不装得下」,而在「找不找得到」。当三天的对话全部在场时,模型并没有变得更清醒,反而更容易被无关的细节带偏——它记得一切,等于它不知道什么重要。
人类的工作记忆只有可怜的几个槽位,但我们极少因此觉得自己「没有记忆」。因为记忆的本质不是保存,而是在正确的时刻让正确的经验浮现。
检索的代价
第二种方案是外置记忆加检索:把历史写进数据库,需要时查。我的版本工作得不算坏,但它引入了一个我此前从未认真想过的问题——检索是有立场的。
「用什么查询去检索,本身就是一次对『当下什么重要』的判断。这个判断错了,检索回来的记忆越准确,行为就偏得越远。」
实验里最典型的失败是:Agent 用任务的字面描述去查记忆,捞回了三天前一段字面相似、实质无关的讨论,然后非常自信地沿着错误方向走了七步。
遗忘是设计,不是缺陷
真正让实验好转的改动,是我开始主动丢弃信息:每个阶段结束时,让 Agent 写一段不超过两百字的「交接备忘」,只有备忘进入下一阶段,原始记录全部封存。效果出乎意料——它不再重提被否决的方案,因为备忘里写着「方案 A 已否决,原因是成本」,而不是那场冗长讨论本身。
这让我重新理解了遗忘。遗忘不是记忆系统的失败模式,而是它的压缩算法:决定什么值得带往未来,本身就是认知工作中最重的那部分。
所以,Agent 需要怎样的记忆?此刻我的答案是:需要的不是更大的仓库,而是一位诚实的史官——记录时克制,引用时谨慎,并且敢于把大部分过去留在过去。