一个任务 5 美分:RST 用"递归自我加难"把终端智能体数据的价格打下来了

训练终端智能体(Terminal Agent)最缺的是什么?不是模型,不是算力,是数据——准确说,是那种"指令、环境、参考解、验证器四者严丝合缝"的高质量长程任务。这种任务人工写一个,动辄几百上千美元。上周看到的这篇 RST 论文给了我一个挺惊艳的解法:让大模型把已验证的任务递归地加难,每轮扩展参考解、同步重写验证器和指令,沙箱验证通过后再拿去当下一轮的种子。15 轮下来,从 639 个种子滚出 37,484 个已验证任务,平均每个任务成本约 0.05 美元——比人工便宜了三到四个数量级。更关键的是,DeepSeek-V4-Pro 在第 1 轮任务上 pass@4 还有 90%,到第 15 轮只剩 2.5%,难度爬坡没有见顶的迹象。说实话,看到"递归 15 轮产量和通过率都不掉"这组数据时,我愣了一下——这和直觉中"合成数据滚几轮就崩"的经验完全相反。

核心摘要

这篇论文解决的是终端智能体训练数据的"不可能三角":任务要长程、要可执行验证、还要便宜,三者很难同时满足。作者提出 Recursive Synthetic Terminal Tasks(RST)——不是从零生成任务,而是从已验证的种子任务出发,每轮让模型扩展参考解(solve.sh 更长、更复杂),再把验证器和公开指令重新对齐到新解上,在全新沙箱里跑通才算数,通过的任务继续当种子。15 轮递归产出 37,484 个任务和 327,189 条轨迹,中位参考解从 67 行涨到 374 行。用这些轨迹做 SFT,Qwen3.5-27B 和 122B-A10B 在三个终端基准上最高涨 10 个点;叠加 agentic PPO 后 Qwen3.5-27B 相对基线提升 20.0%–41.2%。我的判断:这不是底层算法突破,而是一套极其扎实的数据工程闭环,但它踩中的痛点是真的——如果你在做 agent 训练,这套"递归验证合成"的范式值得认真抄作业。

📖 论文信息

  • 标题:Recursive Synthesis for Long-Horizon Terminal Tasks
  • 作者:Zhongzhi Li, Yucheng Shi, Zongxia Li, Ruhan Wang, Anhao Li, Zixun Huang, Junyao Yang, Lei Ke, Ninghao Liu, Haitao Mi, Leowei Liang
  • 发表:2026 年 8 月 5 日提交,arXiv:2608.05466(cs.AI / cs.LG)
  • 链接:https://arxiv.org/abs/2608.05466

🎯 为什么终端任务数据这么难造?

先说说这个问题为什么值钱。

一个合格的终端任务不是一道题,而是一整套"可执行的契约"。按论文的定义,它包含六个部分:instruction.md(公开任务描述)、task.toml(运行时元数据)、environment/Dockerfile(初始环境)、solution/solve.sh(参考解)、tests/test.shtests/test_state.py(私有验证器)。

你想想看,这四个核心组件——指令、环境、参考解、验证器——必须互相咬合:验证器检查的每个状态,参考解必须能产生;参考解依赖的每个工具,环境必须装好;指令里说的每个要求,验证器必须能查。人工写这种任务,作者报价是"几百到几千美元一个"。这个价格我是信的,之前接触过类似的 agent 评测集构建,光是一个"验证器不能引入 agent 看不见的隐藏要求"这条,就能让标注团队返工无数轮。

那直接让大模型从零生成呢?论文的结论是不行:LLM 一次性生成整套任务时,这些依赖关系很容易断掉——参考解跑不通、验证器查了指令里没说的东西、环境里缺依赖,各种花式翻车。

RST 的思路就此浮现:不要从零造,从已验证的任务上"长"出来。既然一个已验证任务的内部一致性已经是对的,那就在它的基础上加一步、再加一步,每次加法都重新验证。这个思路其实很像软件工程里的"增量开发 + 持续集成",只不过被用在了训练数据合成上。


🏗️ RST 框架:一个会自我加难的飞轮

先看整体循环,这是全文最核心的一张图:

图2:RST 的递归任务合成与智能体训练循环

图2:RST 整体框架。种子任务和环境进入合成 Agent,产出更难的候选任务(扩展解法路径 + 对齐验证器 + 对齐指令),沙箱验证通过后进入已验证任务池;无法求解的直接丢弃。任务池同时服务两个用途:作为 RL 的任务池,以及收集成功 rollout 作为 SFT 轨迹。训练出的更强 Agent 反过来又能合成更难的任务——这就是"Recursive Self-Improvement via Training"的含义。

这个飞轮的每一圈,具体到一轮合成内部,又拆成四个阶段:

图3:单轮递归合成的详细流水线

图3:一轮递归合成的完整流水线。Seed Task(含全部六个文件)进入 Plan & Rewrite 阶段:① 选择改写目标(更长 hor­izon、更多状态依赖)② 扩展解法路径 ③ 增加更严格的断言 ④ 更新指令与环境。然后进入两阶段验证——本地静态检查(丢掉表面化或畸形的改写)+ 沙箱中跑"参考解 vs 验证器"(任务必须真的可解,失败则从日志修复重试)。通过者成为 Accepted Task,附 provenance.json 谱系记录,其中一个多样化子集会重新播种下一轮。下方的"Hardening tasks"小图很直观:改写前是"A→B→C 三步 + 3 个简单断言",改写后变成六步链条,断言更丰富、目标带约束。

有几个设计细节我觉得值得展开聊。

改写的起点:40 个操作符,5 个家族

改写不是让模型自由发挥。RST 预定义了 40 个 rewrite operator,分成五个家族:配置与控制状态、数据/Manifest/Schema 状态、文件系统与资源绑定、构建/缓存/产物状态、运行时/工具/诊断。选操作符时会综合局部兼容性得分、家族均衡项和逆频率惩罚——说到底就是防止模型总挑自己最顺手的那几个改法。

改写计划本身也有硬门槛:必须定义新的行为要求、参考解的对应改动、验证器要查的中间与最终状态、agent 可见的信息范围,还要明确指出"哪些捷径必须被验证器拒绝"。计划如果出现这三种情况直接拒掉:只做表面改动、加了与可执行流程无关的检查、把必要信息只放进私有测试里。

最后这条特别重要。它对应任务接受的两大条件:

  1. Oracle validity:参考解必须在全新沙箱里通过私有验证器(证明任务可解);
  2. Contract validity:验证器检查的每一项要求,必须在公开指令里写明,或者能从工作区推断出来。

第二条防的就是合成数据的经典坑——验证器偷偷查了 agent 根本看不到的东西,模型怎么努力都拿不到分,这种任务拿来训练只会教模型瞎猜。

防崩溃的缰绳:多样性配额

递归合成最大的风险是什么?谱系坍缩——少数几个"好改"的父任务疯狂繁殖,几代之后整个池子全是近亲。RST 的对策是硬性配额:标准配置每轮目标 1,000 个种子,单个父任务最多 4 个后代,单个类别最多 160 个,单个改写家族最多 320 个,单个来源批次最多 280 个。谱系名超过 96 字符还要压缩,manifest 里至少 80% 的记录必须能追溯回 bootstrap 谱系,检查不过就终止这一轮。

这套配额机制看着琐碎,但我认为它是整个系统能滚 15 轮不崩的真正功臣之一。后面多样性指标部分会看到效果。

种子里还有两个细节

种子来源是 TerminalWorld 的 639 个已验证任务(从真实交互记录构建),原始类别合并成 19 个分析域。第 1 轮从这 639 个种子产出 2,820 个接受任务,之后每轮从前一轮选种子继续加难,15 轮累积 37,484 个。


🧪 实验:难度真的在涨吗?产量真的不掉吗?

合成数据论文我最关心两个问题:一是滚出来的东西是不是真的越来越难(而不是换皮重复),二是产量会不会滚几轮就衰减。这篇论文对这两个问题的回答都挺硬。

难度爬坡:pass@4 从 90% 干到 2.5%

先看最直接的证据。作者拿 DeepSeek-V4-Pro 和 GPT-5.6-sol 两个强 solver,在各轮任务上做固定配置的评测:

图1:递归轮次中两个 solver 的通过率与轨迹长度变化

图1:DeepSeek-V4-Pro(上排)和 GPT-5.6-sol(下排)在 Seed→R15 上的表现,三列分别是 partial credit ≥ 70%、80%、90% 三档阈值。红色曲线是通过率,蓝色柱子是通过任务的轨迹长度。两个模型、三档阈值下通过率全部单调下降——以最严格的 90% 阈值看,DeepSeek-V4-Pro 从 72.0% 掉到 4.0%,GPT-5.6-sol 从 72.2% 掉到 7.0%。与此同时成功轨迹越来越长:R15 时 DeepSeek-V4-Pro 的通过轨迹中位 129–163 步,GPT-5.6-sol 在 70% 阈值下达 170 步。虚线标出 TB2、Tmax、LHTB 三个基准的轨迹长度水位,可以直观看到 R15 任务已经远超现有基准的长度。

pass@4 的逐轮曲线更夸张:

图12:DeepSeek-V4-Pro pass@4 随轮次单调下降

图12:DeepSeek-V4-Pro 在逐轮匹配子集上的 pass@4——R1 还有 90%,R6 掉到 20%,R7 之后不超过 15%,R15 只剩 2.5%。36 倍的衰减。

部分分(partial credit,验证器检查通过的比例)也同步崩塌:任务级均值从 R1 的 0.970 掉到 R15 的 0.170;失败尝试里"差一点就过"(≥75% 检查通过)的比例从 86.4% 掉到 1.2%;通过检查不足一半的任务占比从 0% 涨到 97.5%。到 R15,模型不是"差一点点",是实打实做不动了。

结构指标:解在膨胀,指令却几乎没变

图7:八项任务结构指标的分位数趋势

图7:R1→R15 八项结构指标的分位数曲线(中位数实线、p25–p75 阴影、p90 虚线)。解法行数、命令数、CLI 工具数、控制流、断言数、文件操作全线稳定上扬,只有指令长度(Instruction length)爬得很缓。

具体数字(R1 → R15 中位数):

指标 R1 R15 倍数
参考解行数 67 374 5.6×
执行命令数 40 244 6.1×
唯一 CLI 工具数 17 71 4.2×
控制流操作 6 45 7.5×
文件操作 2 14
验证器断言数 17 57 3.4×
指令词数 85 122 仅 1.4×

注意最后一行。可执行工作量膨胀了五六倍,指令长度只多了四成——任务变难不是因为题面变啰嗦,而是单位指令背后的可执行密度在飙升。这正是"长程"该有的样子:指令还是那几句话,但要干的事越来越多、状态依赖越来越深。父子任务的中位增量是 +22 行解、+18 条命令、+3 个断言,正向增量占比 78%/77%/65%——每轮的"加难"是实打实的,不是换个写法凑数。

产量与质量:15 轮不见衰减

这是我最意外的一组数据:

图6:每千次种子尝试的通过产量与候选通过率

图6:左图是每 1,000 次种子尝试的通过产量(R1 = 551.6,R15 = 530.0,全程在 498.2–572.2 之间波动);右图是候选通过率(74.5%–81.5%,R1 为 77.5%,R15 为 78.0%)。两条线都是平的。

平的。任务难度涨了 36 倍,合成成功率居然一点没掉。我的理解是:递归合成里生成模型面对的从来不是"造一个 R15 难度的任务",而是"给 R14 的任务加一步"——每一步的局部难度对模型来说都差不多。这大概就是递归范式相对一次性生成最大的优势:把指数级的难度增长摊成了线性的局部增量

多样性也守住了:19 个域的归一化熵从 0.821 到 0.817,几乎没变;有效域数 11.22 → 11.09;最大域占比始终低于 25%;五个改写家族的熵贴着理论上限(2.26–2.31 bits,上限 log₂5 ≈ 2.32);没有任何单一种子贡献超过 R15 任务池的 0.77%。配额机制确实在工作。

质量审计方面,hidden-check protection(防隐藏检查)从 38.2% 升到 63.5%,指令过短的风险从 41.6% 降到 7.5%,R15 时引用私有测试的任务只有 0.1%,字面泄漏为 0。验证器与指令的一致性(requirement coverage 中位数)从 0.42 升到 0.57——越滚越规范,这和"合成数据越滚越脏"的刻板印象也是反的。


🔬 训练效果:SFT 涨 10 个点,PPO 再上一台阶

数据好不好,最终看训练。作者用拒采样收集的 Qwen3.5 轨迹做 SFT,分 Round 1/2/3 三个连续阶段训练(即用越来越多轮次的数据),在三个基准上评测:

图23:SFT 随训练阶段的基准表现

图23:Qwen3.5-27B(蓝)和 Qwen3.5-122B-A10B(橙)在 TB2、TB Hard、LHTB 三个基准上,Base → 1R → 2R → 3R 的得分。除了 122B 在 TB Hard 和 LHTB 上 1R 阶段略有抖动,整体趋势是稳定上升的。

具体数值(mean ± std):

模型 阶段 Terminal-Bench 2 TB Hard LHTB
Qwen3.5-27B Base 41.20 ± 1.72 22.67 ± 2.52 18.10 ± 0.89
Qwen3.5-27B Round 3 47.94 ± 2.34 28.33 ± 0.58 22.44 ± 0.40
Qwen3.5-122B-A10B Base 43.82 ± 2.97 20.00 ± 1.00 18.85 ± 1.16
Qwen3.5-122B-A10B Round 3 49.44 ± 1.12 30.00 ± 1.73 23.63 ± 2.76

27B 在 TB Hard 上从 22.67 涨到 28.33,122B 更猛,从 20.00 涨到 30.00——整整 10 个点。SFT 配置也报得很实在:27B 用 64 张 GPU(TP4/PP2/CP2),combined-data 实验 10,778 条样本训 1 epoch,最大上下文 262,145,学习率 3×10⁻⁶ → 3×10⁻⁷。

然后是 PPO。策略从 Qwen3.5-27B base 冷启动,value head 从之前的 critic checkpoint 热加载,clipping ϵ = 0.2,禁掉 KL 惩罚和熵奖励,任务池用全部 37,484 个任务(不去重):

模型 Terminal-Bench 2 TB Hard LHTB
DeepSeek-V4-Pro 51.68 36.00 30.00
Qwen3.5-27B Base 41.20 22.67 18.10
Qwen3.5-27B-RL 49.44 32.00 22.07
相对基线提升 +20.0% +41.2% +21.9%

图24:PPO 训练动态

图24:(a) 平均 verifier reward 从约 0.11 爬到 0.14 以上,峰值在第 55–60 步附近;(b) 平均交互轮数从 19–20 轮涨到 30 轮以上。reward 和轨迹长度同步上升,说明模型在学"做更长的任务"而不是偷懒走捷径。

RL 之后 27B 在 TB2 上拿到 49.44,离 DeepSeek-V4-Pro 的 51.68 只差 2 个点出头——一个 27B 的开源量级模型追到这个位置,说实话挺能打的。

顺带提一句防污染:作者做了污染审计,合成任务与三个基准的 13-token 精确重叠为 0(TB2 0/89、LHTB 0/46、TB Hard 0/100),max 5-gram Jaccard 最高 0.0081。至少字面上是干净的。


💡 我的判断

这篇论文最值钱的地方,不是某个单点技术,而是把"递归验证合成"这个范式在终端任务这个极难的领域里跑通了,并且用 15 轮的纵向数据证明了它没有明显的天花板。每千次种子尝试稳定产出 500 多个通过任务、约 50 美元的成本,这个经济性对任何想训 agent 的团队都有直接的参考价值。

跟同期工作比一下位置。论文 Table 1 列了一圈相关数据集:SWE-Gym、TermiGen、Terminal-Corpus、TMax-15K、SETA、Endless Terminals 等。RST 是唯一同时具备"Grounded + Executable + Adaptive + RL-Validated + Reseeding"五条的——前几条各有团队做到,但"把已验证任务包反复回种"这条确实是它独有的。37,484 任务 + 327,189 轨迹的体量,在终端这个细分领域也是目前最大的之一。

但我有几个保留意见

其一,论文内部数值有不一致的地方。摘要说 Qwen3.5-27B-RL 在 TB2 上是 49.44%、相对提升 20.0%,Table 4 也是 49.44,但结论部分写的是"reaches 46.07 ... relative gains of 11.82%"。同一个数在论文里出现两个版本,这种低级错误出现在一篇强调"验证"的论文里,多少有点讽刺。我写文章时以 Table 4 为准,但你引用时最好自己再核对一遍。

其二,难度膨胀是不是真的等于"能力需求"膨胀?374 行的参考解、244 条命令,也可能只是让任务更"冗长"——更多机械步骤、更多状态搬运,而不是更深的推理。论文用 pass@4 崩塌和 partial credit 分布左移来证明难度,证据是充分的,但"长"和"难"在 agent 训练里的作用机制不完全一样。R15 的任务对模型是"做不到"还是"没耐心做完",这两者对训练的启发差别很大,论文没有彻底拆开。

其三,合成、评估、训练全在一个自建的 Harbor + Terminus-2 + Daytona 基础设施里闭环,三个外部基准里有两个(TB Hard、LHTB)的构建也和作者生态相关。这不是说不公平,但复现门槛和潜在的主场优势是存在的。

对工程的启发,我觉得有三条可以直接拿走:

  1. 加一步再验证,比从零生成靠谱得多。任何需要多组件一致性的合成数据场景(不只终端任务,多跳问答、工具链调用也一样),递归验证都是值得优先试的范式;
  2. 验证器即资产。RST 的所有经济性都建立在"验证器可以自动判定任务好坏"上。如果你所在领域的验证还靠人,先投资源把验证器做出来,比直接堆标注划算;
  3. 配额防坍缩是刚需。谱系、类别、改写家族、批次四重上限的设计,可以直接抄到任何迭代式数据合成管线里。

递归 15 轮不见顶,那 30 轮呢?论文没回答,但它的数据暗示这条路还长。如果"数据飞轮"真能这样一直滚下去,agent 训练的瓶颈可能很快就不再是数据,而是验证器本身的表达力——能被自动验证的任务,才有资格被无限合成。这个推论往深想一层,其实挺耐人寻味的。


觉得有启发的话,欢迎点赞、在看、转发。跟进最新AI前沿,关注我