从代码本身长出训练场:CodeMidas 如何把已实现功能变成编码智能体的强化学习环境
核心概要
CodeMidas 提出一条以源代码为唯一任务特定输入的智能体流水线,把开源代码库中已实现的功能转化为可执行、可验证的编码强化学习环境,产出 5,545 个训练任务(来自 3,185 个代码库、23 种编程语言、15 个技术领域),并用 GRPO 训练 MiMo-V2.5,在五个外部基准上全部取得提升,包括 DeepSWE 通过率从 10.0% 升至 21.7%、ProgramBench 的 Almost Solved 从 4.5 升至 21.5、Terminal-Bench v2.1 从 63.7% 升至 72.2%。
深度剖析
把“已实现的功能”本身当作任务来源:智能体探查代码库结构与构建元数据,定位具有公开入口和可观察结果的功能,追踪公开入口与共享依赖划定任务范围,删除核心实现并把剩余代码调整为连贯的起始状态,同时保留原实现作为参考解。 既有流水线多依赖开发记录(issue、PR、commit)、既有测试或文档来派生任务,任务覆盖被这些记录的覆盖范围所绑定;CodeMidas 以源代码为唯一任务特定输入,从而把可提取的任务范围扩展到没有相应开发记录的已实现功能上。 论文以表 1 逐项对比任务特定输入需求,CodeMidas 在“无需 issue、PR、commit、既有测试、书面描述”五项上均满足,并覆盖 23 种语言,为对比中最广。
测试由原始代码的执行结果锚定:智能体把任务陈述中的行为要求映射为测试输入与边界情形,在参考副本中调用公开入口并记录结果,CLI 工具用命令执行、纯函数用输入输出用例、有状态 API 用调用序列;随后逐条审查断言,剔除陈述未支持的约束(如精确措辞、偶然顺序、内部结构),无行为替代的私有符号断言则拒绝该任务。 这使验证器既拒绝错误解,又接受替代的正确实现,直接回应测试预言(oracle)问题;论文引用 EvalPlus 与 PatchDiff 说明扩展测试能发现被原测试套件漏掉的错误程序、以及被 SWE-bench 测试错误接受的补丁。 方法层面给出断言审查与参考解重跑流程;环境层面要求每个任务在六个全新容器中检查执行一致性——两个起始代码库运行必须失败、四个参考解运行必须通过。
训练前用智能体 rollout 过滤环境:对抗式 rollout 在求解者可见环境中搜索编译产物、缓存、构建智能体遗留文件与已安装的目标项目副本,记录可疑利用的命令与输出并由独立审查核对;另有编码智能体每任务尝试四次,由审查智能体对照陈述、验证器与参考解判断实现是否满足要求,标记假阳性与假阴性;再以“既有成功也有失败”的 rollout 结果筛选任务。 把环境可靠性从静态执行检查推进到基于 rollout 的泄漏探测与验证器一致性审查,并明确说明全通过或全失败的结果无法揭示原因(可能是难度,也可能是弱测试或陈述缺漏),因此不作为保留依据。 三类过滤步骤在方法中逐项描述;消融显示高质量 5k 池在 SWE-bench Pro、DeepSWE、CodeMidas Val 上分别比未清洗未过滤的约 8k 样本高 0.59、4.59、4.49 个百分点,且高质量 3k 子集在三项评测上也都优于该 8k 样本。
训练与行为分析:用 GRPO、二值执行奖励、批大小 32、每任务 32 次 rollout 训练 MiMo-V2.5;轨迹分析显示智能体探索更多(首次编辑前的读/搜调用从 27.2 增至 40.1)、写码前推理与写出代码的重合度更高(drafting ratio 从 0.358 增至 0.629)、最终编辑后的不同验证命令从 2.03 增至 2.53,且智能体自行编写并执行的检查在同一任务同一检查点内对应平均高 4.2 个百分点的通过率(95% CI 1.8–6.6)。 把基准分数提升与可观测的行为变化联系起来,并在 SWE-bench Pro、ProgramBench、Terminal-Bench v2.1 上比较早期与晚期检查点,显示探索增加等变化也出现在外部任务上。 行为指标在附录 B 中给出明确定义(探索按去重后的读/搜请求计数,drafting 按 16 字符片段以步长 4 采样,自验证按最终编辑后的不同验证命令计数);置信区间按整任务重采样并保留该任务的全部检查点。
启示与展望
该工作面向需要为编码智能体构建强化学习环境的训练与数据工程场景:适用对象是拥有可执行构建流程、公开入口与可观察行为的开源代码库,任务形态覆盖命令行工具、纯库函数与有状态库 API,评测范围是问题修复、整程序构建、代码翻译与终端工作。它使后续工作可以在不依赖 issue、PR、commit、既有测试或书面描述的前提下扩展任务池,并把“环境可靠性”作为可操作的过滤目标;对只关心推理时提示工程或非编码任务的读者,其直接可迁移性有限。
读者仍会关注:过滤后的任务在训练分布之外的新代码库上如何表现;全通过或全失败被剔除的任务中,难度与缺陷各占多少(论文明确指出这些结果无法揭示原因);自验证与更高通过率之间的关联在同一任务同一检查点内成立,其因果方向仍有待进一步刻画;此外本次载入的是论文全文文本,图表(如语言与领域分布、参考解规模分箱、学习曲线)以文字描述形式呈现,具体图形细节未直接可见。
