Terminal-Universe:不造环境了,直接从轨迹里"挖"出来

做 agent 后训练的人大概都有这种体验:轨迹数据现在遍地都是,随便一个框架跑一圈就是几万条,但真正能用的可执行环境少得可怜。轨迹能干嘛?能 SFT,但上限被产生它的那个模型锁死了;环境能干嘛?可以反复 re-query、可以验证、可以让更强的教师模型重新解一遍——这才是后训练真正吃掉的资源。

问题在于,造环境这件事一直很难规模化。今天要聊的这篇 Terminal-Universe(arXiv: 2609.04148)给了一个我觉得相当聪明的视角转换:别从零造环境了,轨迹本身就把环境暴露给你了

核心摘要:终端代码智能体的轨迹里,Read/Write/Edit 这些工具调用已经完整暴露了它运行时 workspace 的内容和结构。Terminal-Universe 干脆把映射方向反转——不是从环境 rollout 轨迹,而是从轨迹反向重建环境:确定性重放文件操作恢复部分 workspace,再用 completion agent 补齐缺失文件和依赖。在重建出的 37.3k 个 task-sufficient 环境上,沿广度(跨工作区任务)和深度(多轮用户交互)两轴扩展任务,SFT Qwen3.5-27B 后 Terminal-Bench 2.1 提升 11.9 个点,EvoCode-Bench v2 MT@4 提升 13.8 个点。这不是底层算法突破,是一条实打实的数据管线工程,但这条管线踩中了这个领域最痛的供给瓶颈。


📖 论文信息

  • 标题:Terminal-Universe: Turning Agent Trajectories into Scalable Terminal Environments
  • 作者:Jie Wu, Zhenru Zhang, Beichen Zhang, Xuwu Wang, Yuhui Su, Mouxiang Chen, Peng Wang, Zhihai Wang, Que Shen, Hao Zhou, An Yang, Fei Huang, Yujiu Yang, Dayiheng Liu
  • 机构:Qwen Team, Alibaba Group;Tsinghua University
  • 链接:https://arxiv.org/abs/2609.04148 (2026 年 9 月 3 日提交)

🎯 为什么环境比轨迹值钱

先说清楚这篇论文的核心论点,因为它决定了后面所有设计的动机。

轨迹和环境的差别,论文里列得很直白:

维度 Trajectory(轨迹) Environment(环境)
本质 单一的、冻结的记录 可复用的资源
质量上限 受限于产生它的策略模型 可被更强模型重新求解
可验证性 没法检查代码修改对不对 可通过自有测试验证
任务扩展 不可扩展 同一 workspace 上可提更难任务

说实话,这个对比表看起来平平无奇,但它后面的消融实验直接把这个论点砸实了——先卖个关子,§6.1 那组数据我看完是真的愣了一下。

现有扩环境的三条路各有硬伤:SWE-Gym/R2E-Gym 这类仓库回滚法依赖真实 git 历史;SWE-smith/CLI-Gym 这类注入 bug 的扰动法产出全是修复类任务,范围窄;Endless Terminals、TMax 这类从零合成法的问题更微妙——生成出来的 workspace 往往"小而整洁",和真实项目里的屎山代码完全两个物种。

Terminal-Universe 的观察是:轨迹的工具执行历史里,Read 展示文件内容,Write/Edit 展示 workspace 变更。这些加起来,足以重建一个可执行的 workspace 副本。

方向反转。就这么简单,但之前没人系统性地做。


🏗️ 方法:三阶段重建 + 四路再查询

Terminal-Universe 整体框架:左侧是环境重建三阶段(确定性重放 → 智能体补全 → 环境过滤),右侧是四种再查询方式(意图恢复、单工作区合成、跨工作区合成、多轮交互)

图1:框架全貌。左半边把一条轨迹变成可执行 workspace,右半边在 workspace 上产出四类任务。注意 Multi-Round 那个例子:用户说"no, cache parsed schemas must be thread-safe"——这就是后面要说的深度扩展,失败轮次的反馈被保留在对话里,变成错误恢复的监督信号。

环境重建:先重放,再补全,最后过滤

Stage 1:确定性重放。按时间顺序处理轨迹里的 read/write/edit,收集每个被访问路径的最早观测版本——也就是智能体动手改之前的样子。智能体自己创建的文件排除掉,单独留着做验证。这一步是纯确定性操作,不用模型。

但问题也明显:轨迹只暴露智能体碰过的路径,终端输出还可能被截断。所以重放出来的 Ê₀ 是个部分 workspace,平均只有 2.9 个文件。2.9 个文件能干啥?基本啥也干不了。

Stage 2:智能体补全。一个 completion agent 基于部分 workspace 和恢复的任务,把缺失文件、不完整文件、依赖都补齐。关键约束是:让任务可解,但不实现解决方案本身——不能泄漏答案。补全之后平均文件数从 2.9 涨到 22.4,workspace 充分性在 Terminal 池从 40.2% 拉到 93.5%,SWE 池从 20.1% 拉到 77.1%。这个提升幅度说明补全不是锦上添花,是这条管线能不能成立的生死线。

Stage 3:环境过滤。一个 agentic judge 拿只读 shell 检查每个 workspace,结合任务判断源码、配置、数据、结构够不够支撑任务,只留 "sufficient" 的。

所有 workspace 跑在统一的 ubuntu:24.04 容器里带网络访问,不搞仓库定制镜像——这个选择牺牲了边缘场景保真度,换来部署成本大幅下降,我觉得是务实的取舍。

再查询:一个环境,四种用法

环境重建好之后,怎么把它的价值榨干?四条路:

意图恢复(Intent Recovery):把源轨迹规范成"用户请求—动作—文件变更"的时间流。单轮轨迹直接取用户请求当任务;多轮轨迹只保留用户明确陈述的需求,模型脑补的一律不要。

单工作区合成(Single-WS):生成器检查 workspace,在 groundedness、结构多样性、可验证性约束下合成 5 个候选任务,随机选 1 个做 rollout 和验证。

跨工作区合成(Cross-WS,广度轴):这是我觉得最有意思的一块。真实开发从来不是单仓库的——你会读别人的参考实现、迁移特性、连接组件。流程是:先给每个 workspace 做技术画像(domain、语言、框架、能力)→ TF-IDF 最近邻找候选对 → LLM judge 识别有向依赖边(target 缺 reference 已实现的能力)。任务设定是 target 可写、reference 只读,查询只给目标行为和挂载路径,不泄露 reference 内部细节——solver 必须自己去导航、理解、适配。

多轮用户查询(Multi-Round,深度轴):从初始查询开始,workspace 跨轮保留,引入 user agent。两个协同机制:需求追踪器维护 active/satisfied/updated 状态,每轮可增改约束;轮级 verifier 写验收测试,solver 和测试脚本严格隔离,user agent 把结构化测试结果翻译成用户口吻的抱怨。三种交互风格:feature extension、feature revision、feature conflict。最多 6 个 follow-up 轮,保留的 3,079 条记录平均 4.51 轮,69.6% 包含随后被修复的失败。

失败轮保留在对话历史里这一点值得多说一句——这直接给了模型错误诊断和恢复的监督信号,而不是只有"一路顺风"的演示。

验证与过滤

每个任务由专用 agent 在容器内写自包含 pytest 套件,迭代本地执行直到能严格评估公共接口。教师模型 Qwen3.7-Max(xhigh effort)在 Claude Code 脚手架里 rollout,temperature 1.0、256k 上下文、最多 500 个 agent turns、4 小时超时。接受标准很硬:Single-WS/Cross-WS 必须全部测试通过;Multi-Round 裁剪尾部连续失败轮,至少保留 2 个已验证通过轮。所有轨迹过 13-gram 去污染检查。


📊 实验:数字说话

数据规模

种子轨迹要求末尾 workspace 至少 5 个文件、100 行,严格排除 Terminal-Bench 衍生来源。重建产出 68,263 个环境,过滤去重后剩 37,273 个 task-sufficient 环境。Python 占 84.7%,数据处理、DevOps、安全负载合计超 80%。SFT 语料 31,977 条(Single-WS 25,386 + Cross-WS 3,512 + Multi-Round 3,079),约 1.42B tokens。

主结果

训练配置:Qwen3.5-27B,SFT 2 epochs,恒定学习率 \(7\times10^{-6}\),全局 batch 256,256k 序列长度。Terminal-Bench 报 6 次独立运行平均通过率。

Model Base Data TB2.0 TB2.1 MT@4 Case
Qwen3.5-27B(基座) 41.6 46.2 6.3 67.8
Qwen3.7-Max(教师) 69.7 74.5 39.8 83.4
RST-27B Qwen3.5-27B 37.5k 49.4
TMax-27B Qwen3.6-27B 14.6k 42.7 44.9 17.1 72.5
CalibForge-35B-A3B Qwen3.5-35B-A3B 5.4k 47.6
Nemotron-Terminal-32B Qwen3-32B 490k 27.4 27.9 0.0 13.7
Terminal-Universe-27B Qwen3.5-27B 32.0k 52.8 58.1 20.1 76.1

几个值得停留的点:

  • TB2.1 从 46.2 到 58.1,涨 11.9 个点;TB2.0 到 52.8,涨 11.2 个点。之前同基座最好的 RST-27B 是 49.4,被超了 3.4 个点。
  • MT@4 从 6.3 到 20.1,涨 13.8 个点——多轮这块的基座起点低到离谱,Multi-Round 数据的收益格外大。
  • 注意 Nemotron-Terminal-32B:490k 数据量,TB2.0 只有 27.4。数据量翻 15 倍,分数被 32k 的 Terminal-Universe 甩开 25 个点。环境质量对数据量的碾压,这张表体现得再清楚不过了。

消融:这篇论文最值钱的部分

重解 vs 模仿(Table 4,TB2.1)。这组数据是我说的"愣了一下"的那组:

Variant Claude Code Terminus2-XML Avg
基座 47.8±2.0 46.2±3.9 47.0
直接模仿源轨迹(35.8k) 33.0±3.9 40.3±2.1 36.7
Intent Recovery 重解(35.8k) 51.3±3.1 52.9±1.4 52.1

直接拿源轨迹做 SFT,性能暴跌 10.3 个点。同样的轨迹,重建环境后让教师重解,反而涨 5.1 个点。一来一回差了 15 个点以上。这个实验把"轨迹是冻结的劣质资产"这件事彻底钉死了——你模仿的每一个错误决策都被原样继承,而重解能用更强模型把质量上限重新打开。

补全的作用(Table 5):replay-only 48.7±3.5,加补全 52.9±1.4。涨 4.2 个点,方差还大幅收窄。有意思的是 replay-only 也比基座高 2.5——教师会自己先修补 workspace 再解题,说明 workspace 残缺时模型在浪费 turn 干体力活。

Verifier 过滤(Table 6):Single-WS 加不加 verifier 差别不大(56.4 vs 56.0),但 Cross-WS 用不到一半数据(3.5k vs 7.1k)反超 2.2 个点。越难的任务,过滤越值钱。直觉上也说得通:难任务里坏样本的毒性更强。

广度轴(Table 7/8):Single-WS 56.4,加上 Cross-WS 后 58.4。Cross-WS 轨迹明显更长更难——1.6 倍 assistant turns、1.9 倍 tool calls、教师 pass@1 从 72.3% 掉到 49.2%。分类收益上 model training 涨 15.0、debugging 涨 10.0。

深度轴(Table 9,EvoCode-Bench):加 Multi-Round 后 MT@4 涨 2.6、Case 涨 5.0;去掉轮级验证反馈,MT@4 掉 2.2。grounded 反馈(真实测试结果翻译成的抱怨)确实在指引模型延续修复。

扩展轴消融(Table 10)——这组实验是对"以环境为扩展核心"动机的直接验证,固定约 35k 数据预算:

Variant Envs Records TB2.1
环境扩展 35,116 35.1k 56.0±3.3
查询扩展 17,558 35.1k 53.8±3.3
解扩展 17,558 35.1k 53.9±2.4

扩环境涨 2.8 个点,扩查询扩解基本无效。同样的数据量,花在环境多样性上的回报远高于花在同环境多任务上。这个结论对做数据工程的人很有指导意义:别再一个 workspace 上薅第二个 query 了,去搞新环境。


🤔 我的判断

这篇论文的定位要放准:它不是算法创新,是数据供给管线的范式翻转。核心 insight 一句话——轨迹暴露了环境,所以轨迹可以逆转成环境。这个观察本身不复杂,但把它做成一条带确定性重放、智能体补全、验证过滤、广度深度两轴扩展的完整管线,并且每个环节都拿出消融数据证明必要性,这个工程完成度是很高的。

几个亮点我觉得值得记住:重解 vs 模仿那 15 个点的差距,等于给"轨迹蒸馏"路线敲了记警钟;扩展轴消融直接告诉你数据预算该往哪花;Cross-WS 的有向依赖建模(TF-IDF 粗筛 + LLM judge 定向)是个可复用的模式。

问题也有。单一教师 Qwen3.7-Max 同时生成任务、解和验证器——教师的能力盲区会限制任务覆盖,教师解里的错误也可能被自己的测试漏过,这是自指风险,作者自己也承认了。另外统一 Ubuntu 容器在复杂编译场景会掉保真度,84.7% 的 Python 占比意味着低层语言场景的泛化是存疑的。还有个我个人没完全想透的点:workspace 充分性判断由 agentic judge 做,这个 judge 的误判率在边缘案例上到底多少,论文没给细查。

跟同期工作比,和 RST(37.5k 环境)规模相当但多了多轮和跨 workspace 支持,和 TMax 这类纯合成路线比赢在环境来自真实轨迹。方向上,"环境即资产、轨迹可逆转"这个思路我觉得会成为 agent 数据工程的标配——尤其是那个观察:同一 workspace 上的多条轨迹可以聚合重放,合并出比任何单条轨迹都更复杂的环境。随着智能体越来越强,这条管线会自动变得更值钱,这是个挺优雅的 scaling 属性。

如果你在做 agent 后训练的数据管线,这篇值得细读,尤其是消融实验每一组都对应一个工程决策。


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