(2601) daVinci-Dev: Agent-native Mid-training for Software Engineering (58.5分, SII-GAIR)
🌺 论文摘要
参考链接
核心方法
Mid-Train:在MidTrain阶段注入Agent能力,提高PostTrain上限Agent-native Data:上下文原生轨迹:68.6B,广度多样,把GithubPR打包成人类思考修改的连贯过程。环境原生轨迹:3.1B,深度真实,在真实环境中做开发收集轨迹数据。
Post-Train:SFT:SWE-Agent Scaffold。
模型效果(Qwen2.5-72B, MidTrain+SFT)
- 72B,SWE-V 达
58.5,超越Kimi-Dev 48.6(MidTrain+SFT+RL,且token消耗2倍) - 32B,SWE-V 达
56.1,超越许多更强基座(如Qwen2.5-Coder)训练的模型,32B SOTA。 具有泛化性,在GPQA/SciBench等科学推理Bench超过Base,提升底层多步逻辑推理能力。
重要结论
- 无论强弱SFT后训练,
有MidTrain对比无MidTrain效果好,都会带来提升3-5pt左右。 Agent-Native 效果优于 Kimi-Dev,得益于上下文原生和环境原生轨迹,更真实。- 缩放定律:随
MidTrain步数增加,Pass@1log线性稳定上升趋势,72B 54.9,32B 49.9。 - 在基础增加 ,带来微提升(72B +0.3pt,32B + 2pt),
引入真实环境语料有必要。
关键贡献
- 系统阐述
Agentic MidTrain,提出Agent-native Data。 - 方法有效,开源代码,训练recipe,开源68.6B上下文原生+3.1B环境原生轨迹数据。
问题背景(后训练局限+当前MidTrain问题)
后训练数据少上限低
❓问题背景
当前CodeAgent的后训练
- 后训练依赖:
SFT(正确轨迹)+RL(环境执行反馈,贵)。
后训练(SFT/RL)存在局限性
数据太少且成本太高仓库->可执行环境,太少;正确轨迹,成本高,太少。
后训练潜力有限- 受限于
基模固有能力上限,某些agent能力无法仅通过后训练学习到
- 受限于
当前MidTrain碎片化且无AgentNative属性
MidTraining 定义
- 用
特定领域数据做MT,比如数学和代码。 - SWE领域
- 让基模接触
大量的agent迭代过程数据(文件导航,编辑,工具调用等) - 让模型
潜力更高,后训练更高效。 - 真实开发:文件定位、修改代码、应用patch、执行测试等。
- 让基模接触
当前Mid-training 仍未被充分探索
任务碎片原子化
- 先前MidTrain把
文件定位和代码编辑拆分为独立任务进行训练,破坏了因果流。 - Agent
应当学会协调原子能力成连贯Loop来解决问题,而不是仅会原子能力。
- 先前MidTrain把
缺乏Agent-native属性
- 先前MidTrain都是
静态代码语料仓库,缺乏真实环境面临的动作-观察循环。
- 先前MidTrain都是
训练数据和真实环境存在严重分布差异
- 训练数据:
碎片化+缺乏Agent-Native,静态的。 - 真实开发环境:
动态的、富含真实反馈的
- 训练数据:
相关工作
Mid Training
- MidTrain 在
预训练和后训练之间,增加桥梁,喂高质量结构清晰的数据,提升后训练上限。 - Kimi-Dev:碎片化任务,拆分式教学。
- daVinci-Dev:
Agent-Native原生数据。
Agentic Training
- SFT:蒸馏AgentSFT数据。SWE-smith, BugPilot, SWE_rebench, SWE-Factory等。
- RL:SWE-AgentRL笔记。真实环境试错思考探索。
数据合成方法
阶段1:洗文稿+优中选优
- 让LLM
对文章进行重写或组合;再做拒绝采样,留下最好的。 处理静态文本
阶段2:角色扮演开脑洞
- 让LLM扮演
各种角色,开脑洞,凭空造出各种多样性数据。
阶段3:Agent时代
- 不仅需要静态文字,
更需要真实动作反馈。 - 让LLM在
虚拟环境中实操,记录下完整轨迹,用于MidTrain或SFT。
Agent-native Mid-training 核心方法
📕核心方法
Agent-native 数据核心思想
核心思想
- 构建
大规模、多样化的Agent-native 数据,保留模型经历的完整信息流和环境动态信息。 - 将
原本独立的定位、阅读、编辑、测试反馈等步骤,打包重构为连贯的解题工作流。
两种互补的数据轨迹
- 上下文原生轨迹:
广度与多样性,68.6B - 环境原生轨迹:
交互真实性,3.1B
上下文原生轨迹
上下文原生轨迹
- 重在
广度与多样性
数据量
68.6B-token
构建过程
- 爬取
Github PR,天然的解题过程,需求、思考、行动、反馈。 - 将
Issue-文件定位-文件内容-文本推理-多步代码修改打包到同一个训练样本中。 - 教会AI
人类思考修改的连贯过程。
数据源
: 多种语言仓库,Top 10k 高星仓库,400万PR,广泛。26.7B token。: Python语言仓库,大于5星,74w仓库,600万PR。41.9B token。
收集
PR收集接口:GitHub REST,GraphQL API
内容:
Issue、base commit、head commit,`net diff 计算相关文件使用base commit的parent,去做文件patch对比,而不是直接用PR metadata里的commit。
仓库和PR过滤
Star仓库过滤:通用仓库,top-10k;python 仓库,至少5星,- python不能只挑最火仓库,会导致代码风格单一
降低star门槛可引入大量普通开发者的真实代码。
PR 过滤:仅保留已合并PR;1次PR 仅修改1-5个文件。
重建
- PR内容增强:使用Qwen3-235B-2507生成
简洁PR摘要或修正简短无信息的PR摘要。 - 相关文件识别:逆向分析diff,识别相关文件。
- 模板化组织 (AI思考教科书)
真实工作流顺序组织数据- 仓库上下文、Issue(若有)、Pull Request、相关文件、
LLM摘要、代码修改。找哪改?文件定位。有什么?读代码。怎么改?编辑代码。
:XML格式; :Markdown格式, Search-Replace格式。- search-replace:模仿agent在真实环境中调用工具的动作。
- 最终过滤:
仅保留32k以内样本,提高训练效率。
环境原生轨迹
环境原生轨迹
- 在
真实开发环境运行Agent,收集轨迹。重在深度和真实性。 迭代反馈循环:编辑->测试->修正- 轨迹:
工具调用、测试执行、运行时错误、脚手架系统反馈等。
Task和环境
- 真实 Github PR 仓库,同SWE-rebench,构建
可执行 Docker环境,单元测试。
收集过程
- 使用
强模型(GLM-4.6)配合SWE-AGENT Scaffold在环境中进行真实 Rollout。 不做任何过滤:保留成功和失败的轨迹。数据量比SFT多很多。
数据量
1.85w轨迹,0.7B token;7.4w轨迹,2.4B token。- 总计
3.1B token
实验设置(72B, MT, SFT)
✍️实验设置
基础模型
Qwen2.5-32B/72B-Base,非code模型
阶段一:Mid-training (MT)
41.9B, 26.7B。总计 : 68.6B: 上采样3倍,总计4.5B。1个epoch,bs=1024,lr 8e-5,warmup 5%,cosine decay, 无Loss Mask。
阶段二:Post-training (SFT)
:0.11B, 弱SFT数据,仅作对比用。:0.7B, 强SFT数据,用作微调用。SWE-Agent Scaffold5个epoch,bs=128,lr 1e-5,warmup 10%,对User和Tool Token应用Loss Mask。
评测基准
- 核心指标:
SWE-Bench Verified(SWE-V) - 泛化指标:HumanEval, EvalPlus, GPQA, SciBench。
关键结果(Qwen2.5-Base-72B, MidTrain+SFT)
🍑关键结果
模型效果(Qwen2.5-72B, MidTrain+SFT)
- 72B,SWE-V 达
58.5,超越Kimi-Dev 48.6(MidTrain+SFT+RL,且token消耗2倍) - 32B,SWE-V 达
56.1,超越许多更强基座(如Qwen2.5-Coder)训练的模型,32B SOTA。 具有泛化性,在GPQA/SciBench等科学推理Bench超过Base,提升底层多步逻辑推理能力。
重要结论
- 无论强弱SFT后训练,
有MidTrain对比无MidTrain效果好,都会带来提升3-5pt左右。 Agent-Native 效果优于 Kimi-Dev,得益于上下文原生和环境原生轨迹,更真实。- 缩放定律:随
MidTrain步数增加,Pass@1log线性稳定上升趋势,72B 54.9,32B 49.9。 - 在
基础增加 ,带来微提升(72B +0.3pt,32B + 2pt), 引入真实环境语料有必要。
关键贡献
- 系统阐述
Agentic MidTrain,提出Agent-native Data。 - 方法有效,开源代码,训练recipe,开源68.6B上下文原生+3.1B环境原生轨迹数据。
未来方向
⛳ 未来方向
Scaling 扩展
上下文原生扩展:静态仓库,目前通用仅Top10k 仓库,未来可扩展海量长尾仓库。环境原生扩展:用Agent把PR转换成可执行Docker环境,获取更多高质量环境原生数据。多Agent协作:当前仅单Agent,未来可加CodeReview/多开发者讨论等协作原生轨迹。
集成RL
- 本文核心是
Agent-native MT,仅初步结合SFT,未来可集成RL,探索更高性能。
(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 数据处理 (50B, 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 数据处理 (20B, SWE-agent)
Commit Pack 说明
人类的提交序列,每一步包含commit+代码变更- 和
SWE-Agent相似
处理逻辑
- 仅保留
py/md/rst文件修改的PR。 - 每个PR 最多
修改5个python文件 - 过滤开发者签名和Github ID
最终数据规模
20BCommit Pack 数据。
Agent推理合成数据 (10B)
背景
有代码diff数据,但无思考过程,为什么修改这个文件?
方法
- 使用LLM去
预测修改文件,保留正确预测修改文件的数据。
实现细节
- 微调LLM (Qwen2.5-72B-Instruct)
SFT微调,提升推理质量- 微调数据:
DeepSeekR1蒸馏的2k数据。
- 数据:
海量Github题目。 - 筛选:仅
保留推理正确的数据。
最终数据规模
10B推理合成数据
Agent交互合成数据 (10B, Agentless)
目的
加强agent能力。
思想
自定义工具,模拟agent-环境交互不执行,模仿文件系统操作,降低成本。
最终数据规模
10BAgent交互数据。
Rollout模型
- Qwen2.5-72B-Instruct
文件定位 (Agentless Stage1)
- 自定义模拟工具
- 仅允许
文件查看和关键词搜索。禁止shell,不做实际执行。 工具集放在SystemPrompt里。
- 仅允许
- 训练策略
- 轨迹的
action和observation都做学习训练,仅Loss Mask SystemPrompt。 - 一般
环境需要做mask,但这里保留,是为了学习理解环境返回结果。
- 轨迹的
代码编辑 (Agentless Stage2)
定位结果来自stage1,现在进入stage2做代码编辑。负样本训练- 故意给出
定位错误文件,手动注入Pattern:我意识到,不需要修改这个文件。 增强模型反思能力。
- 故意给出
PR Commit Pack转换成轨迹形式Commit:推理步骤。Code Update:动作,str_replace、insert工具格式。
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策略
- 奖励:只看
执行结果,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-Agent测试)
SFT实验:给不同数量数据做SFT。RL实验:做1步SFT,然后做RL。
对比模型
BaseMidTrain模型(MT先验)SFT模型(SFT先验)RL模型(先验)。
RL 模型 (RL先验)
RL先验最好,SFT训练学的最快、效果最好。更擅长做长线任务LongCot转化为Agent长交互能力。- RL模型
到70步仍可解新问题;而Base止于50步。
RL实验上,RL先验也比SFT先验好。- RL自行悟出
解题模式(不同于Claude蒸馏数据)
- RL自行悟出
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-AgentRL的先验最强:做SFT学的快好、做RL效果也更好。RL性能和回复长度正相关。
关键贡献
多阶段CodeAgent训练方法论。Agentless 训练(MT+SFT+RL) +SWE-Agent适配(SFT)。- 先从Agentless打基础,再逐步做Agent,模型不偏科、适应性强。
MidTrain各阶段,使用2k 冷启动数据后,评测SWE

RL 效果和训练长度有关。

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