原始英文摘要
arXiv:2610.33029v1 Announce Type: cross Abstract: Self-improving agents write lessons from the outcomes of their runs; when outcomes are noisy, a lesson can carry chance into later decisions. We measure one link of this chain in a registered study. In 256 synthetic worlds, each a recurring task with two interchangeable tools of recorded reliability, a scripted previous run used the more reliable tool (a good decision) or the less reliable one (a bad decision), with an assigned outcome: success or a transient failure. A model wrote a lesson from the run with ReasoningBank's memory-writing instruction; a fresh session of the same model, holding the authoritative log and the previous result, chose the next run's first tool with one memory item: that lesson, the lesson from the other outcome, an irrelevant item, or an unreasoned directive. The protocol was frozen, deposited and timestamped before any confirmatory call; 11 LLM endpoints gave 90,084 answers. After a chance failure of the better tool, the panel's lessons carried the chance (registered reading luck-carrying; interaction +0.112, 95% interval [+0.097, +0.126]): readers named the worse tool in 11.6% of next runs with the lesson written from that failure, against 0.4% with an irrelevant item and 0.4% with the lesson written from a success. The effect was +0.042 where the log stated that failures are independent and +0.181 where it did not (descriptive). After a lucky success of the worse tool, the interaction was bounded below 0.10 (+0.002), a bound, not evidence of no harm. In exploratory readings, 6 endpoints carried the chance (up to +0.352); 5 were bounded below 0.10. In secondary comparisons, a three-sentence decision-quality note in the writing instruction lowered the worse-tool rate after a chance failure to 7.5%, and one instruction for both outcomes with a no-change option to 3.1%; neither met the registered harm-reduction rule at every such endpoint.
1. 问题与价值
这篇论文研究的是自改进智能体中的一个具体故障模式:智能体从自己运行的结果中写“教训”存入记忆,但运行结果本身有随机性。一个正确的决策可能因为偶然原因失败,一个错误的决策也可能因为运气好而成功。如果模型在写教训时把这种偶然结果当成决策质量的证据,教训就会把“运气”固化下来,污染后续决策。
作者把这个问题限定为一个可精确测量的环节:在决策质量、决策时可获得的信息、任务本身都固定不变的前提下,一个由偶然结果写出的教训,是否会让同一个模型的新会话在下一轮选择不同的工具。这个问题的价值在于,它不依赖任何对抗性攻击——没有人在记忆里投毒,没有恶意指令,只是模型自己把一次偶然失败写成了“应该换工具”的规则。受益者是所有构建自改进智能体记忆系统的人:如果这个效应存在,那么记忆写入指令的设计就需要在部署前经过“偶然结果”测试,而不是只测试正常成功或正常失败的情况。
2. 已有工作的不足
在本文之前,自改进记忆的代表性方法包括 Reflexion、ExpeL、Agent Workflow Memory、Dynamic Cheatsheet 和 ReasoningBank。这些系统都会从轨迹中提取经验或反思,存入记忆供后续读取。已有工作已经注意到自写记忆会出错:Ye et al. 发现记忆型自改进方法在重复运行和任务顺序变化下方差很大,评估器错误会产生虚假记忆;Asadolahi et al. 发现无标签记忆库中自评奖励会膨胀错误 episode;Wang et al. 发现 harness proposer 会在指令预设失败时修复从未发生过的失败;Zhu et al. 指出单智能体经验构建缺少参考分布来区分随机失败和 grounding 错误。
但这些工作要么是观察性的,要么关注的是评估器错误、奖励膨胀、对抗性投毒等机制。本文指出的缺口是:没有人把“偶然结果”单独隔离出来,在决策质量固定、信息固定、任务固定的条件下,测量一条由偶然结果写出的教训是否改变了后续决策。具体来说,已有工作没有做过这样的分解:一个随机分配的 outcome,经过一个模型写成教训,再由同一个模型的新会话在持有相同证据的条件下读取,只改变记忆条目本身,看选择是否改变。这是本文填补的测量空白。
3. 重建作者的思考路径
如果我从已有工作出发,面对“自写记忆可能被运气污染”这个问题,我首先会想到的是:直接拿一个现有的自改进系统,比如 ReasoningBank,跑很多次,看它会不会因为偶然失败而改变策略。但这个思路立刻撞上一个矛盾——在真实任务里,我无法把“决策质量”和“结果”分开。一个失败可能是因为决策真的错了,也可能是因为环境噪声。如果我不能固定决策质量,我就无法判断教训里的错误归因是运气造成的还是决策本身的问题。
于是我想到第二个方案:构造一个合成世界,让决策质量完全由我控制。我可以设计两个工具,一个明显更可靠,另一个明显更差,然后让一个脚本化的“上一轮运行”使用其中一个工具,并人为指定结果是成功还是失败。这样,决策质量和结果就完全解耦了。这个方案看起来可行,但接下来又出现一个新问题:我怎么知道读者改变选择是因为“教训”本身,而不是因为读者看到了“上一轮失败了”这个原始结果?如果读者只是对失败这个事实做出反应,那教训就没有独立的因果作用。
为了解决这个问题,我需要一个对照:让读者看到完全相同的日志和完全相同的“上一轮结果”,只改变记忆条目。如果记忆条目是一个无关事实,读者几乎不选差工具;如果记忆条目是从失败中写出的教训,读者选差工具的比例显著上升,那么差异就只能归因于教训。这就是差异中的差异设计。但这里还有一个隐患:如果读者本身对“失败”这个结果就有反应,那么即使没有教训,失败条件下的差工具选择率也可能不为零。所以还需要一个“交换教训”的对照——给读者看从成功结果写出的教训,但上一轮结果仍然是失败。如果读者仍然不选差工具,就说明教训的内容方向(从失败中写出的建议)才是关键,而不是教训这个格式本身。
再往下想,我意识到还有一个混淆因素:ReasoningBank 的失败指令本身会引导写作者“反思为什么失败”并提出“防止失败的策略”。这个指令预设了失败意味着有什么地方需要改变。如果效应主要来自这个指令的预设,那么修改指令应该能降低效应。所以我需要两个变体:一个在指令里加入“先判断决策在结果出现之前是否合理”的提示,另一个对成功和失败使用同一条指令并允许“不改变”。这样可以把“结果路由”这个设计选择单独拿出来检验。
与论文实际路径的差异:我猜的路径和论文实际走的路径在大方向上一致——合成世界、脚本化决策、差异中的差异、交换教训对照、指令变体。但论文实际设计中有一个我一开始没想到的关键点:世界分为 explicit 和 implicit 两类,explicit 世界的日志明确声明“失败是独立的一次性事件”,implicit 世界只给计数。这个 cue 来自开发阶段的观察——最强的写作者会直接复述日志里“失败独立”这句话作为理由。这说明作者在开发过程中发现了“日志是否明确排除失败作为信号”这个维度会显著影响效应大小,于是把它变成了一个世界级因子。我猜的路径里没有这一步,因为我没有预见到模型会对“失败是否可解释为当前故障”这个模糊性如此敏感。
4. 核心 intuition
可以用“医生看化验单”来类比。一个病人做了检查,某项指标偶然偏高,但医生知道这个指标有随机波动,而且病人的基础健康状况很好。如果医生在病历里写“该病人此项指标偏高,下次应换用另一种治疗方案”,下一位接诊的医生看到病历后,即使手上有完整的检查历史和统计证据,也可能被这条“教训”带偏,选择换方案。问题不在于下一位医生不会看数据,而在于病历里的那条结论已经替他把“偶然波动”解释成了“需要改变”的信号。
这个类比对应论文的机制:写教训的模型相当于第一位医生,它看到了结果(指标偏高),在失败指令的引导下倾向于把结果解释为“这个工具出了问题”,于是写出“下次换工具”的建议。读教训的模型相当于第二位医生,它手上有权威日志(完整检查历史),也知道上一轮结果,但记忆里的教训给了它一个现成的行动方案。教训之所以有效,不是因为它提供了新信息——它没有——而是因为它把“偶然失败”重新包装成了一个带有行动指向的规则,改变了读者对已有信息的加权方式。
5. 方法 pipeline 举例
假设有一个世界,任务是“导出夜间销售记录”,两个工具是
export_via_ellery和export_via_zanric。日志显示export_via_ellery在 240 次中成功 202 次,export_via_zanric在 240 次中成功 145 次。这是一个 explicit 世界,日志里写明“失败是独立的一次性事件”。第一步,脚本化上一轮运行:决策是“好决策”,即使用更可靠的
export_via_ellery。结果是“失败”,返回文本是ERROR 503: upstream temporarily unavailable。第二步,写教训:用 ReasoningBank 的失败指令,让模型从这个失败轨迹中提取记忆条目。模型可能写出类似附录 C 中 Qwen 3.8 Max 的教训:“当
export_via_ellery报错时,立即在同一轮内尝试export_via_zanric,不要直接结束任务。”这条教训被完整存入记忆。第三步,读者读取:一个新会话看到任务描述、两个工具、权威日志、上一轮结果(
export_via_ellery失败)、以及这条教训。它被问到“这一轮你会先调用哪个工具?”读者回答export_via_zanric,理由是“export_via_ellery刚刚失败了,存储的指导说应该立即切换到备用工具”。第四步,对照:同一个世界、同一个上一轮结果,但记忆条目换成无关事实(比如“该域名的备份窗口是每天凌晨两点”)。读者回答
export_via_ellery,理由是“export_via_ellery的历史成功率远高于export_via_zanric,且失败是独立事件”。第五步,计算:在这个世界上,失败条件下,教训臂选了差工具,中性臂选了优工具,所以该世界对 P2 的贡献是
1 - 0 = 1。在 256 个世界上取平均,得到面板 P2 为+0.112,区间[+0.097, +0.126]。6. 核心数学推导
核心量是 P2,即好决策下的结果-记忆交互效应。先定义符号:
Y[o, a]表示在上一轮结果报告为o(f表示失败,s表示成功)、记忆臂为a的条件下,读者选择差工具的概率。RB表示从该结果写出的教训臂,NEUTRAL表示无关事实臂。P2 的定义是:
P2 = (Y[f, RB] - Y[s, RB]) - (Y[f, NEUTRAL] - Y[s, NEUTRAL])拆开来看。第一项
Y[f, RB] - Y[s, RB]是教训臂内部的结果依赖性:当记忆是从失败写出的教训时,读者选差工具的概率,减去当记忆是从成功写出的教训时的概率。这个差值告诉我们,教训的内容方向是否随结果改变而改变。第二项Y[f, NEUTRAL] - Y[s, NEUTRAL]是中性臂内部的结果依赖性:当记忆是无关事实时,读者选差工具的概率在失败和成功条件下是否有差异。这个差值捕捉的是读者对“上一轮结果”本身的反应,与教训无关。P2 把这两个差值相减,得到的是“教训臂的结果依赖性超出中性臂结果依赖性的部分”。如果 P2 为正,说明教训臂的选择比中性臂更依赖于结果,且方向是失败后更倾向于选差工具。这就是“教训携带了运气”的操作化定义。
论文报告的面板 P2 是
+0.112,区间[+0.097, +0.126]。这个数可以这样理解:在失败条件下,教训臂与中性臂的差是11.6% - 0.4% = 11.2%,即0.112;在成功条件下,这个差是0.1% - 0.1% = 0。所以 P2 约等于0.112 - 0 = 0.112。这个公式在计算的是:在排除了读者对结果本身的反应之后,教训单独造成的、方向为“失败后选差工具”的选择偏移。7. 实验设计
数据集是 256 个合成世界,分布在 16 个领域,每个领域 16 个世界。每个世界有两个可互换工具,优工具成功率 0.80 到 0.93,差工具成功率 0.50 到 0.70,差距至少 0.15。128 个世界是 explicit(日志声明失败独立),128 个是 implicit(只给计数)。每个世界有四个脚本化上一轮运行:好决策或坏决策,交叉成功或失败。
基线是 NEUTRAL 臂,即一个真实的、无关的操作事实,格式与教训相同。此外还有 PLANTED 臂作为正控制,内容是直接命令“每次都用差工具”。主要指标是 P2 和 P3m,即差异中的差异。P2 针对好决策的偶然失败,P3m 针对坏决策的偶然成功。消融包括:RBD 指令(加入决策质量判断提示)和 N 指令(成功失败共用一条指令,允许不改变),以及 explicit 与 implicit 世界的分层分析。
实验能否支撑结论:对于“教训携带运气”这个核心主张,实验设计是充分的。差异中的差异排除了读者对结果本身的反应,交换教训臂排除了教训格式的影响,无关事实臂排除了记忆条目存在本身的影响。注册、冻结、时间戳和一次性分析流程增强了结果的可信度。但实验有一个明确的缺口:它不能分离“教训的建议内容”和“教训对失败的第二次报告”。读者总是同时看到上一轮结果行和教训,没有只看到教训而看不到结果行的条件,也没有只看到失败事实而无建议的记忆条目。所以无法确定效应是来自教训的“建议”还是来自教训对失败的“重复报告”。
8. take-aways
+0.112,区间[+0.097, +0.126]:从偶然失败写出的教训使读者在下一轮选差工具的比例从 0.4% 升到 11.6%,而同一教训在成功条件下只导致 0.2% 的差工具选择。+0.181,在 explicit 世界为+0.042,差值为0.181 - 0.042 = 0.139。日志是否明确声明失败独立,是效应大小的关键调节因素。+0.352,而 Claude Opus 5.5、Claude Sonnet 5.5 和 GPT-6.1 Sol 在 P2 使用的四个单元中从未选过差工具。+0.002,区间[-0.001, +0.005],robustly below 0.10。失败指令的“反思为什么失败”预设可能是这种不对称的来源。+0.072,N 下+0.027),且都未能在每个 luck-carrying 端点上满足 harm-reduction 规则。9. 最脆弱的假设
最脆弱的假设是:读者把记忆条目当作“来自早期运行的经验”来对待,而不是当作“与日志和上一轮结果行重复的信息”来对待。论文的规范性基准是一个理想读者,它知道匹配的教训没有增加任何观察,因此匹配对比的规范值应为零。但实际读者只被告知“记忆条目是从任务的早期运行中保存的”,没有被明确告知教训不包含日志之外的任何信息。
如果这个假设不成立——也就是说,如果读者实际上把教训当作一种“额外的、可能包含日志之外信息的信号”——那么 P2 为正就不一定意味着“运气被携带”,而可能只是读者在合理地对待一个它无法验证来源的记忆条目。论文没有直接测试读者是否认为教训可能包含日志之外的信息。它报告了一个相关证据:在 explicit 世界,日志明确排除了失败作为信号,但效应仍然存在(
+0.042),这说明即使在读者有充分理由忽略失败的情况下,教训仍然产生了影响。但这个证据是间接的,因为 explicit 世界的效应远小于 implicit 世界,说明读者确实在某种程度上依赖日志的明确性。论文承认它声称“没有机制”,因此这个假设的成立与否直接决定了“运气携带”这个解读是否成立,还是说效应只是“读者对记忆条目的合理加权”。10. 一周最小复现
目标:复现 P2 的核心效应,即从偶然失败写出的教训是否提高了差工具选择率。
步骤:
第一天,生成 64 个世界(估算:16 个领域 × 4 个世界,explicit 和 implicit 各半),用论文的生成器逻辑:两个工具,优工具成功率 0.80 到 0.93,差工具 0.50 到 0.70,差距至少 0.15。每个世界写四个脚本化上一轮运行。
第二天,选一个端点(建议选论文中效应最大的 Qwen 3.8 Max,或成本更低的 Gemini 3.8 Flash),用 ReasoningBank 的失败指令和成功指令为每个世界的好决策失败运行和好决策成功运行各写一条教训。64 个世界乘以 2 个结果,共 128 次写请求。
第三天到第五天,对每个世界的好决策失败条件和好决策成功条件,分别用 RB 臂和 NEUTRAL 臂跑读者。64 个世界乘以 2 个结果乘以 2 个臂,共 256 次读请求。NEUTRAL 臂用一个真实的无关操作事实。
第六天,计算 P2:对每个世界,计算
(Y[f, RB] - Y[s, RB]) - (Y[f, NEUTRAL] - Y[s, NEUTRAL]),然后对 64 个世界取平均。预期在 64 个世界上看到 P2 约+0.10到+0.35之间,具体取决于端点。如果使用 Gemini 3.8 Flash,论文报告的 P2 是+0.125,区间[+0.084, +0.166]。第七天,做一个简化版的 N 指令对照:用同一条指令处理成功和失败,加入“如果不需要改变就说出来”的句子,重跑失败条件下的读者,看差工具率是否降到接近 NEUTRAL 水平。论文报告 N 下面板失败后差工具率为 3.1%。
成本估算:写请求 128 次加读请求 256 次,加上 N 指令的额外 64 次读请求,总计约 448 次调用(估算:128+256+64)。按论文的读者平均成本约 298.21 美元除以 90,106 次读者请求,约每次 0.0033 美元,448 次调用约 1.5 美元。即使加上写请求,总成本应在 10 美元以内。24GB 显卡完全够用,因为所有调用都是 API 调用,不需要本地推理。
11. 反例设计
设计一个实验,如果成功就能推翻本文的核心主张“教训携带运气”。
核心主张是:从偶然失败写出的教训会改变读者的工具选择,即使读者持有权威日志且日志明确支持优工具。要推翻这个主张,需要证明效应不是来自教训的“建议内容”,而是来自教训对失败的“重复报告”。
实验设计:在现有的四个记忆臂之外,增加一个 FACT 臂。FACT 臂的内容是一个与教训格式完全相同的记忆条目,但它只陈述失败事实,不包含任何建议或解释。例如:“上一轮运行中,
export_via_ellery返回了ERROR 503: upstream temporarily unavailable。该运行已结束,不会重复。”这个条目与 RB 教训的区别在于:它重复了失败,但没有说“应该换工具”。判据:如果 FACT 臂在失败条件下的差工具选择率与 RB 臂无显著差异,且两者都显著高于 NEUTRAL 臂,那么本文的效应就不能归因于“教训的建议”,而应归因于“失败被第二次报告”。这会推翻论文对“教训携带运气”的解读,因为效应将不依赖于写作者对失败的归因或建议,而只依赖于失败事实的重复出现。反之,如果 FACT 臂的差工具率接近 NEUTRAL 臂而远低于 RB 臂,则支持论文的解读,即教训的建议内容才是效应的载体。
论文自己在 Limitations 中明确指出了这个缺口:“没有记忆条目在没有教训的情况下重述失败,所以研究无法分离教训的建议与失败的第二次报告。”并说“一个以相同格式记录同一失败为事实、不含解释或建议的记忆条目,是最直接的下一步对照。”这说明作者意识到了这个反例设计,但未在本文中执行。
12. 落地判断
对于“抢占式 GPU 自托管 27B 模型做多智能体脚手架”这个场景,本文的结论有直接的相关性,但需要谨慎迁移。
怎么用:如果你的多智能体系统中有任何组件在从运行结果写教训或经验,并且这些运行结果有随机性(抢占式 GPU 环境下任务可能因为节点被抢占而失败,这与论文中的 transient failure 高度相似),那么你应该在部署前用论文的测试范式检验你的记忆写入指令。具体做法是:构造一个类似的双工具选择场景,固定决策质量,人为分配成功或失败结果,看你的 27B 模型写出的教训是否会让新会话改变选择。论文的测试包是公开的,可以直接适配。
成本量级:论文的完整测试用了 33,792 次写请求和 90,106 次读请求,花费 543.41 美元。但你的场景不需要 11 个端点,只需要测试你自己的 27B 模型。按第 10 项的最小复现方案,64 个世界、448 次调用,成本在 10 美元以内。如果自托管,API 成本为零,只有电费和算力时间。
最大的坑:论文发现效应在 implicit 世界远大于 explicit 世界(
+0.181对+0.042)。在抢占式 GPU 环境中,你的日志很可能不会明确写“这次失败是独立的一次性事件”——因为抢占本身就是一种系统性的、非独立的失败模式。这意味着你的场景更接近 implicit 世界,效应可能更大。更危险的是,抢占失败确实可能携带信号(比如某个节点最近不稳定),所以你的模型写出的“换节点”教训有时可能是对的。论文的测试只覆盖了“结果不携带信号”的情况,没有测试“结果确实携带信号”时指令变体是否会抑制真正的学习。如果你的 27B 模型在抢占环境下写教训,你需要额外测试:当失败确实指示节点问题时,加入决策质量判断提示的指令是否仍然能让模型学到该换节点。这是论文明确列为 open 的问题。