TermiGen:面向终端智能体的高保真环境与鲁棒轨迹合成 TermiGen: High-Fidelity Environment and Robust Trajectory Synthesis for Terminal Agents
通过多智能体环境合成与主动错误注入,训练出媲美专有模型的终端操作智能体
前置知识
终端任务(Terminal Tasks)
指通过命令行界面与操作系统交互完成的软件工程和系统管理任务,如编译代码、调试程序、配置服务、处理数据文件等。与标准代码生成不同,终端任务需要完整的可执行环境规范,包括操作系统配置、文件依赖和动态运行时状态。这类任务通常需要执行长序列的命令(平均超过20步),其中任何单个步骤的错误都可能级联导致不可逆的失败。
本文的核心研究对象就是终端任务,理解其复杂性和环境依赖性是理解本文动机和方法的基础
暴露偏差(Exposure Bias)
在序列生成任务中,模型在训练时看到的是真实前缀(teacher forcing),但在推理时必须依赖自己的预测结果。当训练数据中缺乏错误状态和恢复模式时,模型在部署时遇到运行时异常会表现脆弱,因为这些失败状态相对于训练数据是分布外(OOD)场景。在终端任务中,这种偏差尤为严重,因为工具调用引起的外部状态变化比内部推理错误更难逆转。
这是本文要解决的核心问题之一,理解暴露偏差才能明白为什么需要主动注入错误轨迹
ReAct 范式
一种将推理(Reasoning)与行动(Acting)交织的智能体交互模式。在每个时间步,智能体先生成一段推理轨迹(解释当前状态和下一步计划),然后输出一个具体动作(如执行bash命令)。这种模式让智能体的决策过程可解释,同时保持与外部环境的交互能力。本文中的 BashAgent 就采用了这种架构。
本文的轨迹收集基于 ReAct 风格的智能体框架,理解这一范式有助于理解轨迹数据的结构
拒绝采样(Rejection Sampling)
一种从专家模型中筛选高质量轨迹的方法。具体做法是让专家模型生成多条轨迹,然后只保留那些通过验证(如单元测试全部通过)的轨迹用于训练学生模型。标准的拒绝采样要求100%的测试通过率,这意味着只保留'完美'的执行路径。
本文发现严格过滤(只保留完美轨迹)反而有害,不完美的轨迹包含有价值的错误恢复信号,这是本文的关键发现之一
Docker 容器化
一种轻量级的操作系统级虚拟化技术,将应用程序及其依赖打包在隔离的容器中。每个容器拥有独立的文件系统、网络和进程空间,但共享宿主机的操作系统内核。在本文中,Docker 用于为每个终端任务创建独立、可复现的执行环境,确保智能体在受控条件下进行训练和评估。
Docker 是本文环境合成的核心载体,100%的训练环境都是基于Docker容器构建的
研究动机
开放权重的大型语言模型在执行复杂终端任务时面临两个根本性瓶颈。首先是高保真、可执行训练环境的严重稀缺。与独立的代码片段不同,终端任务需要完整的系统架构、文件依赖和动态运行时状态的可执行规范。构建这样的环境需要领域专家投入大量精力,例如 TerminalBench 基准测试仅手工策划了200个任务。现有的两种数据合成范式各有严重缺陷:第一种从现有软件仓库(如GitHub issues)改编,虽然基于真实代码,但缺乏多样性且偏向调试和问题解决,同时需要大量人工定义可验证的成功标准;第二种完全依赖LLM生成假设性执行日志,但由于没有实际运行环境,合成器会'幻觉'出看似合理但技术上错误的结果(例如在存在依赖冲突时报告安装成功),这会误导学生模型的训练。其次是长时程终端执行加剧了暴露偏差问题。完成一个终端任务通常需要执行长命令序列(通常超过20步),其中单个中间错误就可能级联导致不可逆失败。标准的蒸馏方法通常从专家模型进行拒绝采样来获取最优执行路径,但专家模型很少犯简单错误,这导致训练数据中缺乏失败状态和对应的恢复阶段,造成分布不匹配。
本文的目标是本文旨在从数据合成的角度弥合开放权重模型与大型专有模型在终端任务上的显著差距。具体目标是构建一个自动化、可扩展的流水线,用于合成高保真环境和鲁棒的专家轨迹。通过在这些合成数据上微调,使32B参数量的开放权重模型能够在 TerminalBench 基准上达到与专有模型可比的性能水平。论文报告的具体成果是 TermiGen-Qwen2.5-Coder-32B 达到31.3%的通过率,超越了 o4-mini 的20.0%,并达到了 GPT-5-Codex 性能的73.1%。
与已有工作不同的是,本文的独特切入角度是'数据为中心'(data-centric)的方法论。与以往专注于改进模型架构或推理策略的工作不同,TermiGen 抓住了一个被忽视的关键点:高质量、可验证的训练数据是构建有效终端智能体的基础前提。具体而言,本文识别出两个被已有工作忽视的核心问题:一是模拟环境与真实执行之间的保真度差距——论文通过实证审计发现,26%的模拟轨迹存在观察错误,其中53%是虚假冗余(对静默命令生成确认输出),35%是语义偏差(无法忠实复制标准shell逻辑),12%是状态不一致;二是标准蒸馏中错误类型的分布偏差——自然发生的错误主要集中在验证失败(约50%)和分析错误(约19%),而幻觉和需求违反等复杂失败模式很少出现,这导致模型学到的错误恢复能力是片面的。
核心方法
TermiGen 的核心思想可以用一个比喻来理解:与其只给学生看完美解题过程,不如让他在安全的沙箱里'试错'——故意犯一些典型错误,然后学习如何诊断和修复。技术路线上,TermiGen 分为两个阶段:第一阶段是高保真任务和环境合成,通过多智能体协作生成多样化的、功能有效的Docker容器化任务环境;第二阶段是控制错误纠正轨迹收集,采用 Generator-Critic 架构在轨迹执行过程中主动注入错误,合成富含错误→诊断→恢复循环的训练数据。整个流水线以 Claude-4.5-Sonnet 为骨干模型,使用420个命令行工具覆盖16个功能领域,最终产出超过3500个经过验证的环境和3291条轨迹。
TermiGen 最本质的创新在于两个方面。第一是用真实Docker执行替代LLM模拟来消除幻觉。已有工作(如Chen et al., 2025; Kimi Team, 2025)让LLM直接生成假设性执行日志,但我们的实证分析表明这种方法存在严重的保真度问题:26%的轨迹包含观察错误,包括对静默命令生成虚假确认输出、无法忠实复制shell逻辑导致错误的诊断推理、以及状态不一致破坏推理链。TermiGen 通过在真实Docker容器中执行每个命令来彻底解决这个问题,确保100%的训练环境功能有效。第二是主动错误注入机制来解决分布不匹配。标准蒸馏只收集专家的完美执行路径,但小模型在部署时会遇到专家从未犯过的简单错误。TermiGen 的 Generator-Critic 架构以20%的概率(epsilon = 0.2)在每个步骤注入精心设计的错误,涵盖五种失败模式:分析错误、命令错误、幻觉、需求违反和验证失败。关键的是,当后续步骤采样到正确意图时,生成器被条件化去分析前一个错误反馈并合成纠正方案,从而教会模型完整的错误→诊断→恢复循环。
方法步骤详情
Phase I 分为三个阶段:1) 任务生成:首先构建一个层次化分类体系(3个层级、11个类别),覆盖从低级系统操作到高级应用工作流的完整终端使用谱系。引导LLM为每个类别生成不同的任务种子(简洁的高层目标描述),然后通过 Proposer-Evaluator 架构将种子实例化为具体任务。评估器根据环境复杂度、数据可生成性和验证确定性三个可行性指标(1-5分)进行评分,只有所有维度得分>4的任务才被接受。2) 环境合成:采用顺序工作流,File Planner Agent 分析任务描述以分解出文件系统蓝图,Construct Agent 为每个文件生成实际内容,Env Agent 生成Dockerfile封装这些文件。3) 环境和任务验证:实施迭代Docker构建循环,构建失败时将stderr日志反馈给Env Agent进行纠正(最多5次迭代)。同时采用 Unit Test Generator Agent 生成单元测试,Judge Agent 通过迭代精炼验证测试的正确性。Phase II 是轨迹收集:采用 Generator-Critic 架构。在每个时间步 t,首先从伯努利分布 I_t ~ Bernoulli(epsilon) 采样意图信号,其中 epsilon = 0.2。如果 I_t = I_correct,智能体试图高效推进任务状态;如果 I_t = I_error,智能体被指示犯一个精心设计的错误。然后 Step Generator 根据采样的意图生成ReAct风格的动作。最后 Critic Agent 验证生成动作与意图的对齐性:对于错误步骤,过滤掉低质量的错误注入;对于正确步骤,确认动作有效推进任务状态。当错误动作执行后环境转换到失败状态时,如果后续步骤采样到正确意图,生成器被条件化去分析前一个错误反馈并合成纠正方案。
技术新颖性
与已有技术相比,TermiGen 的新颖性体现在三个方面。首先,与纯LLM模拟环境(Chen et al., 2025; Kimi Team, 2025)不同,TermiGen 使用真实Docker执行,通过实证对比证明了这种方法的优势:在800个样本的控制实验中,真实执行环境比模拟环境高出2.5个百分点的通过率(25.0% vs 22.5%),相对提升约11%。其次,与标准拒绝采样方法不同,TermiGen 的主动错误注入机制不仅收集最优路径,还故意构造失败和恢复场景。这解决了一个关键的分布问题:自然发生的错误主要集中在验证失败(约50%),而幻觉和需求违反等复杂失败模式很少出现;TermiGen 的策略则迫使模型导航一个多样化的失败模式谱系。第三,与专注于单轮静态代码修复的错误纠正训练(Zheng et al., 2024)不同,TermiGen 将错误注入集成到多轮终端交互的轨迹合成中,使模型能够在复杂、有状态的交互中内化完整的错误→诊断→恢复循环。
实验结果
TermiGen 在多个维度上验证了其有效性。首先,在 TerminalBench 1.0 基准上的主实验中,TermiGen-Qwen2.5-Coder-32B 达到31.3%的通过率,建立了新的开放权重最先进水平。这一结果显著超越了现有微调智能体如 Reptile(18.9%)和 TerminalAgent(15.5%),差距分别为12.4和15.8个百分点。与未微调的基座模型相比,TermiGen 带来了近25个百分点的性能提升(从4.5%到31.3%)。最引人注目的是,32B参数的 TermiGen 模型超越了参数量远大于它的专有模型 o4-mini(20.0%),领先11.3个百分点,尽管前者没有访问网页浏览或记忆等工具。TermiGen-Coder-32B 达到了 GPT-5-Codex 性能的73.1%。关于环境保真度的消融实验(RQ1)表明,在800个样本的控制条件下,真实执行环境(TermiGen)的通过率为25.0%,比模拟环境(22.5%)高出2.5个百分点,相对提升约11%。对模拟轨迹的审计发现26%存在观察错误,包括53%的虚假冗余、35%的语义偏差和12%的状态不一致。关于错误纠正策略的消融实验(RQ2)显示,TermiGen 模型达到25.0%的通过率,比在标准轨迹上训练的基线模型(21.8%)高出3.2个百分点。分析发现自然发生的错误分布严重偏斜(50%为验证失败),而主动错误注入迫使模型学习更广泛的失败模式。关于负样本价值的消融实验(RQ3)揭示了一个反直觉的发现:严格的数据过滤是有害的。包含所有轨迹(通过率阈值 tau = 0%)的模型达到31.3%的通过率,比只包含完美轨迹(tau = 100%,2040条)的模型(25.0%)高出6.3个百分点,比包含50%以上通过率轨迹(tau = 50%,2696条)的模型(26.3%)也高出5.0个百分点。这归因于两个因素:任务复杂度覆盖(完美轨迹偏向简单任务)和局部恢复监督(失败轨迹中的错误纠正段落仍提供高质量监督)。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| TerminalBench 1.0 终端任务执行 | 平均通过率 (%) | 31.3 ± 1.8 | Reptile: 18.9; TerminalAgent: 15.5; o4-mini: 20.0; GPT-5-Codex: 42.8; Claude-4.5-Sonnet: 64.5 | 比 Reptile +12.4pp,比 o4-mini +11.3pp,达 GPT-5-Codex 的73.1% |
| 环境保真度对比(800样本) | 平均 Pass@1 (%) | 25.0 (真实执行) | 22.5 (模拟执行) | +2.5pp,相对提升约11% |
| 错误纠正策略对比(800样本) | 平均 Pass@1 (%) | 25.0 (TermiGen) | 21.8 (标准轨迹) | +3.2pp |
| 数据过滤阈值对比 | 平均 Pass@1 (%) | 31.3 (tau=0%) | 25.0 (tau=100%); 26.3 (tau=50%) | 比 tau=100% +6.3pp,比 tau=50% +5.0pp |
局限与改进
作者在论文结尾明确承认了三个关键局限。首先,当前训练完全依赖监督微调(SFT),未利用环境提供的确定性验证信号进行强化学习。这意味着智能体无法探索训练数据分布之外的新颖解决方案,只能克隆专家的行为空间。其次,当前实现的是一个没有记忆组件的简单智能体,无法利用交互历史来改进决策。第三,虽然分类体系覆盖了多样化领域,但环境本质上是合成的、隔离的,无法完全复制真实世界生产系统(如分布式集群、高并发流量)的随机性和规模。从独立分析的角度,还有几个值得关注的局限。TermiGen 依赖 Claude-4.5-Sonnet 作为骨干模型进行数据合成,这意味着其质量和成本受限于闭源模型的可用性和定价。数据合成过程的计算成本较高(需要实际Docker执行),虽然比人工策划更可扩展,但与纯LLM模拟相比效率较低。此外,论文未详细讨论任务分类体系的覆盖偏差——11个类别的分布是否均衡,是否存在某些领域被过度或不足代表的情况。31.3%的通过率虽然令人印象深刻,但与专有模型的64.5%仍有显著差距,表明高保真数据虽能弥补部分差距,但模型规模和预训练质量仍是关键因素。
独立分析的弱点
从独立技术分析的角度,TermiGen 存在以下几个值得改进的弱点。首先是数据合成的效率瓶颈:每个任务都需要实际构建和运行Docker容器,这比纯LLM模拟慢得多。对于需要长时间运行的任务(如编译大型项目),这个瓶颈会更加严重。改进方向可以是引入轻量级的环境缓存机制,或者对简单任务使用模拟执行,只对复杂任务进行真实执行验证。其次是错误注入策略的粗糙性:当前以固定的20%概率在每个步骤注入错误,没有根据任务难度、当前进度或历史错误频率进行动态调整。一个更精细的策略应该是课程学习式的——在训练初期注入更多错误以建立基础恢复能力,随着模型能力提升逐步降低注入率。第三是轨迹质量评估的单一性:当前仅依赖单元测试通过率作为质量指标,未考虑轨迹的效率(步骤数)、可读性(推理质量)或泛化性(是否过度拟合特定环境)。第四是缺乏跨环境迁移的评估:所有实验都在合成的、隔离的环境中进行,未验证在真实生产环境(如AWS EC2实例、Kubernetes集群)中的迁移能力。
未来方向
作者提出了三个明确的未来方向:一是将环境提供的确定性验证信号用于强化学习,允许智能体探索超越训练数据分布的新颖解决方案;二是设计具有记忆组件的更复杂智能体,以利用交互历史改进决策;三是研究在受控沙箱环境中训练的智能体如何迁移到开放式、大规模的真实基础设施任务。基于本文成果,还可以延伸出以下研究方向。一是自适应错误注入:开发根据智能体当前能力水平动态调整错误注入率和类型的课程学习策略。二是多智能体协作:将错误纠正机制扩展到多智能体场景,例如一个智能体犯错、另一个智能体协助诊断。三是跨领域迁移:研究在合成终端环境上训练的智能体是否能迁移到其他交互式环境(如数据库管理、网络配置)。四是主动学习:让智能体主动选择哪些任务需要更多训练,而不是均匀采样。五是结合检索增强生成(RAG):在错误诊断阶段检索相关文档或历史解决方案,提高恢复成功率。
复现评估
从复现评估的角度看,TermiGen 具有较好的可复现性。论文明确声明数据集已在 GitHub 上开源(https://github.com/ucsb-mlsec/terminal-bench-env),这为复现提供了基础。训练使用的是公开可获取的 Qwen-2.5-Coder-32B-Instruct 和 Qwen3-32B 模型,采用全参数监督微调,序列长度20000,5个epoch。数据合成阶段使用 Claude-4.5-Sonnet 作为骨干模型,这是一个闭源商业模型,复现者需要购买API访问权限,这可能是一个成本障碍。评估使用 TerminalBench 1.0 基准,该基准本身也是公开的。算力需求方面,32B模型的全参数微调需要多GPU设置(具体硬件配置在附录B中提供),对于学术实验室可能是一个挑战。整体而言,核心方法和数据都是可获取的,主要障碍在于数据合成阶段的闭源模型依赖和微调阶段的计算资源需求。
论文图表