ReTerm:自改进终端智能体的错误恢复训练 ReTerm: Recovery Training for Self-Improving Terminal Agents
让终端智能体从自身失败轨迹学习恢复,SFT冷启动加在线RL实现自我改进。
前置知识
终端智能体(Terminal Agent)
以 LLM 为核心、通过 Bash 等 shell 接口与 Linux 环境多轮交互完成编程任务的系统。每轮模型输出思考与一条命令,环境返回观察,循环往复直到调用 done 或预算耗尽。Codex、Claude Code 是代表产品,Terminal-Bench 2.0、OpenThoughts-TBLite 是标准评测基准。
本文的训练对象就是这类智能体,所有失败、恢复、验证都发生在命令—观察循环里,理解这一交互形态才能理解恢复任务长什么样。
SFT 冷启动
在强化学习之前,先用高质量示范轨迹对模型做监督微调,让策略具备基本的输出格式与行为先验,否则 RL 阶段采样不到有效动作。示范轨迹通常由更强的教师模型生成,训练时常配合 loss mask,只对教师生成的 token 计算损失。
ReTerm 的第一阶段就是用教师续写的约 1 万条恢复轨迹做 SFT(公式 1),消融显示它把 Terminal-Bench 2.0 从 20.2% 提到 25.8%,是 ReTerm-GRPO 的初始化起点。
GRPO(组相对策略优化)
一种在线 RL 算法:对同一任务采样 $G$ 条 rollout,用组内奖励归一化计算优势 $\hat{A}_i=(R_i-\text{mean}(R_j))/(\text{std}(R_j)+\delta)$,从而省去价值网络,再套 PPO 式 clip 目标更新策略,是目前 LLM 可验证奖励训练的主流方法之一。
ReTerm-GRPO 是在 GRPO 之上的扩展,只有读懂组相对优势、clip 比率这些符号,才能看懂公式 4–6 中原始任务组与恢复任务组如何联合优化。
任务验证器与 Pass@1
验证器 $V_x(s)$ 是自动判定任务终态是否达标的程序(如运行隐藏测试);Pass@1 指单次独立尝试的通过率,是 Terminal-Bench 2.0、SWE-bench Verified 等智能体基准的标准指标,本文所有表格中的数字均为 Pass@1(%)。
恢复轨迹的过滤标准(必须通过验证器)和 RL 的奖励信号 $R_i=V_x(s_i)$ 都由验证器给出,它是整条训练管线的裁判。
虚拟机快照(VM Snapshot)
把虚拟机某一时刻的完整运行状态(文件系统、内存、进程)保存下来,之后可恢复到该状态重新执行。本文在每次尝试结束后先暂停虚拟机、打快照,再恢复运行去执行任务验证器。
这一设计隔离了验证器对环境的改动,保证教师续写和 RL 分叉面对的是纯粹由智能体造成的失败现场,而非被测试过程污染的状态,是数据质量的关键前提。
研究动机
终端智能体在与 shell 环境的长程交互中频繁出错,且缺乏恢复能力:一条命令安装失败、一次误诊根因,就可能让智能体沿错误方向一路走到黑。论文开篇的 rstan-to-pystan 例子非常典型:模型执行 pip install pystan 后 import 仍报 No module named 'pystan',标准 GRPO 训练出的模型发现 dist-packages 里存在 stan/ 目录后,反而反复尝试 import pystan、卸载重装,在错误方向上死循环直到预算耗尽。基座 Qwen3.5-9B 在 Terminal-Bench 2.0 上 Pass@1 仅 20.2%,大量失败正源于无法从错误中恢复。现有补救方案 TermiGen 通过向轨迹主动注入人工构造的错误再训练恢复,但这些『人造错误』与智能体真实执行产生的错误存在分布偏移,而且只停留在 SFT 阶段,强化学习对恢复能力的潜力完全未被探索。
本文的目标是本文的目标是让终端智能体学会从『自己产生的失败』中恢复,实现真正的自改进。具体拆成三件事:其一,构建 ReTerm-10K 数据集——从基座模型真实失败的轨迹与遗留环境状态出发,由更强的教师模型续写恢复过程,经验证器、格式、合规、效率四步质量过滤得到约 1 万条高质量恢复轨迹,用于 SFT 冷启动;其二,提出 ReTerm-GRPO 在线强化学习算法,从当前策略自己产生的失败状态分叉出多条独立恢复尝试,用验证器结果做组相对优化,让恢复能力与解题能力共同进化;其三,在 Terminal-Bench 2.0、OpenThoughts-TBLite、SWE-bench Verified 等七个基准上验证有效性,并跨 harness、跨任务域检验泛化性。
与已有工作不同的是,已有工作的切入角度要么是『从干净环境解题』(主流轨迹合成与 RL 训练都默认环境初始状态无污染),要么是『人工注入错误再学恢复』(TermiGen,仅 SFT)。本文的独特之处在于坚持『错误必须来自智能体自身』:SFT 阶段的失败样本由基座模型真实执行产生,RL 阶段的失败状态由 evolving policy 在训练中实时生成并动态更新,从机制上保证训练的错误分布与推理时的错误分布相匹配。配套设计的恢复任务队列把跨训练步的失败任务缓存起来,解决了单个训练批次失败样本不足的问题,使『从自身失败学习』在工程上可扩展。这把自我纠错文献从静态推理任务推进到了动作会持久改变环境状态的交互式终端场景。
核心方法
整体思路:既然终端任务失败在所难免,就干脆把失败变成训练资源。直觉上,一个会修错的智能体需要在遗留的脏环境里完成四步——检查现场、诊断病因、实施修复、验证结果。技术路线分两阶段。第一阶段构造 ReTerm-10K:在虚拟机容器中执行基座模型于 TMax-15K 任务上的多次尝试,在运行验证器前先做 VM 快照以隔离验证器改动,保留失败尝试的完整交互历史 $h_f$ 与环境状态 $s_f$;然后恢复快照,让教师模型 DeepSeek-V4-Pro 仅凭任务指令和交互历史推断问题并续写恢复;最后按通过验证器、格式、合规、效率四个维度过滤,得到约 1 万条轨迹做 SFT,损失只算在教师生成的 token 上:$$\mathcal{L}_{SFT} = -\mathbb{E}_{(x,h_f,r,y)\sim\mathcal{D}_{ReTerm}}\Big[\sum_{t\in\mathcal{A}(y)}\log \pi_\theta(y_t\mid x,h_f,r,y_{<t})\Big]$$ 第二阶段 ReTerm-GRPO 从 SFT 检查点出发,把当前策略训练中新产生的失败实时转成恢复任务做在线 RL,实现错误恢复与任务求解的联合优化。
核心创新是把『从失败状态分叉』作为 RL 的训练单元,并与标准任务联合优化。对每个原始任务组,策略从初始状态 $s_0$ 采样 $G$ 条 rollout:$\tau_i^O\sim\pi_{\theta_{old}}(\cdot\mid x,s_0)$,奖励 $R_i^O=V_x(s_i^O)$;只要组内存在失败 rollout,就取一条,保留其历史 $h_f$ 与终态 $s_f$,构造恢复任务 $(x,h_f,s_f)$ 存入队列。恢复任务同样采 $G$ 条独立 rollout $\tau_i^R\sim\pi_{\theta_{old}}(\cdot\mid x,h_f,r,s_f)$,用同一验证器打分后在组内归一化:$\hat{A}_{g,i}^c=\frac{R_{g,i}^c-\text{mean}(R_{g,j}^c)}{\text{std}(R_{g,j}^c)+\delta}$。与 TermiGen 的本质区别:错误不是人工构造的,而是策略自己犯的,且随训练动态更新;与标准 GRPO 的本质区别:显式把『恢复』作为第二类任务组参与优化,$\mathcal{J}_{ReTerm}(\theta)=\frac{M_O}{M_O+M_R}\sum_g \mathcal{J}_g^O(\theta)+\frac{M_R}{M_O+M_R}\sum_g \mathcal{J}_g^R(\theta)$,使解错与修错能力共同进化而非此消彼长。
方法步骤详情
完整流程六步。第 1 步失败采集:基座模型(Qwen3.5-9B)对 TMax-15K 中每个任务在虚拟机容器内采样多次尝试,记录含推理内容、命令、观察的完整历史;每次尝试结束时暂停 VM、打快照、恢复运行后再跑验证器,只保留失败尝试的快照与历史,输入输出分别是『任务+初始状态』与『失败快照+失败历史』。第 2 步恢复生成:恢复快照后,教师模型 DeepSeek-V4-Pro 只被告知『上次尝试失败了』,拿不到隐藏测试的任何反馈,必须遵循『检查继承状态→诊断→规划并执行修复→验证』的恢复工作流,输出候选恢复轨迹。第 3 步四维过滤:验证器过滤(必须通过)与格式过滤(剔除畸形消息/工具调用)用确定性规则;合规过滤(违反任务约束的动作)与效率过滤(重复无效命令的死循环)先规则标记、再由 DeepSeek-V4.1-Flash 逐例复核,最终留下约 1 万条高质量轨迹。第 4 步 SFT:输入为任务指令 $x$、失败历史 $h_f$ 与精简恢复提示 $r$(训练时刻意去掉生成时的详细工作流引导),损失仅覆盖教师 token,用 6K 条轨迹训练(AdamW,全局 batch 16,学习率 $5\times10^{-6}$)。第 5 步 ReTerm-GRPO:每次更新采 8 个原始任务组加 2 个恢复任务组,每组 16 条 rollout,全局 batch 160,学习率 $5\times10^{-7}$,最大生成 8192 token、65k 上下文、至多 32 轮交互,训练在 16 张 A100 80GB 上进行。第 6 步队列维护:新恢复任务插入队首优先采样,超过容量 $K$ 时淘汰最旧任务,兼顾新鲜度与样本效率。
技术新颖性
技术新颖性有四点。一是错误分布匹配:SFT 与 RL 的失败样本全部来自智能体自身执行,避免了 TermiGen 人工注入错误的分布偏移,这是『self-improving(自改进)』一词的准确含义——训练信号随策略共同演化。二是失败状态的可复现保存:验证前打 VM 快照的设计隔离了验证器对环境的改动,保证恢复训练面对的是纯失败现场,这个细节多数 agent RL 工作并未处理,却直接决定数据质量。三是恢复任务队列:以『插队 + FIFO 淘汰』在容量约束下同时缓解『单批失败样本不足』与『旧策略失败分布过时』两个矛盾,无需为收集失败而额外 rollout。四是把自纠错训练从静态推理(SCoRe 类工作)拓展到动作会持久改变环境的终端场景,并证明恢复目标与任务目标可以联合优化而不互相拖累——Figure 6 中原始任务奖励在训练全程保持稳定上升即是直接证据。
实验结果
核心结果分五块。主实验(Table 1):ReTerm-9B 在 OpenThoughts-TBLite 达 60.6% Pass@1(基座 44.2%,+16.4 分),Terminal-Bench 2.0 达 34.8%(基座 20.2%,+14.6 分),SWE-bench Verified 达 58.4%(基座 45.2%,+13.2 分);全面超过同规模的 TMax-9B(57.2/27.2/53.5)与 Socratic-SWE(SWE-bench 50.4),且以 9B 参数超过多个 32B 专用智能体——Terminal-World-32B(TB2.0 仅 31.5)、OpenThinkerAgent-32B(SWE 54.0),并大幅领先同样做错误纠正训练的 TermiGen-32B(TB2.0 19.3、SWE 21.4),直接支持『恢复训练优于错误注入 SFT』的论点。跨 harness(Table 2):同一批 TB2.0 任务下,Terminus-2、mini-SWE-agent、OpenHands 三种外部 harness 分别 +10.1、+6.7、+12.4 分,说明能力不绑定训练时的交互协议。跨域(Table 3):AIME 2025 +20.0 分(至 93.3)、AIME 2024 +10.0 分(86.7)、SpreadsheetBench Verified +11.0 分(48.8)、Aider Polyglot +3.1 分(20.4)。消融(Table 4):Base 20.2 → SFT 25.8 → GRPO 28.0 → ReTerm-GRPO 34.8,恢复导向 RL 比标准 GRPO 高 6.8 分。错误分析(Figure 5):ReTerm-GRPO 在规划、工具使用、实现、验证、资源管理全部五类错误上恢复率均高于基座与标准 GRPO,但除工具使用错误外其余类别均不超过 32%。训练曲线(Figure 6):恢复任务组 reward 提升幅度更大,原始任务组 reward 同步上升且保持稳定。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| OpenThoughts-TBLite(终端任务) | Pass@1 (%) | 60.6 | 基座 Qwen3.5-9B 44.2;最强同规模 TMax-9B 57.2 | +16.4(对基座) |
| Terminal-Bench 2.0(终端任务) | Pass@1 (%) | 34.8 | 基座 Qwen3.5-9B 20.2;标准 GRPO 28.0;TermiGen-32B 19.3 | +14.6(对基座),+6.8(对标准 GRPO) |
| SWE-bench Verified(真实 GitHub 修 bug) | Pass@1 (%) | 58.4 | 基座 Qwen3.5-9B 45.2;Socratic-SWE(同基座)50.4;OpenThinkerAgent-32B 54.0 | +13.2(对基座) |
| AIME 2025(数学推理,域外) | Pass@1 (%) | 93.3 | 基座 Qwen3.5-9B 73.3 | +20.0 |
| SpreadsheetBench Verified(表格操作,域外) | Pass@1 (%) | 48.8 | 基座 Qwen3.5-9B 37.8 | +11.0 |
| Terminal-Bench 2.0(OpenHands harness) | Pass@1 (%) | 28.1 | 基座 Qwen3.5-9B 15.7 | +12.4 |
局限与改进
作者承认的局限:错误分析显示除工具使用错误外,ReTerm-GRPO 对其余四类错误(规划、实现、验证、资源管理)的恢复率都不超过 32%,终端智能体面对大多数错误仍然无法挽回,恢复能力远未解决。我的补充观察:其一,『自改进』并不彻底——冷启动数据依赖更强的教师 DeepSeek-V4-Pro 续写,数据构造环节本质仍是蒸馏而非纯自我生成;其二,奖励只有验证器的 0/1 信号,恢复任务内部『诊断对没对』与『修得好不好』没有过程级信用分配,稀疏信号可能限制上限;其三,恢复任务队列的 FIFO 与容量 $K$ 是启发式设计,旧任务与当前策略失败分布的错配只能缓解不能消除,且论文未对 $K$ 做消融;其四,评测中多数对比模型的数字取自其原论文,harness 不完全一致,自研 harness +14.6 与 mini-SWE-agent 下 +6.7 的落差也提示训练收益对评测协议敏感;其五,仅在 9B 规模验证,与闭源前沿差距仍大(GPT-5.5 在 TB2.0 达 82.7),方法是否随规模缩放未知;其六,错误类型判定依赖 LLM judge(DeepSeek-V4.1-Flash)加人工抽检,分类噪声未量化。
独立分析的弱点
独立分析四个弱点并给出改进方向。弱点一:教师依赖造成『冷启动悖论』——想自改进却先要一个更强的老师,对没有强教师 API 的小团队或更小模型不友好。改进方向:采用 STaR 式拒绝采样自举,只用自己通过验证的恢复轨迹迭代自举,或 weak-to-strong 逐级提升。弱点二:稀疏二值奖励无法区分『侥幸修好』与『系统性恢复』,诊断质量完全没有信号。改进方向:为恢复组加入过程奖励,例如自动检测诊断结论与后续命令的因果一致性,或用教师轨迹做 DPO 式偏好对照。弱点三:恢复训练可能诱发『过度怀疑』——模型学会对本来正确的状态反复检查,导致轮次与 token 开销上升,而论文未报告恢复训练后的效率指标(平均轮次/token 数),这一隐性代价无法排除。改进方向:在奖励中加入效率惩罚项,或对『无错而修』的样本做负向训练。弱点四:失败来源限于 TMax-15K 的任务分布与 65k 上下文、32 轮交互预算,数百轮量级的长程任务中资源管理类错误覆盖不足——而这类错误恰恰是恢复率最低的类别之一。改进方向:引入长程任务池与自适应交互预算,定向扩充资源管理类失败样本。
未来方向
作者提出的方向:明言恢复能力仍有巨大提升空间(四类错误恢复率不超过 32%),后续应继续提高跨错误类别的恢复率;代码、数据、模型全部开源以支持社区沿此路线迭代。基于本文成果可延伸的研究:一是过程级恢复奖励与错误类型条件化课程,把 Figure 5 揭示的短板(规划、验证、资源管理错误)作为重点训练对象;二是把恢复任务队列推广为带优先级的持续学习缓存,按『与当前策略失败分布的距离』采样,理论上可连接到持续强化学习的分布漂移分析;三是与环境理解类方法(如 ECHO 的观测预测目标)结合,让智能体先预测动作后果再执行,把事后恢复提前为事前规避;四是跨具身迁移:把终端恢复训练范式搬到 GUI 智能体、数据库运维 agent 等同样『动作改变状态』的场景;五是规模律研究:在 4B 到 70B 上重复本配方,检验恢复能力随模型规模的 scaling 行为;六是探索 AIME 2025 上 +20 分这一意外增益的机理,搞清恢复训练为何能反哺纯推理能力。
复现评估
复现条件较好。开源情况:代码、ReTerm-10K 数据与 ReTerm-9B 权重均在 GitHub(twothsnd/ReTerm)发布;附录给出系统提示词、恢复提示词、教师恢复工作流以及合规/效率审查的完整 prompt,数据构造全流程可审计。数据与基座均可公开获得:任务来自 TMax-15K,基座为开源 Qwen3.5-9B,七个评测基准全部公开;教师需调用 DeepSeek-V4-Pro API,过滤复核需 DeepSeek-V4.1-Flash,会产生一定的 API 成本。算力:16 张 A100 80GB 做全参数 SFT 与 GRPO,属中大型但并非不可及的配置;真正的门槛在工程侧——多轮 agent rollout 配合 VM 快照的 RL 基础设施需要较强的系统工程能力。超参披露完整:学习率、batch 组成、每组 rollout 数、65k 上下文、32 轮上限、评测温度 1.0/seed 0 均已给出。综合评估:拥有 8 卡级 A100 集群与 agent RL 框架经验的团队可在数周内复现主结果;只想使用模型与数据则零门槛。
论文图表
以 rstan-to-pystan 任务(把 R 脚本转成 PyStan 3.10.0 的 Python 脚本)为例的推理对比:执行 pip install pystan 后 import 报 No module named 'pystan',标准 GRPO 训练的模型发现 dist-packages 里存在 stan/ 目录后反复尝试 import pystan、查看包内容、卸载重装,认定『包文件在 stan/ 不在 pystan/』却在错误方向上打转直至卡死;ReTerm-GRPO 训练的模型则先 pip list 确认安装状态,再检查实际安装路径,最后执行 pip uninstall pystan && pip install pystan 完成恢复并成功导入。
这是全文的『行为对照实验』,直观定义了什么叫『更强的恢复策略』,也让读者第一眼看到标准 RL 训练与恢复训练在真实失败场景下的本质差异,是理解动机与效果的钥匙。
三个核心智能体基准上的大对比表,分三档:闭源模型(GPT-5 mini 38.2、Claude Sonnet 4.5 51.0、GPT-5.5 82.7 等)、开源大模型(GLM-5 744B 56.2、MiniMax-M2.5 51.7 等)、开源小模型(Qwen3.5-9B 20.2、TMax-9B 27.2、TermiGen-32B 19.3 等)。ReTerm-9B 取得 60.6/34.8/58.4,在三个基准上全面超过同规模 TMax-9B 与 Socratic-SWE,并以 9B 参数超过 Terminal-World-32B(31.5)、OpenThinkerAgent-32B(SWE 54.0)等多个 32B 专用智能体。
主结果表,支撑『9B 小模型凭恢复训练打败 32B 专用智能体』这一最有冲击力的卖点,也把与 TermiGen 的对比量化为 15.5 分的差距。
四种训练设置的消融:Base(原始 Qwen3.5-9B)20.2,SFT(仅监督微调)25.8,GRPO(标准强化学习)28.0,ReTerm-GRPO(本文方法)34.8。每个阶段都有明确增益,恢复导向 RL 比标准 GRPO 多 6.8 分。
拆解两阶段训练各自的贡献,量化『恢复导向 RL 优于标准 GRPO』这一关键结论,是证明方法设计必要性(而非仅靠 SFT 数据量)的核心实验。