(2509) Kimi-Dev(48分)
🌺 论文摘要
参考链接
核心方法
Agentless 训练(3阶段) +SWE-Agent适配(SFT)。Agentless训练:
BugFixer+TestWriterMidTrain:Diff Patch+PR Commit+定位推理合成数据+agent交互合成数据CoT SFT:DeepSeek-R1 蒸馏(SWE-Gym, SWE-bench-extra)CodeEdit RL:执行结果奖励+难度课程学习+正样本强化
SWE-Agent适配:5.7k SWE-smith 轨迹数据 做SFT
训练数据:是不可能开源的。
模型效果(Qwen2.5-72B-Base)
Agentless 训练SWE-verifiedPass@1 48分,TTS(40) 达60分。SWE-Agent SFT适配Pass@1 48分,优于SWE-Agent-LM-32B40.2分;Pass@10达74分,优于AgentlessPass@30 73.8分,推理次数仅1/3。
重要结论
- Agentless训练可以带来
Skill Priors,更好适配SWE-Agent RL的先验最强:做SFT学的快好、做RL效果也更好。
关键贡献
多阶段CodeAgent训练方法论Agentless 训练(MT+SFT+RL) +SWE-Agent适配(SFT)。- 先从Agentless打基础,再逐步做Agent,模型不偏科、适应性强。
问题背景
❓问题背景
SWE 2条线路各有弊端
SWE-Agent/OpenHands:更灵活,端到端难训练Agentless:流程模块化更好,更易RLVR训练。但探索空间灵活性有限。
Trade-off
- 不从0开始训
SWE-agent,先通过Agentless训练诱导出技能先验。 - 先用
Agentless打基础,再训SWE-agent
Agentless 训练框架(BugFixer+TestWriter)
BugFixer
生成patch,解决bug
TestWriter
生成单元测试,复现bug
成功标准
Patch(BugFixer)通过测试用例(TestWriter)。修复前:fail;修复后:成功。
依赖2个技能
问题定位:修Bug找源文件;写测试找测试文件。代码编辑:修Bug改源文件;写测试插入新测试函数。

Mid-Training
MidTrain 概览
基础配置
- 模型:
Qwen2.5-72B-Base - 任务:
Next Token Prediction
MidTrain 数据
150B高质量、真实数据。- 数据构成:包括:
百万级的Github Issue+PR commit数据。Diff Patch数据:50B,类似AgentlessPR commit 数据:20B,类似SWE-Agent推理交互 合成数据:20B,上采样4倍即80B,包括思考推理、agent交互数据。
超参
- Global batch size:256
- 上下文长度:
32k - 学习率:2e-5, cosine decay, 2e-6
- Warmup:3B tokens, Decay:150B tokens
仓库过滤:
低于5star、SWE-bench已包含的仓库。PR 收集:GithubAPI 查询
已合并的PR- 丢弃
废弃、未审核、被替代的PR。
- 丢弃
代码变更2种格式
Natural Diff Patch+PR Commit Pack
Diff Patch 数据处理 (Agentless)
Diff Patch
Search-Replace格式,模型最终输出,和Agentless一致。
Issue 描述
- PR
关联的Issue内容或PR 标题。
PR 过滤规则
- 仅保留
py, md, rst文件修改的PR - 仅保留
python的diff,重写为search-replace块 - 删除
文件新增和删除的PR。 - 每个PR
修改的文件不超过3个。 - 每个PR的
search-replace不超过5个。
4 类Prompt 模板 (Agentless)
BugFixer定位和修复,TestWriter定位和修复。- 作用:用于后续冷启动、RL、TTS。训练时:Prompt做Mask。
最终数据规模
50BDiffPatch 数据
PR Commit Pack 数据处理 (SWE-agent)
Commit Pack 说明
- 人类的
提交序列,每一步包含commit+代码变更 - 和
SWE-Agent相似
处理逻辑
- 仅保留
py, md, rst文件修改的PR。 - 每个PR 最多
修改5个python文件 - 过滤开发者签名和Github ID
最终数据规模
20BCommit Pack 数据。
Agent推理数据 合成
背景
有代码diff数据,但无思考过程,为什么修改这个文件?
方法
使用
LLM去预测修改文件,保留正确预测修改文件的数据。LLM:
Qwen2.5-72B-Instruct- 但需经过
SFT微调提升推理质量 - 微调数据:
DeepSeekR1蒸馏的2k数据。
- 但需经过
数据:
海量Github题目。筛选:仅
保留推理正确的数据。
最终数据规模
10B推理合成数据
Agent交互数据 合成
背景
- 目的:
加强agent能力。 - 方法:
自定义工具,模拟agent-环境交互,不执行,模仿文件系统操作,降低成本。
文件定位 (Agentless Stage1)
自定义模拟工具:- 仅允许
文件查看和关键词搜索,禁止shell,无需实际执行。 工具集放在SystemPrompt里。
- 仅允许
- Rollout模型:Qwen2.5-72B-Instruct。
- 对应后续训练策略:
仅对SystemPrompt做Loss Mask,轨迹的action和observation都做学习训练。- 一般
环境返回是需要mask的。但这里保留,是为了学习理解环境返回结果。
代码编辑 (Agentless Stage2)
定位结果来自stage1,现在进入stage2做代码编辑。负样本训练- 故意给出
定位错误文件,手动注入Pattern:我意识到,不需要修改这个文件。 增强模型反思能力。
- 故意给出
PR Commit Pack转换成轨迹形式Commit:推理步骤。Code Update:动作,str_replace、insert工具格式。
- Rollout模型:Qwen2.5-72B-Instruct。
最终数据规模
10BAgent交互数据。
LongCoT 冷启动
冷启动数据蒸馏
- 任务:SWE-Gym,
SWE-bench-extra - 角色:
Bugfixer,TestWriter - 蒸馏模型:
DeepSeek-R1-250120 - 数据量:BugFixer大约2k?
SFT 效果
- 获得
推理技能:问题分析、方法规划、自我完善、探索替代方案等。
Code-Edit RL
RL 策略
背景
- 经过
MidTrain+LongCoT SFT,模型已具有较强定位能力。 - RL仅关注:
代码编辑。
数据集
- 数据源:SWE-Gym, SWE-bench-extra ?
- 每
1个Prompt均有1个环境。 - 数据多样性:使用
多种Bug定位结果,作为LLM输入。 - 数据难度(
课程学习)难题标准:pass@16=0简单数据集:1.2k,难数据:除开简单的
RL策略(GRPO)
- 奖励:只看
执行结果,0、1,不看格式注释等内容。BugFixer:通过所有测试得1TestWriter:Fail2Pass。修复前:有Bug;修复后:无Bug。
- 课程学习
先只学简单,待分数超过阈值,再逐渐加入难样本。每100step加入500难样本。
- 正样本强化
- 后期性能进入
平台期,很难探索新解法。 - 使用
之前的正样本,加入迭代,做强化巩固记忆,冲刺效果。
- 后期性能进入
正样本强化 后期训练要稳定一些。

RL 环境
并发度
- 支持
1w 并发,2.5w docker镜像(来自各种数据集)
特点
Use-and-Destroy:沙盒只为1次执行,任务跑完后,立即摧毁。- 一套
自动构建镜像的流水线。
技术栈 (K8s + Sdecar)
Kubernetes(K8s):行业标准,容器编排,管理2.5w dockerSidecar Pattern:边车模式- 主容器:跑具体任务代码
- Sidecar容器:辅助工作,收集日志等。
SWE-Agent 适配
SFT 适配
背景
Kimi-Dev基于Agentless训练,已有Skill Priors- 但
SWE-Agent自由性更高,希望适配SWE-Agent
方法
- SFT 数据集:
SWE-smith 轨迹数据,5.7k(Claude蒸馏) - SFT 微调:
64k - 推理时:
128k+100轮交互。
Skill Prior 验证
背景
- 原则:先验越好,给一点数据,应该就快。
- 测试方法,基于
SWE-AgentSFT实验:给不同数量数据做SFT。RL实验:做1步SFT,然后做RL。
- 对比:
Base、MidTrain模型(MT先验)、SFT模型(SFT先验)、RL模型(先验)。
RL 模型 (RL先验)
RL先验最好,SFT训练学的最快、效果最好。更擅长做长线任务:LongCot转化为Agent长交互能力。- RL 模型到70步,仍然可解新问题;对比Base止于50步。
RL实验上,RL先验也比SFT先验好。RL自行悟出解题模式,不同于Claude。
Mid-Train 模型 (MT先验)
- SFT 起步慢,但只要数据够,很快追上第一梯队。
- 直接做RL,不会使用工具,没有正反馈,训练直接崩溃。说明:
冷启动+RL是必要的。
SFT 模型 (SFT 先验)
- Zero-Shot比RL强,但200条数据时,容易过拟合死记硬背。

Test-time self-play
背景
- RL之后,模型已掌握
BugFixer和TestWriter能力。 - 测试时,使用self-paly来协调2种能力。
生成阶段
- 遵循Agentless,为每个实例生成
40个patch和40个测试。 - BugFixer:第1个:
贪婪解码;剩余39个:温度=1采样,保证多样性。 - TestWriter:独立生成
40个测试。仅保留代码没修复时能报错的单元测试。- 过滤:去掉没有报错的测试。
验证阶段
解法
Patch集合:;单元 测试集合:。 每个Patch,去 验证每1个单元测试;针对 有无补丁2种情况分别记录下
报错数和 通过数并计算
Fail2Pass,Pass2Pass数量。
最终Patch
的得分: 高FP率+高PP率,能修bug+不会破坏原有功能。
Self-play 效果不如 Pass@N,优于投票。

实验设置(MidTrain+SFT+RL)
✍️实验设置
基础模型
- Qwen2.5-72B-Base
训练任务/数据
MidTrain:150Btoken,DiffPatch+PR Commit+推理数据+交互数据LongCoT SFT:2k+数据,SWE-Gym + SWE-Bench-extraCode-Edit RL:1k数据,SWE-Gym + SWE-Bench-extra
评测任务/数据
- SWE-Verified
算法/策略
Agentless 框架:BugFixer+TestWriter,都依赖定位和编辑能力。Mid-Train:NTP任务,Diff+PR+推理+交互模拟(文件定位和代码编辑)。SFT:DeepSeekR1 +2角色蒸馏,提升推理技能。RL (GRPO):结果奖励+难度课程学习+后期正样本强化
超参
- RL:
rollout=10,64k
关键结果(Qwen2.5-72B-Base, MidTrain+SFT+RL)
🍑关键结果
模型效果(Qwen2.5-72B-Base)
Agentless 训练:SWE-verifiedpass@1 48分,使用TTS(40)后,达60.4分。- SWE-Agent SFT适配:
- SWE
pass@1 48分,优于SWE-Agent-LM-32B40.2分。 - SWE
Pass@10 74分,优于AgentlessPass@30 73.8分,推理次数仅1/3。
- SWE
重要结论
- Agentless训练可以带来
Skill Priors,更好适配SWE-Agent RL的先验最强:做SFT学的快好、做RL效果也更好。- RL性能和回复长度正相关。
关键贡献
多阶段CodeAgent训练方法论。Agentless 训练(MT+SFT+RL) +SWE-Agent适配(SFT)。- 先从Agentless打基础,再逐步做Agent,模型不偏科、适应性强。
MidTrain各阶段,使用2k 冷启动数据后,评测SWE

RL 效果和训练长度有关。

未来方向
⛳ 未来方向
TestWriter 改进:目前生成测试不够全面,需提升质量。端到端SWE-Agent RL:目前Agent仅做了SFT,未来可做RL。环境扩展:利用合成环境进一步扩大训练数据规模。