← 返回 2026-01-26

无限终端:为终端智能体扩展强化学习环境 Endless Terminals: Scaling RL Environments for Terminal Agents

Kanishk Gandhi, Shivam Garg, Noah D. Goodman, Dimitris Papailiopoulos 📅 2026-01-23 👍 19 2026-07-13 08:35
PPO 强化学习 智能体 程序化生成 终端任务

通过程序化生成终端任务环境,用简单PPO显著提升LLM终端能力

前置知识

强化学习(Reinforcement Learning)

强化学习是一种机器学习范式,智能体通过与环境交互来学习最优策略。在本文中,LLM扮演智能体角色,终端环境则是交互对象。智能体在每一步观察当前状态(对话历史和shell输出),选择动作(发出shell命令),获得环境反馈(命令执行结果),并最终获得奖励信号(任务是否通过测试)。训练目标是最大化期望累积奖励。本文使用的是最基础的RL设定:二值奖励(完成任务得1,否则得0),没有任何中间奖励塑形。

理解RL的基本框架是读懂本文实验设计和结果分析的前提,特别是为什么作者强调'简单RL+环境扩展'就能取得显著效果。

PPO(Proximal Policy Optimization,近端策略优化)

PPO是OpenAI于2017年提出的策略梯度方法,是目前最流行的RL算法之一。其核心思想是通过裁剪(clipping)机制限制策略更新幅度,防止训练不稳定。具体来说,PPO使用一个裁剪目标函数,其中 r_t(θ) 是新旧策略的概率比,A_t 是优势函数估计,ε 是裁剪参数。本文使用 ε_low=0.2 和 ε_high=0.28 的不对称裁剪,采用序列级别的损失平均,且不使用KL惩罚项。

PPO是本文唯一使用的训练算法,理解其机制有助于理解作者'简单RL'的核心主张。

程序化生成(Procedural Generation)

程序化生成是指通过算法自动创建内容,而非人工编写。在本文中,程序化生成用于自动化创建终端任务环境,包括任务描述、容器配置、验证测试等四个阶段。这种方式的规模几乎不受人工成本限制,理论上可以无限扩展。与人工标注(如NL2Bash数据集需要人工编写shell命令)或蒸馏(如OpenThoughts从强模型提取轨迹)相比,程序化生成的边际成本极低。

程序化生成是本文的核心贡献,理解其工作原理和优势是理解论文价值的关键。

Apptainer容器

Apptainer(前身为Singularity)是一个专为高性能计算和科学计算设计的容器运行时,类似于Docker但更适合HPC环境。在本文中,每个程序化生成的终端任务都被封装在一个独立的Apptainer容器中,包含任务所需的所有文件、环境配置和初始状态。容器确保了任务的隔离性和可复现性——每个任务运行在干净的环境中,不会互相干扰。

理解容器化方式有助于理解任务环境的隔离机制和可复现性保证。

可验证任务(Verifiable Tasks)

可验证任务是指可以通过自动化测试来判断任务是否成功完成的任务。本文中的每个终端任务都配有一组完成测试(completion tests),这些测试检查任务结束时系统是否达到了预期状态——例如特定文件是否被创建、内容是否正确、配置是否被修改等。这种自动可验证性是RL训练的前提:只有能够自动判断成功/失败,才能为训练提供奖励信号。

可验证性是连接程序化生成和RL训练的桥梁,也是本文方法能够工作的根本原因。

Pass@k 指标

Pass@k 是评估代码生成或任务完成能力的标准指标,表示从k次独立采样中至少有一次成功的概率。本文在可解性过滤阶段使用pass@16:对每个任务采样16次o3的解决方案,只有至少一次成功的任务才被保留。在评估阶段使用pass@5来分析失败模式。这个指标比简单的成功率更能反映模型的真实能力,因为它捕捉了模型的探索能力。

Pass@k是理解本文过滤机制和实验评估的关键指标。

研究动机

当前终端智能体训练面临的核心瓶颈是环境稀缺。RL在提升语言模型推理能力(如数学问题求解、代码生成)上的成功,依赖于大规模、多样化且可自动验证的任务集。然而,对于训练LLM在终端中执行多轮交互任务——这种需要跨多步推理、从错误中恢复、交互式执行命令序列并改变系统状态的能力——目前没有可扩展的环境存在。现有终端基准测试(如TerminalBench 2.0)最多只有数百个任务,远远不足以支持稳健的RL训练。人工标注这类任务的成本极高——NL2Bash数据集需要人工编写shell命令,其规模受限于标注预算。现有的三种应对策略都存在根本性缺陷:(1)使用固定评估基准进行训练,存在过拟合到狭窄任务分布的风险;(2)通过SFT从更强的专有模型蒸馏行为,继承了教师模型的性能天花板且需要昂贵的API访问;(3)使用人工策划的数据集,标注成本限制了规模和多样性。

本文的目标是本文的目标是构建一个完全自主的、可无限扩展的终端任务生成管线,该管线能够程序化地生成终端使用任务,无需任何人工标注或从强模型蒸馏。具体而言,该管线需要做到:(1)自动生成多样化的任务描述,覆盖文件操作、日志管理、数据处理、脚本编写、数据库操作等多个类别;(2)自动构建和验证容器化环境;(3)自动生成完成测试;(4)通过强模型采样过滤确保任务可解性。最终目标是证明:当环境规模足够大时,即使是简单的RL算法(vanilla PPO)也能产生显著的性能提升,且这些提升能够迁移到人工策划的基准测试上。

与已有工作不同的是,本文的独特切入角度在于将问题从'设计更好的算法或智能体架构'转变为'扩展环境规模'。此前的工作,如OpenThoughts-Agent使用NL2Bash的人工生成查询和命令进行RL训练,但在TerminalBench 2.0等基准上没有取得显著提升。本文的关键洞察是:RL成功的关键不在于算法的复杂性,而在于环境的多样性和规模。作者采用了一个极简的智能体架构——没有检索、没有多智能体协调、没有专门工具——仅通过一个简单的推理-执行-观察循环与环境交互。这种'简单方法+大规模环境'的范式与当前社区追求复杂智能体架构的趋势形成鲜明对比,证明了环境扩展才是真正的杠杆点。

核心方法

Endless Terminals的核心思路是:与其人工设计终端任务,不如让LLM自动程序化生成任务,然后用简单RL训练终端智能体。整体方法可以类比为一个'自动出题-自动验证-自动训练'的流水线。直觉上,如果能自动生成大量多样化且可验证的终端任务,就可以为RL训练提供源源不断的环境,就像AlphaGo通过自我对弈获得无限棋局一样。技术路线上,管线分为四个阶段:第一阶段从三个维度(任务类别、复杂度级别、场景上下文)随机采样,生成多样化的任务描述;第二阶段为每个任务构建容器化环境并通过自生成的前置测试验证环境有效性;第三阶段生成验证任务完成状态的测试;第四阶段通过强模型(o3)采样16次解决方案,过滤掉不可解的任务。整个管线并行运行,失败的任务自动丢弃,最终获得3255个经过验证的终端任务。

本文的核心创新在于提出了一个完全自主的终端任务程序化生成管线,这与已有方法有本质区别。与人工标注方法(如NL2Bash)不同,本方法无需任何人工干预,理论上可以无限扩展。与蒸馏方法(如OpenThoughts-Agent从GLM-4.6蒸馏轨迹)不同,本方法不依赖强模型的API访问,而是将强模型仅用于可解性验证这一步骤。与使用固定基准训练的方法不同,本方法生成的任务覆盖多个类别和难度级别,避免了过拟合。最关键的区别在于:本文证明了'环境扩展'而非'算法改进'才是提升终端智能体能力的关键杠杆。作者使用最简单的PPO算法(二值奖励、无KL惩罚、无中间奖励塑形)、最简单的智能体架构(无检索、无多智能体、无专门工具),却在多个基准上取得了显著提升。这一发现挑战了当前社区过度关注算法和架构创新的趋势。

方法步骤详情

Endless Terminals管线包含四个阶段。第一阶段:任务描述生成。从预定义的类别(文件操作、日志管理、数据处理等)、复杂度级别(单命令到多步骤序列)和场景上下文(开发者整理文件、DevOps工程师调试日志等)三个维度随机采样,构造生成提示。LLM输出两部分:任务描述(以用户向AI助手提问的口吻编写)和特权信息(包含精确的文件内容、路径和预期状态,供自动测试使用,不暴露给智能体)。第二阶段:容器构建与验证。根据任务描述和特权信息,生成初始状态测试文件和容器定义文件(Apptainer Definition或Dockerfile)。采用迭代精炼循环:模型生成容器定义、构建容器、运行前置测试、如果失败则将错误反馈给模型修正,最多进行k=3轮。无法产生有效容器的任务被丢弃。第三阶段:完成测试生成。生成第二组测试文件,验证任务完成后的系统状态(如检查文件是否创建、内容是否正确、配置是否修改)。这些测试使用特权信息中的路径和数据,并验证测试在初始状态下不会通过。第四阶段:可解性过滤。使用o3模型采样n=16次解决方案,每次是一个完整的交互会话。保留至少一次成功(pass@16>0)的任务,丢弃其余。过滤移除了描述不明确或不可能完成的任务。

技术新颖性

本文的技术新颖性体现在多个层面。首先,管线设计上的创新:四个阶段的管线将任务生成、环境构建、测试生成和可解性验证解耦,每个阶段都有独立的自动验证机制,确保了整个管线的鲁棒性。特别是第二阶段的迭代容器构建循环——如果初始测试失败,系统自动将错误信息反馈给模型进行修正,最多尝试3次——这种自我修复机制显著提高了任务生成的成功率。其次,可解性过滤机制的设计:使用强模型(o3)的pass@16作为过滤标准,既确保了任务的可解性,又移除了描述不明确的任务。这种方法的巧妙之处在于,它将强模型的能力用于验证而非生成,避免了对强模型API的持续依赖。第三,在实验设计上,作者证明了'简单方法+大规模环境'的范式优于'复杂方法+小规模环境'。本文的智能体架构极为简单——仅使用XML标签结构化输出,支持推理和命令两种模式——但通过扩展环境规模获得了显著性能提升。第四,作者在任务发布前就生成了所有训练任务,确保与后来发布的TerminalBench 2.0没有数据泄漏,这为实验结果的可信度提供了坚实保障。

Endless Terminals: Tasks are procedurally generated through four phases
Figure 1: Endless Terminals: Tasks are procedurally generated through four phases
Overview of the Endless Terminals procedural generation pipeline
Figure 2: Overview of the Endless Terminals procedural generation pipeline

实验结果

本文的核心发现可以归纳为三点。第一,程序化生成的训练信号是可靠的。在Endless Terminals开发集上,经过PPO训练后,Llama-3.2-3B从4.0%提升到18.2%(+14.2%),Qwen2.5-7B从10.7%提升到53.3%(+42.6%),Qwen3-8B-openthinker-sft从42.6%提升到59.0%(+16.4%)。这些提升在所有模型上都是一致的,表明程序化生成的环境提供了稳定有效的训练信号。在OpenThinker开发集上也观察到类似趋势:Llama-3.2-3B从0.0%到1.0%,Qwen2.5-7B从3.9%到8.5%,Qwen3-8B-openthinker-sft从9.7%到10.2%。第二,简单RL在环境扩展时就能成功。作者使用最基础的设置——vanilla PPO、二值奖励、无中间塑形、无KL惩罚、最简智能体架构——却取得了显著效果。这证明了性能提升来自环境规模而非算法复杂性。第三,提升能够迁移到人工策划的基准。在TerminalBench 2.0上,Llama-3.2-3B从0.0%提升到2.2%,Qwen2.5-7B从2.2%提升到3.4%,Qwen3-8B-openthinker-sft从1.1%提升到6.7%。值得注意的是,这些提升是在模型从未见过TerminalBench 2.0训练数据的情况下取得的,且每个模型的RL训练版本都优于该基础架构的其他微调版本,包括使用更复杂智能体架构(如Terminus-2)的方法。此外,蒸馏和RL是互补的:Qwen3-8B-openthinker-sft先在15000条蒸馏轨迹上进行SFT,然后进行RL训练,最终取得了最高的绝对性能(TerminalBench 2.0上6.7%),表明SFT提供了RL可以更有效构建的热启动。

Training and evaluation results
Figure 3: Training and evaluation results
Distribution of tasks in Endless Terminals
Figure 4: Distribution of tasks in Endless Terminals
Distribution of Generated Solutions
Figure 6: Distribution of Generated Solutions
Analysis of successes on TerminalBench 2.0
Figure 7: Analysis of successes on TerminalBench 2.0
查看结构化数据
任务指标本文基线提升
Endless Terminals 开发集 - Llama-3.2-3B Pass Rate (%) 18.2% 4.0%(基础模型) +14.2% 绝对提升
Endless Terminals 开发集 - Qwen2.5-7B Pass Rate (%) 53.3% 10.7%(基础模型) +42.6% 绝对提升
Endless Terminals 开发集 - Qwen3-8B-openthinker-sft Pass Rate (%) 59.0% 42.6%(基础模型) +16.4% 绝对提升
TerminalBench 2.0 - Llama-3.2-3B Pass Rate (%) 2.2% 0.0%(基础模型) +2.2% 绝对提升,超越所有其他微调变体
TerminalBench 2.0 - Qwen2.5-7B Pass Rate (%) 3.4% 2.2%(基础模型) +1.2% 绝对提升,超越所有其他微调变体
TerminalBench 2.0 - Qwen3-8B-openthinker-sft Pass Rate (%) 6.7% 1.1%(基础模型) +5.6% 绝对提升,超越所有其他微调变体
OpenThinker 开发集 - Qwen3-8B-openthinker-sft Pass Rate (%) 10.2% 9.7%(基础模型) +0.5% 绝对提升

局限与改进

本文存在多个值得关注的局限性。首先,程序化生成的任务倾向于类似竞赛编程问题,而非用户实际向AI助手提出的杂乱、不明确的请求。真实的终端使用往往涉及模糊目标、隐含上下文,可能需要澄清性问题。这些特征难以在自动生成的规范中捕获,同时还要保持可验证性。其次,可解性过滤引入了能力天花板:使用o3的pass@16进行过滤,丢弃了大约一半的生成候选任务。这意味着管线无法生成超越前沿模型能力的任务——如果o3在16次尝试中都无法解决,该任务就会被丢弃。随着更强模型的出现,这个天花板会升高,但对前沿验证器的依赖限制了训练真正新颖问题的能力。第三,作者自己承认的失败模式分析显示,在TerminalBench 2.0上,模型存在两种主要失败模式:循环失败(39%的失败案例,模型陷入重复相同命令序列)和轮次耗尽(26%的失败案例,模型达到轮次限制)。此外,性能在不同领域差异显著:软件工程任务表现最好(pass@5为23%),而数学、机器学习和模型训练任务的成功率为零。这反映了程序化生成管线对这些领域的覆盖不足。最后,与Claude Sonnet 4.5使用Terminus-2(200轮限制、复杂智能体架构)在TerminalBench 2.0上达到42.8%相比,本文最佳模型仅达到6.7%(64轮、无智能体架构),差距仍然很大。

独立分析的弱点

本文存在几个值得深入分析的弱点。第一,任务分布偏斜问题:数据集以文件操作和日志管理为主(见Figure 4),数学、机器学习等领域覆盖严重不足,这直接导致了在TerminalBench 2.0相关领域上的零成功率。改进方向是在程序化生成阶段增加更多领域的模板和场景上下文,特别是针对数学计算、数据分析和机器学习工作流的任务生成。第二,智能体架构过于简单:作者刻意选择了最简架构以证明'环境扩展'的核心论点,但这也限制了实际性能。仅支持XML标签输出、不能使用交互式工具(vim、htop等)、16轮训练限制等都制约了模型能力的发挥。改进方向包括引入检索机制帮助模型回忆相关知识、支持更丰富的工具使用、以及增加训练轮次。第三,二值奖励信号过于稀疏:每个episode只有一个奖励(通过/不通过),没有中间奖励,这对于复杂的多步骤任务来说信号过于稀疏,可能导致训练效率低下。改进方向是引入基于测试用例通过数量的部分奖励(partial rewards),或者基于中间状态的奖励塑形。第四,可解性过滤的粗粒度:使用pass@16>0作为过滤标准过于宽松,保留了大量极难的任务(16次尝试中仅1次成功),这些任务可能对训练没有帮助甚至有害。改进方向是根据pass@k值进行更精细的任务难度分级,或采用课程学习策略逐步增加任务难度。

未来方向

作者提出了几个重要的未来研究方向。第一,更好的用户建模:通过改进用户模型来生成更自然的任务描述,使其更接近真实用户向AI助手提出的模糊、不完整的请求,同时保持足够的规范性以支持自动验证。第二,自对弈(Self-Play)方法:模型迭代地生成略超当前能力的任务并学习解决它们,可以自适应地扩展难度,无需依赖固定的前沿验证器。第三,更丰富的智能体架构:在程序化生成的环境上测试带有检索、多智能体协调、工具使用的智能体架构,可能进一步释放性能。第四,更密集的奖励信号:基于通过的测试用例数量的部分奖励可以提供更密集的训练信号,加速学习。第五,学习终端动力学的世界模型:将环境动力学蒸馏到推理模型中,允许智能体通过想象中的rollout进行规划和模拟,从而实现更高效的训练。此外,基于本文成果可以延伸的方向包括:将管线扩展到更多领域(网络配置、安全审计、云基础设施管理等);探索多任务学习和任务组合(将多个简单任务组合成复杂的端到端工作流);以及研究任务难度与模型能力之间的最佳匹配关系,实现自适应课程学习。

复现评估

本文在复现性方面做得相当好。代码已在GitHub开源(https://github.com/kanishkg/endless-terminals),这为社区复现提供了基础。数据方面,管线生成了3255个Apptainer格式的任务,其中约2500个也转换为Harbor格式,所有任务都配有完整的容器定义、前置测试和完成测试。算力需求方面:Llama-3.2-3B和Qwen2.5-7B在4块A100上训练约2天,Qwen3-8B-openthinker-sft在8块B200上训练约8小时,这在学术实验室级别是可以复现的。然而,完整管线的复现面临几个挑战:(1)需要访问o3模型进行可解性过滤,这需要OpenAI API访问且成本不低;(2)3255个任务的容器构建和验证需要大量计算资源和时间;(3)Apptainer容器环境的构建依赖特定的系统配置。此外,作者在论文中详细描述了PPO的超参数设置(裁剪参数、温度、批大小等),但没有提供完整的训练配置文件,可能需要参考开源代码获取。总体而言,对于有充足计算资源的研究者来说,复现是可行的,但完整的管线复现(包括任务生成)需要较多的工程投入。