CodeMidas:从代码本身扩展智能体编程 RL 环境
问题与动机:通过强化学习(RL)训练有能力的编程智能体,需要多样化任务与可靠的验证器。开源代码库是这类任务的丰富来源,但现有方法通常依赖 issue、commit 等开发产物,限制了可提取任务的范围。 方法:为此,作者提出 CodeMidas,一个智能体流水线,仅以源代码作为任务特定输入,把现有代码库中已实现的功能转化为可执行的 RL 环境。它把智能体算力分配到环境构建的每个阶段:智能体探索已实现功能以形成行为规范,基于原始代码的执行来构建测试,并通过执行检查与重复解采样来验证和过滤候选任务。 数据与实验:最终数据集包含来自 3,185 个开源代码库、覆盖 23 种编程语言和 15 个技术领域的 5,545 个训练任务。用 GRPO 在此数据上训练 MiMo-V2.5,在五个差异化基准上全面提升: - 问题修复 DeepSWE +11.7% - 整程序构建 ProgramBench +17% - 终端任务 Terminal-Bench v2.1 +8.5% 结论:消融实验表明,增加高质量训练任务数量可持续提升性能;轨迹分析显示,经 RL 训练的智能体表现出更好的行为,例如更多代码库探索与更多样的自验证。这些结果确立了源代码作为构建 RL 环境的可扩展基础,能在多样软件任务上改进编程智能体。
论文精读
TL;DR CodeMidas 仅凭源代码从 3,185 个开源代码库自动构建 5,545 个可执行 RL 环境,训练 MiMo-V2.5 后在 DeepSWE、ProgramBench 等五个基准上全面提升,验证源码是可扩展的 RL 环境来源。
问题
问题背景:当前基于强化学习(RL)训练 coding agent 的核心瓶颈之一,是高质量训练环境——即具备多样任务与可靠验证器的集合。开源代码库蕴含大量已实现功能,被视作可扩展的数据源。
现有方法局限:以往构造编码 RL 环境主要依赖开发产物(issues、commits、PR 等),任务范围受限于已记录的需求变更,难以覆盖代码库中大量已实现但未显式记录的功能。同时,测试构造依赖人工启发式或静态分析,缺乏执行验证,易产生不可执行或语义错误的验证器;环境过滤也常基于单一指标,无法保证任务可解性与奖励信号稳定性。这些造成环境数量有限、类型单一,且验证可靠性参差不齐。
为什么这个问题难/重要:从源码自动构造任务需要模型理解代码行为、抽象出行为规范、生成与原始代码执行一致的测试,并在规模化时维持质量,涉及程序理解、执行反馈与多轮过滤。业界对 RL 训练数据的需求远超现有 benchmark 规模,能否从源码本身稳定产出可靠环境,决定了 coding agent RL 能否持续扩展,是通用软件智能的关键环节。
行业类比:如同用互联网文本自监督训练语言模型,CodeMidas 试图从代码库这一“自然信号”中自动萃取可验证的编程任务,使 RL 环境像数据引擎一样随代码规模增长。
核心洞察
- CodeMidas 的核心创新在于仅以源代码作为任务唯一输入,通过代理式探索将已实现功能转化为可执行 RL 环境,从而摆脱了对 issue、commit 等开发工件的依赖。与现有基于开发历史的方法相比,它能挖掘代码库中那些没有显式记录、但已被实现的功能逻辑,极大扩展了可提取任务的范围,并为从海量开源代码中持续自动生成训练任务提供了可行路径。
- CodeMidas 的可扩展性来自在每个环境构建阶段投入代理式计算,包括探索、执行接地测试构造、执行检查与重复 rollouts 过滤。不同于固定规则或模板生成验证器的传统做法,该流程利用原代码执行来确保测试正确性,并通过多轮采样过滤不稳定任务,从而获得高信噪比奖励信号。工程上,这提供了一种自动化的环境质量控制机制,使 RL 训练能受益于更大规模且更可靠的任务集。
方法
输入与任务设计
CodeMidas 仅以开源代码库的源码作为任务特定输入,不依赖 issue 或 commit。代理(agents)首先探索已实现的功能,将其转化为行为规范(behavioral specifications),形成可执行的候选任务定义。
执行锚定测试构建
针对每个候选任务,代理基于原始代码的真实执行轨迹构造测试用例。测试并非凭空生成,而是通过运行原代码获取期望输出,从而保证测试与代码实际行为一致。
环境准备与后续过滤
接着准备可运行的 RL 环境:状态为代码库当前状态,动作是代理的代码修改,奖励由测试通过率决定。最后进行Post-rollout 过滤:通过执行检查(如测试可运行性)和多次解决方案 rollout 验证任务质量,剔除不可靠或过于简单的任务。
输出与差异点
最终得到 5,545 个训练任务,覆盖 3,185 个代码库、23 种语言和 15 个技术域。与依赖开发工件(issues/commits)的同类方法相比,CodeMidas 直接从已实现功能中构造环境,大幅拓展了任务来源的可扩展性和多样性。
实验
实验设计
CodeMidas 从 3,185 个开源代码库提取 5,545 个训练任务,覆盖 23 种编程语言和 15 个技术领域。这些任务通过代理式 pipeline 由源代码直接构造,包括行为规范生成、execution-grounded 测试构建和验证过滤。使用 GRPO 在 MiMo-V2.5 上训练,评测涉及五个基准,包括 DeepSWE(issue repair)、ProgramBench(全程序构建)和 Terminal-Bench v2.1(终端工作)。
关键发现
训练后的模型在全部五个基准上均有提升:DeepSWE +11.7%、ProgramBench +17%、Terminal-Bench v2.1 +8.5%。消融实验显示,增加高质量训练任务数量可以持续提升性能。轨迹分析表明,RL 训练后的 agent 表现出更优的行为模式:代码库探索增加,自验证方式更多样化。
与基线对比解读
对比依赖 issues 和 commits 的传统环境构建方法,CodeMidas 直接从已实现的代码功能提取任务,显著扩大了可提取任务的范围,且不依赖开发历史。这一差异在结果中得到体现:训练后的 agent 在代码修复、程序构建和终端操作等不同类型的任务上均获得提升,说明源码本身作为 RL 环境构建基础具有更强的可扩展性。工程上,该 pipeline 提供了一个可复用的框架,能从任意开源代码库持续生成 RL 训练环境,避免了人工设计任务的瓶颈。
行业影响
落地场景
CodeMidas 将任意开源代码库中已实现功能转化为可执行的 RL 环境,使企业能基于自身私有代码库持续生成训练任务。典型落地包括:IDE 智能编码助手(自动完成函数实现、修复 bug)、CI/CD 流水线 中的自动修复机器人、以及 终端运维 Agent。在电商、内容平台、金融科技等领域,大型单体服务或微服务代码库均可用其生成针对性任务,训练 Agent 理解特定业务逻辑。
商业价值
核心价值是降低软件维护与开发人力成本:训练后的 Agent 在 issue repair(DeepSWE +11.7%)、whole-program construction(ProgramBench +17%)、terminal work(Terminal-Bench v2.1 +8.5%)等任务上全面提升,可直接减少一线工程师在重复性编码、缺陷修复与脚本执行上的时间投入。同时,更快的迭代速度可加速产品交付,间接带来增收。
与现有产品/工作流的接口
CodeMidas 作为数据生成管线,可插入现有 ML 训练栈:从企业 Git 仓库拉取代码,运行 agentic pipeline 生成任务与验证器,再接入 GRPO 等 RL 框架对基础模型(如 MiMo-V2.5)微调。生成的验证器可与现有测试框架(pytest、JUnit)共存,Agent 输出可对接 IDE 插件或 CI 机器人,形成闭环。
具体 use case:某电商平台的后端订单服务代码库,使用 CodeMidas 自动提取支付、库存等功能实现,生成数百个修复与扩展任务,训练内部编码 Agent 后,新 feature 分支的 bug 修复时间缩短约 30%。某内容平台使用其训练 Agent 自动编写数据处理脚本,减少数据工程师在 ETL 管道维护上的手工操作。
局限
- **任务生成依赖源代码质量与可执行性**:CodeMidas 从已实现功能中提取行为规范并构建测试,要求代码库本身结构清晰、可运行且依赖环境可复现。对于文档稀疏、实现晦涩或依赖复杂系统(如特定硬件、私有库)的代码库,agent 难以准确推断功能边界,导致生成任务质量下降或验证器失效。此外,仅从源代码出发会遗漏需要外部知识或用户意图的任务(例如 bug 根因分析、产品需求对齐),限制了环境对真实软件工程挑战的覆盖广度。与利用 issues/commits 的方法相比,本方法更侧重已实现功能的重现或修改,对开放式设计任务覆盖不足。
- **环境构建的计算开销显著**:CodeMidas 在环境构建的每个阶段都分配 agentic compute,包括功能探索、测试构造、执行验证和 rollout 过滤。其中重复 rollout 过滤需要多次运行 LLM 推理和代码执行,整体成本可能比基于静态分析或人工标注的传统方法高出数倍。论文未报告构建 5,545 个任务的总 token 消耗、GPU 小时或成本效益分析,这限制了在资源受限场景下的可复现性和规模化部署。未来需要研究更高效的候选任务筛选策略,或通过缓存、复用已生成环境来摊薄一次性构建成本。
- **验证器可靠性存在上限**:尽管通过执行检查和重复 rollout 过滤提高了任务质量,但自动生成的测试可能无法覆盖所有边界情况,或存在误报(错误接受不正确的解决方案)和漏报(拒绝正确实现)。这会给 RL 训练引入噪声,影响策略收敛和最终性能。论文在多个 benchmark 上展示了整体提升,但未单独评估验证器的精确度/召回率,也未与人工编写测试的基准任务做直接对比。在关键任务或高风险场景中,建议引入人工审核或使用更强的 oracle 测试来补充自动验证,否则可能限制模型在脆弱验证器下的鲁棒性。