你有没有过这样的经历:教一个新同事做事,他第一次做对了,你夸了他几句,结果下一次遇到类似但不完全一样的情况,他却把上次的经验用错了地方,犯了同样性质的错误?
更麻烦的是,你没法把那次失败的教训塞回他脑子里重新写一遍。你只能眼睁睁看着他带着错误的经验继续往前走。
这其实就是现在大语言模型智能体面临的真实困境。当AI agent需要长时间连续工作,处理一连串相关但不断变化的任务时,它需要某种"记忆"机制来积累经验。但这篇来自MIT、Meta和耶鲁大学研究者的论文发现,几乎所有现有的记忆系统都有一个共同的致命缺陷:它们只会往前写,不会往回改。
核心问题:记忆只进不出,错误会越滚越大
先说清楚我们在聊什么。
**智能体harness**:可以理解为围绕大语言模型搭建的一套运行框架,它负责管理记忆、提取经验、检索历史信息,让一个原本"健忘"的语言模型具备了持续学习的能力。
想象一个AI智能体在处理一连串排序任务。第一轮,它看到{3, 7, 4}要求降序排列,答对了,于是系统生成一条反思:"把更大的数字放前面",存进了记忆库。第二轮,新任务来了,要求{2, 9, 5}升序排列。系统检索到刚才那条反思,照做,结果答错了。
**反思(Reflection)**:智能体在完成一个任务后,由专门的"记忆agent"从这次经历中提炼出的经验总结,通常是一段文字,描述什么做法有效、什么无效。
问题出在这里:虽然系统之后又生成了一条新反思"把更小的数字放前面",但第一条错误的反思并没有被删除或修正。它还留在记忆库里,而且因为数字有重叠,下一次检索又把它翻出来,继续误导决策。错误像滚雪球一样,没有刹车机制。
论文作者把这类系统称为"stateful harness"(有状态的harness),它们的信息流动是单向的:观察任务,提取反思,写入状态,下次检索,循环往复。写进去的东西从来没有机会根据后续效果被重新审视。
这就好比一个只会往笔记本上添加新条目、却从不回去划掉或修改旧条目的学生。如果某条笔记一开始就记错了,或者只在特定情境下成立却被写成了通用规则,那么每次翻开笔记本复习,他都会被这条错误的笔记误导一次。如果不允许回头修改,这个笔记本只会越记越乱,错误越积越多,而不是越用越准。
为什么不能简单地用"验证集"来解决这个问题?因为论文设定的场景是严格的在线流式学习:数据一条一条地来,每条只能看一次,没有办法回头收集额外的反例做离线优化,也没有预留的验证数据集来挑选最好的记忆更新方案。前沿的API模型(比如Claude、GPT、Gemini)更是连参数都不开放,没法做梯度更新。研究者们能用的,只有文本本身。
ReHarness:给记忆装上一个"回头看"的齿轮
于是研究团队提出了ReHarness,核心思路是在原有的"前向写入、前向读取"基础上,加上一个"反向修订"环节。
用之前的排序例子来说明这个改动。第二轮任务{2, 9, 5}升序排列做错之后,系统不是简单地再写一条新反思了事,而是启动了一个专门的"修订agent",回头去看被检索出来、导致这次错误的那条旧反思"把更大的数字放前面",结合这次失败的结果,把它改写成更精确的版本:"只有在降序排列时才把更大的数字放前面"。
**修订agent(Revision Agent)**:ReHarness框架中新增的一个角色,专门负责在观察到新任务结果后,回头检查并改写之前被使用过的旧反思,而不是只生成新反思。
这个修订过程有一条硬性规定:修订agent只能使用那条反思最初产生时的原始经历作为内容来源,当前这次失败只能作为"反馈信号"告诉它哪里需要修正,不能把当前任务的信息直接塞进旧反思里。这是为了防止信息泄露,确保修订出来的新反思依然是基于真实观察到的证据,而不是凭空编造或者偷看了"答案"。
这个设计为什么重要?因为如果修订agent可以随意把当前任务的信息写进旧反思,那本质上就是在作弊,相当于提前知道了考题再去修改复习资料。研究者专门做了事实核查实验,把每条修订后的反思拆解成一条条具体陈述,用GPT模型去判断这些陈述是不是真的能从原始经历中推出来。结果显示,三种不同的大模型backbone(Claude、GPT、Gemini)生成的修订内容,超过95%的陈述都能在原始经历里找到依据,信息泄露率只有0.8%到2.1%,没有证据支持的陈述比例也只有0.5%到2.6%。这说明模型确实老老实实地遵守了"只能用旧经历改写,新经历只能当反馈"的规则。
再回到排序的例子。修订完成之后,被改写过的反思会继续作为"演示样本",帮助生成这一轮的新反思。原本那条"把更小的数字放前面"的新反思,这次有了修订版旧反思作参考,也会带上类似的限定条件:"只有升序排列时才把更小的数字放前面"。两条反思现在都变得精确了,下一轮任务再检索到它们时,就不会再被误导。
这整套机制构成了一个完整的闭环:前向读取获取历史经验,agent执行任务产生反馈,反向修订用这个反馈去纠正历史经验,前向写入再生成新经验。研究者把这称为"recurrent harness",循环式的harness,相对于之前只有单向信息流的stateful harness。
说它像什么呢?有点像医生查房的病历修订制度。一个病人第一次就诊,医生记下诊断和用药建议。但如果后续复诊发现之前的判断有偏差,比如某种药物在这个病人身上效果不好,医生不会把错误的旧病历原封不动留着,而是会在病历上做批注修正,告诉以后接手的医生"这个判断需要加一个前提条件"。如果没有这套修订机制,新来的值班医生每次翻到那条旧记录,都会被误导着开出同样不合适的药。ReHarness做的事情,本质上就是把这套"病历批注"机制搬到了AI智能体的记忆系统里。
三步走的具体实现
把整个机制拆开看,ReHarness在每一轮任务里做三件事。
第一步是前向读取。系统接到新任务后,从当前的记忆状态里检索出最相关的若干条反思,交给决策agent去处理任务,任务完成后环境会返回一个奖励值,形成这一轮的完整经历记录。
第二步是反向修订。决策agent完成任务后,修订agent会单独审视每一条被用到的反思,结合它的原始来源和这次使用的效果,生成修订版本。重要的是这个过程对每条反思独立进行,而且必须保持内容扎根于原始经历。
第三步是前向写入。记忆agent根据这一轮完整经历生成一条新反思,并且会参考刚才修订过的反思作为写作范例,确保新反思能补充一些修订版本没有覆盖到的视角,而不是简单重复。
**决策agent(Decision Agent)**:实际执行任务、给出答案的那个agent角色,它会参考检索到的反思来做判断。
**记忆agent(Memory Agent)**:负责在每轮任务结束后,从这次经历中提炼生成新反思的角色。
三个角色各司其职,像一条生产线一样配合运转,构成了整个ReHarness的运行骨架。
三大测试场和三种模型,数据说话
光讲原理不够,研究者在三个持续学习基准测试和三种主流大模型backbone上做了系统性实验。
**CL-Bench**:包含队列研究、代码库适配、数据库探索、销售预测、频谱监测、扑克博弈六类任务,每个任务有12到120轮带有明显分布漂移的多轮交互。
**MemoryBench**:聚焦长输入长输出的生成任务,涵盖学术、创意、政治写作等领域,每个任务17到47轮单轮交互。
**MemoryArena**:覆盖旅行规划、网购、渐进式网页搜索、数学物理推理等五个领域,每个任务包含2到16个相互关联的轮次。
三个基准测试搭配Claude Opus 4.8、GPT-5.5、Gemini 3.7 Flash三种模型backbone,总共形成了九种组合。衡量标准是"归一化增益",简单说就是方法相比什么都不做的模型,在该任务理论最高得分和基线得分之间的区间里,到底往前走了多少比例。
结果显示,ReHarness在九种组合中的八种里拿到了并列第一或者绝对第一,总体平均归一化增益达到0.240,是所有对比方法里最高的。
|方法|CL-Bench平均|MemoryBench平均|MemoryArena平均|总体平均|
|---|---|---|---|---|
|Mem0|0.138|0.039|0.217|0.131|
|RBank|0.059|0.024|0.018|0.034|
|DoT|0.066|0.030|0.117|0.071|
|ACE|0.055|0.032|0.041|0.043|
|GEPA-Online|0.149|0.023|0.104|0.092|
|Top-K Raw|0.208|0.038|0.259|0.168|
|Full Raw|0.241|0.025|0.226|0.164|
|**ReHarness**|**0.256**|**0.107**|**0.357**|**0.240**|
值得多说几句对照组。研究者对比了多种现有的强力方法,包括按原子化方式存储记忆的Mem0、维护反思库的RBank、生成多样化反思的DoT、通过增删改合并来维护反思的ACE,还有把提示词优化方法GEPA改造成在线版本的GEPA-Online,以及两种直接把所有历史原始经历塞进上下文的朴素方法Top-K Raw和Full Raw。
有意思的发现是,原始经历堆砌(Top-K Raw和Full Raw)这种看似"笨"的方法,反而比很多结构化的记忆和反思方法表现更好,尤其在CL-Bench和MemoryArena上。这说明单纯依靠"提炼反思"这个动作,如果没有纠错机制,提炼出来的东西质量可能还不如保留原始记录。而反思类方法里,RBank、DoT、ACE表现并不稳定,个别设置下甚至出现负增益,也就是说用了这套记忆系统反而比什么都不用更差。GEPA-Online在MemoryBench配合Gemini时出现了严重的负增益,提示纯粹的提示词优化策略在持续学习场景下的鲁棒性不够。
研究者还做了统计显著性检验,用双侧配对Wilcoxon符号秩检验加Bonferroni校正,结果显示ReHarness相对所有对比方法的提升都具备统计显著性,包括表现最强的两个原始经历基线方法。
任务层面的细节也值得一看。在CL-Bench的六个任务里,ReHarness在大多数任务上领先或接近最优,唯独在"可利用扑克"这个任务上只取得了微弱提升。原因不难理解:扑克游戏存在隐藏信息和随机性,单局的奖励和策略质量之间的关联本来就比较弱,这种"信用分配"困难的场景下,依靠奖励反馈去修订反思的ReHarness反而不如保留原始牌局记录、让决策agent每次重新解读的原始经历方法来得稳。这也暴露出ReHarness的一个边界:它在反馈信号干净、诊断性强的场景里效果最好,面对噪声大的反馈时优势会打折扣。
成本账:更聪明不等于更贵
一个很现实的问题是,这套修订机制会不会让计算成本爆炸?毕竟每一轮都多了修订agent的调用。
研究者算了一笔账。在CL-Bench全部任务上跑一轮,用Claude backbone,ReHarness消耗约3719万输入token和438万输出token,总共约4157万token。相比之下,Top-K Raw消耗约5266万token,Full Raw消耗约1.4212亿token,分别是ReHarness的1.3倍和3.4倍。
原因在于,虽然ReHarness要多做反思生成和修订调用,输出token确实更多,但紧凑的反思文本大大压缩了决策时需要塞进上下文的内容量,尤其是对那些很长、很多轮的任务而言,这个节省效果非常可观。配合提示缓存和Claude的API定价,三种方法对应成本分别是Top-K Raw约85美元、ReHarness约254美元、Full Raw约314美元。ReHarness花的钱比Full Raw少,效果却比Full Raw还好(归一化增益0.217对0.191),虽然比Top-K Raw贵,但效果明显更优(0.217对0.165)。
这就像请一个经验丰富的顾问和临时查阅一整箱档案的区别。查档案看似不花智力成本,但每次都要翻遍全部材料去找相关内容,时间精力消耗巨大。请一个懂得提炼要点、并且会根据实际效果不断修正自己判断的顾问,前期需要多付一点咨询费,但长期下来效率和准确度都更划算。如果不做提炼压缩,始终硬塞原始材料,随着历史积累越来越多,成本会线性甚至超线性增长,而ReHarness靠紧凑的反思文本,把这个增长速度压了下来。
稳定性和可塑性的平衡
持续学习领域有个经典的权衡概念,叫稳定性与可塑性的平衡。
**稳定性(Stability)**:衡量方法在遇到分布突变后,第一次应对新情况时的表现,这时候还没有任何针对新情况的反馈可用。
**可塑性(Plasticity)**:衡量方法在分布突变之后、下一次突变之前这段时间里,能不能快速适应新情况。
研究者按照CL-Bench论文的做法把归一化增益拆解成这两部分,结果相当能说明问题。Mem0、RBank、DoT、ACE、GEPA-Online这几个只有前向信息流的方法,平均稳定性增益居然是负数,说明它们在面对突发分布变化时,积累的历史经验不仅没帮上忙,反而成了拖累。
而ReHarness在平均稳定性增益上拿到了最高分,并且在每一种backbone模型上,可塑性增益都是最高的。这意味着ReHarness不仅在分布突变发生的瞬间表现更稳,突变之后适应新情况的速度也更快。背后的逻辑并不复杂:因为有反向修订机制在持续清理和修正旧经验,当分布发生变化时,harness里积累的错误经验更少,自然不容易在关键时刻"坑自己"。
研究者还专门可视化了CL-Bench代码库适配任务中harness状态随时间演变的过程,发现一个很有意思的规律:在分布突变发生之前,修订的幅度会逐渐减小,说明harness状态趋于稳定,旧经验被验证有效、不需要大改;而在分布突变发生之后,对旧反思的修订幅度会明显上升,尤其是那些比较早期生成的反思会被大幅改写,用来适应新的任务分布。随着时间推移,修订又会逐渐集中到和当前分布相关的最近反思上。这个动态过程,恰好印证了ReHarness是在"保留有用经验"和"修正过时经验"之间动态寻找平衡点,而不是粗暴地全部推倒重来,也不是固执地一成不变。
反事实实验:验证修订机制确实有用
研究者还设计了一个很巧妙的反事实实验来验证修订机制的真实效果。
正常情况下,ReHarness修订完的harness状态只会用在下一轮任务上,这是为了遵守严格的在线流式协议,不能回头去改已经完成的任务。但研究者额外设计了一种"违规"的实验设置:修订完harness状态之后,立刻把这个修订版本重新用在刚才那个任务本身上,看看效果会怎样。
这个"开后门"的实验结果相当震撼。在CL-Bench的全部六个任务上,用这种反事实回放的方式,归一化增益从ReHarness正常设置下的0.217一路跳到0.335,远超正常设置,也远超完全不做修订的基线方法(0.144)。这说明修订机制本身是真正有效的,它确实能够从历史经历里挖掘和修正出更好的信息,只是受限于在线流式协议,这些改进要等到下一轮任务才能真正发挥作用。
换句话说,修订agent的判断力本身没有问题,问题只在于"这次修订能帮到谁"。它没法帮到刚刚结束的那次任务,只能帮到接下来那次。但即便如此,相比完全不修订的版本,ReHarness依然实现了明显提升,尤其在数据库探索、销售预测和频谱监测这几个任务上增益最为显著。
具体案例:修订机制到底在改什么
光看数字可能还是有点抽象,论文里给出了两个非常具体的案例,能让人直观感受到修订机制在发挥什么作用。
第一个案例来自频谱监测任务。智能体需要从连续的频谱扫描里判断哪些是持续存在的信号发射器。早期某一轮,智能体只观察到了五个真实的发射器峰值,奖励是0.297。记忆agent看完这次经历后,过度概括出一条建议,说应该"报告一些推测性的额外信道来填补大段的静默间隙"。下一轮,决策agent照着这条建议,大胆添加了六个没有实际观测到的虚构发射器,结果因为这些虚构信号本来就不存在,奖励反而掉到了0.219。
修订agent看到这个失败后,把那条过度自信的反思重新标注为"推测性,没有直接证据支持",并且改写成更谨慎的版本:"优先保留已确认的峰值,而不是添加未确认的"。再往下一轮,决策agent遵循修订后的建议,只保留实际检测到的信号,没有再虚构,奖励提升到了0.367。
第二个案例来自数据库探索任务,智能体需要查询一个未知结构的SQLite数据库。早期某一轮,智能体发现数据库里有一列叫"prc"的价格字段,包含一些空值,智能体最终从另一个字段"prc_usd"算出了答案,记忆agent总结出一条规则:"被打分的值来自prc字段",这个说法听起来很确定,实际上没有真正验证过。
二十轮之后,任务环境悄悄发生了变化,数据库schema被修改,新增了一个"prc_v2"字段。智能体检索到那条旧规则,想当然地只检查了"prc",答错了。修订agent看到这次失败,意识到当初那条"被打分的值来自prc"的结论其实缺乏真正的验证,于是把规则改成更加谨慎的版本:"不要假设哪一列是被打分的,要枚举所有类似价格的列"。再后来,智能体遵循这条修订过的规则,同时检查了"prc"、"prc_usd"和新出现的"prc_v2"三个候选列,只用两次查询就得出了正确答案,奖励从0大幅提升到0.867。
这两个案例揭示了修订机制在解决两类不同的问题。频谱监测的例子是纠正"过度概括",智能体从一次成功经历里推出了一个超出证据支撑范围的通用规则;数据库探索的例子是应对"分布漂移",原本在旧schema下成立的经验,在新schema下已经不再适用,需要被重新校准为更具普适性、更谨慎的版本。
这就好比一个导游带团多年积累的"经验之谈"。他可能因为某一次带团时某个景点人少,就总结出"这个季节这个景点永远人少"的规律,下次再带团照着这个判断安排行程,结果赶上节假日人山人海。真正靠谱的导游会在每次踩坑之后,把自己的经验规则加上限定条件,比如"工作日这个景点人少,但节假日依然拥挤"。如果没有这种持续校正的习惯,导游的经验库只会越积累越多,但其中混杂的错误判断也会越来越多,最终反而变成了误导游客的来源。
需要大量修订才能见效吗?
研究者还做了一个关于检索数量k的参数敏感性分析,这个k决定了每轮检索多少条反思、进而需要修订多少条。
结果显示,在CL-Bench配合Claude的设置下,k从1增加到5时,ReHarness的归一化增益明显上升;k在5到20之间时基本保持平稳;但k继续增大后,增益反而开始下降。这说明检索和修订的数量并不是越多越好,过大的k可能会引入不必要的修订、造成反思内容的漂移,同时还会增加计算开销。作为对比,Top-K Raw方法的表现随着k增加逐渐逼近Full Raw,说明堆砌更多原始经历确实有边际效用递减的规律,但ReHarness达到饱和点所需的k明显更小,研究者最终把k固定在5,兼顾效果和效率。
另外研究者还做了组件消融实验,去掉被修订过的反思作为后续新反思生成时的参考样本,CL-Bench配合Claude的归一化增益会从0.217降到0.191,说明修订过的反思不仅自己有用,还能指导后续生成质量更高的新反思,形成一种正向循环。
Q&A
Q1:ReHarness是什么,它解决了什么问题?
A:ReHarness是一个让AI智能体持续学习的新框架,核心是在传统"只写不改"的记忆系统上加入反向修订机制。它解决的问题是,过去的记忆系统一旦写入某条经验就不会再修改,哪怕这条经验后来被证明是错的、过时的或过度概括的,也会一直留在记忆库里反复误导智能体,而ReHarness能根据后续任务的实际效果去修正这些旧经验。
Q2:ReHarness和直接把所有历史记录都塞给模型相比有什么优势?
A:实验显示ReHarness不仅效果更好,归一化增益达到0.240,高于把全部历史原始记录塞进上下文的方法(0.164),而且总token消耗只有后者约三分之一,因为紧凑的反思文本大幅压缩了每次决策需要处理的上下文量,省钱又更准。
Q3:ReHarness在什么情况下表现不好?
A:在CL-Bench的"可利用扑克"任务上ReHarness只取得微弱提升。因为扑克这类任务存在隐藏信息和强随机性,单局结果和策略质量的关联较弱,奖励反馈本身噪声较大,这种情况下依靠反馈去修订反思的效果会打折扣,保留原始记录反而更稳妥。







