LEGO-RL:面向编码智能体的原生框架强化学习 LEGO-RL: Harness-Native Reinforcement Learning for Coding Agents
将原生编码智能体框架桥接到策略梯度训练,SWE-bench解决率最高提升9.4个百分点
前置知识
策略梯度与GSPO
策略梯度强化学习通过采样完整轨迹并按优势加权来更新策略参数。GSPO是序列级代理损失:对每个任务采样一组 $G$ 条轨迹,计算长度归一化的重要性比率 $\sigma_i(\theta)=\pi_\theta(\tau_i)/\pi_{\theta'}(\tau_i)$,再用非对称裁剪边界 $\epsilon_{low}<\epsilon_{high}$ 限制更新幅度,组内优势用 $\hat{A}_i=(r_i-\bar{r})/(\mathrm{std}(r_{1:G})+\delta)$ 标准化。
本文所有主实验都基于GSPO,其组相对优势和裁剪机制直接决定训练稳定性,也是理解rollout与训练对齐问题的数学前提。
编码智能体框架(harness)
指包裹LLM的完整运行时,如OpenHands SDK、Claude Code、OpenCode,负责管理提示构建、工具调用接口、上下文压缩、历史记录维护和执行状态。智能体行为是策略模型与框架控制流的组合,同一模型在不同框架下的SWE-bench分数可以相差数个百分点。
本文的核心立场是框架本身就是优化问题的一部分:LEGO-RL不改动框架内部控制流,而是把整个框架当作环境,只训练其中被调用的策略。
稀疏混合专家模型(MoE)
MoE模型每个token只激活部分专家网络(如Qwen3.5-35B-A3B总参数35B、每token仅激活约3B),专家由路由器动态分配。推理服务与训练前向的路由实现可能不同,导致同一token在两侧算出不同概率,破坏重要性比率的正确性。
论文提出R3(rollout路由重放)专门解决这一失配,是其忠实优化支柱的关键技术,Table 3和路由一致性消融都围绕它展开。
SWE-bench Verified
真实仓库级缺陷修复基准:给定issue和代码仓库,智能体需定位并修改代码,再由可执行测试验证补丁是否真正修复问题。Verified是经人工筛选校验的子集,解决率(resolve rate)是编码智能体最重要的公开指标,训练集必须与它在仓库和实例两个级别严格不相交。
本文所有主实验都以SWE-bench Verified解决率为评估指标,理解其可执行验证机制也帮助理解论文的奖励设计与反奖励黑客防御。
奖励黑客(reward hacking)
指智能体利用环境漏洞获取高奖励而非真正完成任务,例如窥探评分文件、修改测试代码、绕过验证逻辑;环境侧故障也可能使奖励与智能体行为无关。这类被污染的信号一旦进入训练,会不断强化投机行为,使策略偏离任务目标。
可靠执行支柱的核心就是对抗奖励黑客:网络受限sidecar、执行期隐藏仓库历史、打包测试依赖等防御手段都针对这一威胁而设计。
研究动机
用强化学习训练编码智能体需要优化长时程行为:一次rollout可能涉及数十次模型调用、仓库浏览、工具调用、代码修改、依赖安装和测试执行,最后才得到一个稀疏的二值可执行奖励。这带来三重挑战。第一,训练与推理失配:OpenHands、Claude Code这类原生框架会在轮次间压缩、重序列化甚至重写交互历史,事后从对话记录重建的token序列与rollout时实际采样的token不一致,训练器无法忠实重算对数概率;稀疏MoE模型的专家路由在推理与训练两侧也可能不同。第二,执行与奖励不可靠:沙箱崩溃、依赖错误、验证器配置错误、超时会白白丢弃昂贵轨迹,而奖励黑客(如智能体窥探评分信息)会直接污染学习信号,且这些故障在异步流水线中跨阶段传播、难以定位。第三,通用RL框架(如verl、SkyRL)要求智能体改写自身的rollout接口才能接入,破坏了框架原生工作流,而框架本身对智能体行为影响巨大——同一模型在不同框架下SWE-bench分数可相差数个百分点。
本文的目标是本文的目标是构建一个不修改编码智能体框架内部控制流、就能把它们接入可扩展策略梯度优化的训练基础设施LEGO-RL。具体而言:保留框架原有的模型API、工具接口、提示构建与上下文管理策略,接入新框架只需一个轻量适配器;在优化侧实现忠实性,即训练器看到的token、掩码、概率与rollout时完全一致(对MoE还要求路由一致),使rollout与训练的概率相关性保持在0.99以上;在执行侧提供可扩展的沙箱编排、镜像缓存和分阶段防御,保证正向奖励确实对应真实任务完成;在运维侧提供自动化运行验证、实时监控和轨迹级诊断。最终在三个原生框架上训练Qwen3.5-35B-A3B,使其SWE-bench Verified解决率显著超越基座和更强的专用基线。
与已有工作不同的是,现有agentic RL框架大致分三类:slime、MOLT、SkyRL、AReaL把rollout留在RL框架内,但智能体必须适配框架的交互与环境抽象;Polar、rLLM、OpenForgeRL保留智能体框架、在模型API层观测交互;Agent Lightning用SDK回调注入;ALE则通过同时掌控训练器、沙箱和CLI实现全栈一致。LEGO-RL走模型API路线,但与已有工作的本质区别在于系统性:Table 1对十一个框架的八项能力对比显示,没有任何一个现有框架同时覆盖harness原生保真(token级对齐、历史重写下对齐、R3异步)、执行与奖励完整性(可靠执行、反奖励黑客防御)以及训练可观测性——多数框架在奖励黑客防御和可观测性两列为空白。LEGO-RL还把训练基础设施嵌入数据准备、预检验证、训练运行、Live UI、人工审查的五阶段闭环工作流,把能跑通提升为可诊断、可迭代。
核心方法
LEGO-RL整体架构分四层。最底层是沙箱执行:每个试验在Kubernetes、Docker或云容器服务的独立沙箱中运行未修改的智能体框架,任务镜像用Nydus懒加载快照器按需流式拉取chunk,智能体运行时和评分工具链只读挂载而非每次重装,包解压写入重定向到内存emptyDir。中间是进程内代理:与推理引擎同机部署,支持OpenAI和Anthropic两种API,直接从服务会话捕获token ID、对数概率、响应掩码和专家路由决策,再经统一负载均衡(粘性路由)转发给推理服务器。上层是数据缓冲与训练器:完成的轨迹和验证器奖励进入缓冲区,基于verl的训练器用GSPO序列级损失优化,支持VeOmni、FSDP、Megatron后端与全异步训练(策略陈旧度上限1、部分轨迹跨权重同步恢复)。最外层是五阶段闭环工作流,由智能体插件自动化协调。主实验设定:温度1.0、200k token上下文、每任务8条轨迹、126个训练步。
核心创新是忠实性要求的工程实现:轨迹对数似然 $\log\pi_\theta(\tau)=\sum_{(t,j)\in M(\tau)}\log\pi_\theta(a_{t,j}\mid c_t,a_{t,<j})$ 只有在训练器看到与rollout完全相同的上下文、token和掩码时才有意义,而真实框架恰恰会破坏这一点。LEGO-RL的解法是在模型服务边界、生成时刻就地捕获而非事后重建:进程内代理在消息粒度上对齐连续轮次——系统、用户、工具结果消息必须逐字匹配,工具调用按稳定标识符而非序列化参数关联,从而容忍框架重新序列化参数而不改变捕获的策略token;匹配的策略生成span保留原始token ID、对数概率和响应掩码,被重写或框架自己生成的内容只作条件上下文、不进入损失集合 $M(\tau)$;子代理请求隔离为独立会话防止token混入父轨迹;无法可靠对齐的内容直接排除而非强行重建。对稀疏MoE,代理额外记录rollout时的路由决策,训练时通过R3重放,保证训练侧概率计算走与行为策略相同的专家。
方法步骤详情
流水线分五阶段。(1) 数据准备:原始仓库快照与issue经Harbor转成带eval.sh的可执行任务实例;36,884个OpenSWE候选先经规则筛选(基本有效性、仓库多样性、粗粒度复杂度)剩22,806个;构建与验证器验证再剔除无法可靠执行或评分的任务(检查发现约2.5%的任务验证逻辑错误地应用参考补丁),剩21,681个;再用Qwen3.6-27B配合OpenHands框架做rollout难度筛选,保留8次尝试中解决1到3次的任务,最终得到2,699个训练索引,与SWE-bench Verified在仓库和实例级严格不相交。(2) 预检运行验证:解析实验配置、校验跨参数约束与资源可用性(GPU利用率、端口),生成预检报告供确认。(3) 训练运行:全异步rollout生成解耦优化;终止感知准入——基础设施失败的轨迹从组相对优势估计和策略损失中排除(掩码保留批一致性但优化权重置零),到达轮次或token上限的有效不完整轨迹保留验证结果。(4) Live UI展示终止原因分布、任务网格、轨迹级证据和rollout-训练一致性。(5) 人工审查诊断失败、提出新假设,闭合循环。
技术新颖性
与最接近的工作相比,本文的技术新颖性有四点。第一,历史重写下的一致性:Agent Lightning等方案依赖SDK回调,而LEGO-RL的进程内代理直接从vLLM服务会话流式捕获生成内容,配合基于标识符的工具调用匹配,解决了93%(207/222)的工具调用重序列化错配;子代理会话隔离把混流问题从6.3%降到0%(27次试验复检)。第二,R3路由重放:在harness原生设置下解决MoE的rollout-训练路由失配,把Pearson相关性从0.9946提升到0.9993、平均token对数概率差异从0.0062降到0.0025,且故意错位重放会退化所有对齐指标,验证了路由必须与生成它的token绑定的设计。第三,奖励完整性被当作一等公民:网络受限特权sidecar、执行期隐藏仓库历史、测试依赖打进任务镜像等分阶段防御,加上终止感知准入和阶段化超时,系统性而非零散地保护稀疏二值奖励。第四,可观测性内建于框架:Live UI把终止原因、任务实例、轨迹、工具使用与rollout-训练一致性关联,能明确区分策略退化与执行、任务设置、集成故障。
实验结果
主实验在三个原生框架上各训练126步:OpenHands SDK从64.0%提到70.4%(+6.4个百分点)、Claude Code从62.4%到68.2%(+5.8)、OpenCode从57.2%到66.6%(+9.4),策略熵全程稳定;rollout-训练Pearson相关中位数不低于0.998,p99每轨迹平均token对数概率差异小于3×10⁻³。LEGO-RL模型分别超过下一代基座Qwen3.6-35B-A3B 3.0、4.8、6.0分,并全面超过KAT-Coder-V2.5-Dev(67.0/66.8/64.8)。任务筛选消融:全难度带(0.671)与上半带(0.670)优于下半带(0.640),未筛选池中72.7%任务从未被解决、13.4%总被解决。行为上,OpenHands中修改后重读文件的比例从73.6%升到98.1%,首次编辑前检查的文件数从3.5升到6.9,平均轮次从46.6涨到83.1(+78%)。系统层面,智能体执行占总时延91.3%;同样7.5小时异步完成7步对同步3步;Nydus懒加载将冷启动中位延迟改善1.7倍、网络流量从21.6GB降到1.59GB。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| SWE-bench Verified(OpenHands SDK框架) | 解决率(%) | 70.4 | 64.0(Qwen3.5-35B-A3B基座) | +6.4个百分点 |
| SWE-bench Verified(Claude Code框架) | 解决率(%) | 68.2 | 62.4(Qwen3.5-35B-A3B基座) | +5.8个百分点 |
| SWE-bench Verified(OpenCode框架) | 解决率(%) | 66.6 | 57.2(Qwen3.5-35B-A3B基座) | +9.4个百分点 |
| SWE-bench Verified(对比专用编码模型) | 解决率(%) | 70.4 / 68.2 / 66.6(三框架) | KAT-Coder-V2.5-Dev:67.0 / 66.8 / 64.8;Qwen3.6-35B-A3B:67.4 / 63.4 / 60.6 | 三框架全部领先,最多超出KAT-Coder 3.4分、超出新一代基座6.0分 |
| Rollout-训练对齐(MoE路由重放R3) | Pearson相关 / 平均token对数概率差异 | 0.9993 / 0.0025 | 无路由重放:0.9946 / 0.0062 | 相关性+0.0047,差异降低60% |
| 训练吞吐(同步 vs 异步,匹配配置) | 7.5小时完成训练步数 | 异步7步 | 同步3步 | 步时间减少2.5倍(校正算力差后约1.9倍) |
局限与改进
作者承认的局限:所有实验只用Qwen3.5-35B-A3B且三个框架各自独立训练,跨架构和混合框架训练的泛化未验证;生产级训练成本限制每个主配置只能跑一次,训练增益和系统效率的运行间方差未量化;可执行验证只提供粗粒度二值奖励,无法给错误恢复等中间行为分配credit;反奖励黑客防御只覆盖实验中观察到的失败模式,不保证对所有投机策略鲁棒;沙箱和镜像加速比依赖部署环境,是实现的度量而非框架的普适性质;诊断分析是从执行和轨迹证据推断可能原因,不构成自动化因果验证。我的补充观察:难度筛选用单一模型-框架配置(Qwen3.6-27B+OpenHands),对其他框架可能引入选择偏差,作者虽称任务池跨框架有效但缺乏直接消融;固定任务池随策略变强而老化(OpenHands零方差组从44.7%涨到51.4%),持续重筛选的运维成本被低估;同步-异步对比中两个运行所用GPU组的优化器吞吐不同,2.5倍加速校正后为1.9倍,外部效度打折。
独立分析的弱点
第一,单运行方差问题:每个主配置只跑一次,+5.8到+9.4的增益中无法排除随机波动,改进方向是多种子重复并报告置信区间,或用多个检查点的平均评估平滑方差。第二,奖励粒度太粗:纯二值验证奖励让绕远路修复与高效修复同分,作者数据也显示中间命令失败后的恢复改善有限(63.9%到66.8%),说明稀疏信号难以塑造恢复类行为;改进方向是引入部分通过测试的分级奖励或基于轨迹的过程奖励模型。第三,框架与策略深度耦合:同一基座在三个框架上基线相差6.8分(57.2%到64.0%),单框架训练的增益未必迁移——KAT-Coder在Claude Code上+3.4但在OpenHands上-0.4正印证了这一假设;改进方向是作者提出的跨框架混合训练,并在损失中正则化框架间行为一致性。第四,任务池老化:零方差组持续增长(OpenHands 44.7%到51.4%)意味着固定池的监督信号密度递减,改进方向是在线任务生成与基于实时通过率的周期性重筛选课程机制。第五,可观测性闭环仍依赖人工审查,自动根因分析与早停(论文仅有一个提前8步触发的案例)尚未系统化,可引入异常检测模型自动触发。
未来方向
作者明确提出的方向包括:混合任务池训练,让一个策略同时学习仓库修复和其他可验证软件任务;跨框架单策略训练,一个策略同时在多个框架上训练,直接回应Table 2暴露的框架依赖性;为更多智能体框架添加适配器;超越终端二值奖励的更细粒度credit分配;Live UI的自动化诊断。基于本文成果可延伸的研究:其一,把难度筛选做成持续课程——利用Live UI已有的8次rollout通过率数据在线调整任务池,对抗零方差组从44.7%到51.4%的增长;其二,探索奖励黑客防御的形式化,将网络限制、历史隐藏等机制编码为可审计的沙箱策略规范并给出覆盖性论证;其三,定量研究rollout-训练对齐度(Pearson相关性、KL)与最终性能的关系,为其他MoE模型的agentic RL给出工程基线;其四,把框架即环境的观点理论化,研究跨框架策略蒸馏或框架不变表示学习;其五,在不同规模模型上检验增益随参数量的变化规律,特别是小模型是否从阶段化防御中获益更多。
复现评估
开源程度较高:完整框架、训练后模型和数据集均已发布(GitHub: LegoX/Lego-RL,HuggingFace: LegoX/Lego-RL2026),2,699任务训练索引公开在huggingface.co/datasets/LegoX/Lego-RL-2699,附录I给出完整超参数(GSPO、rollout温度1.0、200k上下文、陈旧度1、每任务8条轨迹、126步)。但复现主实验门槛很高:需要35B级MoE的训练算力(VeOmni混合引擎加FSDP/Megatron后端与vLLM推理集群)、Kubernetes或Docker沙箱编排、Nydus快照器与特权sidecar网络管控等生产级基础设施,普通学术实验室难以完整复现;SWE-bench Verified评估本身也需大规模可执行验证资源(温度0.7、200轮)。较可行的复现路径:用公开模型和索引只做评估验证;或在小型MoE上复现R3路由重放与token对齐机制,检验0.9946到0.9993这类指标;三级任务筛选流水线(规则筛选、构建与验证器验证、rollout难度筛选)逻辑清晰,可在小规模任务池上低成本复刻。
论文图表