小米CodeMidas从开源仓库源码造5545个RL任务,DeepSWE从10.0%升到21.7%

CodeMidas: Scaling Agentic Coding RL Environments from Code Itself

Bowen Ye, Lei Li, Shicheng Li, Zihao Yue, Linghao Zhang, Hanglong Lv, Yuanxin Liu, Wenhan Ma, Hao Tian, Rang Li, Jinhao Dong, Yikai Zhao, Xiangwei Deng, Hailin Zhang, Liang Zhao, Qi Liu, Lingpeng Kong, Tong Yang, Fuli Luo

cs.AI

2026-09-19

小米把开源仓库里已实现的功能改成可执行编码RL环境,完全不依赖issue或PR。5545个任务训练MiMo-V2.5后,DeepSWE从10.0%升到21.7%,ProgramBench Almost Solved从4.5升到21.5。

这篇在解决什么

训练编码 Agent 的强化学习缺两样东西:任务要多样,奖励要靠得住。现有流水线大多绑在开发记录上,issue、PR、commit、现成测试或文档覆盖到哪,任务就只能做到哪。开源仓库里已经实现、能跑起来的功能远比这些记录多,却很少被直接拿来当 RL 环境。

CodeMidas 的主张很硬:任务专用输入只需要源码。把已实现功能改成「还没写完、但有隐藏测试」的开发起点,用原代码的执行结果当测试 oracle。

方法

流水线分四段,每段都有 Agent 在干活。

保留下来的训练集有 5545 个任务,来自 3185 个仓库,覆盖 23 种语言和 15 个技术域。参考补丁中位数 142 行,65.9% 触及至少两个源文件。Python、TypeScript、Go 分别占 21.4%、18.3%、16.2%。

训练用 MiMo-V2.5,GRPO,二元执行奖励,batch 32,每任务 32 条 rollout。验证器只在评分时注入,求解过程看不到。

结果

五个外部基准全部上涨(相对初始策略,百分点):

基准指标初始RL 后提升
SWE-bench Propass rate50.354.4+4.1
DeepSWE v1.1pass rate10.021.7+11.7
ProgramBenchAlmost Solved4.521.5+17.0
RepoZero C2Rustpass rate40.551.8+11.3
Terminal-Bench v2.1pass rate63.772.2+8.5

内部 CodeMidas Val(200 个留出任务)从 35.0% 升到 44.7%。高质量子集 1k / 3k / 全量 5545 上,DeepSWE 为 17.57 / 19.05 / 21.70,Val 为 41.30 / 43.22 / 44.73。全量比未清洗的约 8k 样本在 Pro / DeepSWE / Val 上分别高 0.59 / 4.59 / 4.49 个百分点;3k 高质量子集也全面超过那份 8k。

训练后期,编辑前的读/搜调用从 27.2 升到 40.1,写代码前草稿重合率从 0.36 升到 0.63,编辑后不同自检命令从 2.03 升到 2.53。同一任务同一 checkpoint 上,Agent 自己写并执行检查的 rollout,通过率平均高 4.2 个百分点。这些行为变化在 SWE-bench Pro、ProgramBench、Terminal-Bench 上也看得到。

为什么重要

编码 RL 的数据瓶颈,不一定要等 GitHub issue 长出来。能跑的开源功能本身就是规格加参考解。清洗和过滤比堆数量更值钱:3k 干净任务打过 8k 脏样本。学到的也不只是「会修 issue」,而是会探仓库、会自己写检查,并且迁到修 issue、从零写程序、终端任务上。

对只想扩 SWE-bench 克隆集的人,这条路更宽,代价是构造流水线本身很重,每条任务都要过执行一致性和多次 rollout。

局限与存疑

只能从已经实现的功能出题,仓库里没写过的能力出不来。测试从原实现的执行里长出来,oracle 仍可能过严或过松,论文用评审 Agent 抓不一致,没有独立的人工逐条审计规模。全过/全挂的任务被丢掉,可能同时丢掉太简单和真正难的题。实验只训了 MiMo-V2.5,换底座会不会同样涨,没有数据。过滤本身的算力开销没有单独报价。

术语

原文与代码

相关论文

全部论文解读