Skip to content

SWE-MidTrain 方法

📅 发表于 2026/03/18
🔄 更新于 2026/08/05
👁️ — 次访问
📝 4712 字
16 分钟

(2601) daVinci-Dev: Agent-native Mid-training for Software Engineering (58.5分, SII-GAIR)

🌺 论文摘要

daVinci-Dev 摘要

参考链接

核心方法

  • 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@1 log线性稳定上升趋势,72B 54.9,32B 49.9。
  • 在基础增加 ,带来微提升(72B +0.3pt,32B + 2pt),引入真实环境语料有必要

关键贡献

问题背景(后训练局限+当前MidTrain问题)

后训练数据少上限低

问题背景

PostTraining 局限性

当前CodeAgent的后训练

  • 后训练依赖: SFT(正确轨迹) + RL(环境执行反馈,贵)

后训练(SFT/RL)存在局限性

  • 数据太少成本太高

    • 仓库->可执行环境太少正确轨迹成本高太少
  • 后训练潜力有限

    • 受限于基模固有能力上限某些agent能力无法仅通过后训练学习到

当前MidTrain碎片化且无AgentNative属性

当前 MidTraining 问题

MidTraining 定义

  • 特定领域数据MT,比如数学和代码。
  • SWE领域
    • 让基模接触大量的agent迭代过程数据(文件导航,编辑,工具调用等)
    • 让模型潜力更高,后训练更高效。
    • 真实开发:文件定位、修改代码、应用patch、执行测试等。

当前Mid-training 仍未被充分探索

  • 任务碎片原子化

    • 先前MidTrain把文件定位和代码编辑拆分为独立任务进行训练破坏了因果流
    • Agent应当学会协调原子能力连贯Loop来解决问题,而不是仅会原子能力。
  • 缺乏Agent-native属性

    • 先前MidTrain都是静态代码语料仓库缺乏真实环境面临的动作-观察循环
  • 训练数据和真实环境存在严重分布差异

    • 训练数据碎片化+缺乏Agent-Native静态的
    • 真实开发环境动态的、富含真实反馈的

相关工作

Mid Training

MidTrain
  • MidTrain 在预训练和后训练之间增加桥梁,喂高质量结构清晰的数据,提升后训练上限
  • Kimi-Dev:碎片化任务,拆分式教学。
  • daVinci-Dev:Agent-Native原生数据

Agentic Training

Agentic Training

数据合成方法

数据合成

阶段1:洗文稿+优中选优

  • 让LLM对文章进行重写或组合;再做拒绝采样留下最好的
  • 处理静态文本

阶段2:角色扮演开脑洞

  • 让LLM扮演各种角色,开脑洞,凭空造出各种多样性数据

阶段3:Agent时代

  • 不仅需要静态文字,更需要真实动作反馈
  • 让LLM在虚拟环境实操记录下完整轨迹,用于MidTrain或SFT

Agent-native Mid-training 核心方法

📕核心方法

Agent-native 数据核心思想

Agent-native 数据核心思想

核心思想

  • 构建大规模、多样化Agent-native 数据,保留模型经历的完整信息流环境动态信息
  • 原本独立的定位、阅读、编辑、测试反馈等步骤,打包重构连贯的解题工作流

两种互补的数据轨迹

  • 上下文原生轨迹广度与多样性,68.6B
  • 环境原生轨迹交互真实性,3.1B

上下文原生轨迹

上下文原生轨迹核心思想

上下文原生轨迹

  • 重在广度与多样性

数据量

  • 68.6B-token

构建过程

  • 爬取Github PR天然的解题过程,需求、思考、行动、反馈。
  • Issue-文件定位-文件内容-文本推理-多步代码修改打包到同一个训练样本中。
  • 教会AI人类思考修改的连贯过程
上下文原生轨迹构建细节

数据源

  • Dgenctx多种语言仓库,Top 10k 高星仓库,400万PR,广泛。26.7B token
  • DpyctxPython语言仓库,大于5星74w仓库,600万PR。41.9B token

收集

  • PR收集接口:GitHub RESTGraphQL API

  • 内容:Issuebase commithead 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摘要代码修改
      • 找哪改?文件定位有什么?读代码怎么改?编辑代码
    • Dctxgen:XML格式;Dctxpy:Markdown格式,Search-Replace格式
      • search-replace:模仿agent在真实环境中调用工具的动作。
  • 最终过滤:仅保留32k以内样本提高训练效率

环境原生轨迹

环境原生轨迹收集核心思想

环境原生轨迹

  • 真实开发环境运行Agent,收集轨迹。重在深度真实性
  • 迭代反馈循环编辑 -> 测试 -> 修正
  • 轨迹:工具调用测试执行运行时错误脚手架系统反馈等。

Task和环境

  • 真实 Github PR 仓库,同SWE-rebench,构建可执行 Docker环境,单元测试。

收集过程

  • 使用强模型(GLM-4.6) 配合 SWE-AGENT Scaffold 在环境中进行真实 Rollout
  • 不做任何过滤保留成功和失败的轨迹。数据量比SFT多很多。

数据量

  • Dpassenv 1.85w轨迹,0.7B token;Dfailenv 7.4w轨迹,2.4B token。
  • 总计3.1B token

实验设置(72B, MT, SFT)

✍️实验设置

实验设置

基础模型

  • Qwen2.5-32B/72B-Base,非code模型

阶段一:Mid-training (MT)

  • Dpyctx 41.9B,Dgenctx 26.7B。总计Dctx68.6B
  • Dpassenv上采样3倍,总计Denv 4.5B
  • 1个epoch,bs=1024, lr 8e-5, warmup 5%,cosine decay, 无Loss Mask。

阶段二:Post-training (SFT)

  • DSWE-smith0.11B弱SFT数据,仅作对比用。
  • Dpassenv:0.7B, 强SFT数据用作微调用
  • SWE-Agent Scaffold
  • 5个epoch,bs=128, lr 1e-5warmup 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@1 log线性稳定上升趋势,72B 54.9,32B 49.9。
  • Dctx基础增加Denv ,带来微提升(72B +0.3pt,32B + 2pt),引入真实环境语料有必要

关键贡献

未来方向

未来方向

未来方向

Scaling 扩展

  • 上下文原生扩展静态仓库,目前通用仅Top10k 仓库,未来可扩展海量长尾仓库
  • 环境原生扩展:用Agent把PR转换成可执行Docker环境,获取更多高质量环境原生数据
  • 多Agent协作:当前仅单Agent,未来可加CodeReview/多开发者讨论等协作原生轨迹

集成RL

  • 本文核心是Agent-native MT,仅初步结合SFT,未来可集成RL,探索更高性能。

(2509) Kimi-Dev(48分)

🌺 论文摘要

Kimi-Dev 论文摘要

参考链接

核心方法

  • Agentless 训练(3阶段) + SWE-Agent适配(SFT)。

  • Agentless训练:BugFixer + TestWriter

    • MidTrainDiff 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-verified Pass@1 48分TTS(40) 达60分
  • SWE-Agent SFT适配
    • Pass@1 48分,优于SWE-Agent-LM-32B 40.2分
    • Pass@10达74分,优于Agentless Pass@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)

Agentless 框架

BugFixer

  • 生成patch解决bug

TestWriter

  • 生成单元测试复现bug

成功标准

  • Patch(BugFixer) 通过 测试用例(TestWriter)。修复前:fail;修复后:成功。

依赖2个技能

  • 问题定位:修Bug找源文件;写测试找测试文件
  • 代码编辑:修Bug改源文件;写测试插入新测试函数

Mid-Training

MidTrain 概览

Mid-Training

基础配置

  • 模型:Qwen2.5-72B-Base
  • 任务:Next Token Prediction

MidTrain 数据

  • 150B 高质量真实数据
  • 数据构成:包括:百万级的Github Issue + PR commit数据。
    • Diff Patch数据50B,类似Agentless
    • PR 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
仓库和PR收集
  • 仓库过滤低于5star、SWE-bench已包含的仓库。

  • PR 收集:GithubAPI 查询已合并的PR

    • 丢弃废弃未审核被替代的PR。
  • 代码变更2种格式

    • Natural Diff Patch + PR Commit Pack

Diff Patch 数据处理 (50B, Agentless)

Diff Patch 数据

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。

最终数据规模

  • 50B DiffPatch 数据

PR Commit Pack 数据处理 (20B, SWE-agent)

PR Commit Pack

Commit Pack 说明

  • 人类的提交序列,每一步包含commit + 代码变更
  • SWE-Agent相似

处理逻辑

  • 仅保留py/md/rst文件修改的PR
  • 每个PR 最多修改5个python文件
  • 过滤开发者签名和Github ID

最终数据规模

  • 20B Commit Pack 数据

Agent推理合成数据 (10B)

Agent推理数据 合成

背景

  • 有代码diff数据,但无思考过程为什么修改这个文件?

方法

  • 使用LLM去预测修改文件,保留正确预测修改文件的数据。

实现细节

  • 微调LLM (Qwen2.5-72B-Instruct)
    • SFT微调提升推理质量
    • 微调数据:DeepSeekR1蒸馏的2k数据
  • 数据:海量Github题目
  • 筛选:仅保留推理正确的数据。

最终数据规模

  • 10B 推理合成数据

Agent交互合成数据 (10B, Agentless)

Agent交互数据合成思想

目的

  • 加强agent能力

思想

  • 自定义工具模拟agent-环境交互
  • 不执行模仿文件系统操作降低成本

最终数据规模

  • 10B Agent交互数据
Agent交互数据合成之 文件定位+代码编辑

Rollout模型

  • Qwen2.5-72B-Instruct

文件定位 (Agentless Stage1)

  • 自定义模拟工具
    • 仅允许文件查看关键词搜索禁止shell不做实际执行
    • 工具集放在SystemPrompt里。
  • 训练策略
    • 轨迹的actionobservation做学习训练,仅Loss Mask SystemPrompt。
    • 一般环境需要做mask,但这里保留,是为了学习理解环境返回结果

代码编辑 (Agentless Stage2)

  • 定位结果来自stage1,现在进入stage2代码编辑
  • 负样本训练
    • 故意给出定位错误文件,手动注入Pattern我意识到,不需要修改这个文件
    • 增强模型反思能力
  • PR Commit Pack 转换成轨迹形式
    • Commit推理步骤
    • Code Update动作str_replaceinsert工具格式。

LongCoT 冷启动

冷启动

冷启动数据蒸馏

  • 任务:SWE-Gym, SWE-bench-extra
  • 角色:BugfixerTestWriter
  • 蒸馏模型:DeepSeek-R1-250120
  • 数据量:BugFixer大约2k?

SFT 效果

  • 获得推理技能问题分析方法规划自我完善探索替代方案等。

Code-Edit RL

RL 策略 (数据+奖励+课程学习)

RL 数据

背景

  • 经过MidTrain+LongCoT SFT,模型已具有较强定位能力
  • RL仅关注代码编辑

数据集

  • 数据源:SWE-Gym, SWE-bench-extra ?
  • 1个Prompt均有1个环境
  • 数据多样性:使用多种 Bug定位结果,作为LLM输入
  • 数据难度(课程学习)
    • 难题标准pass@16=0
    • 简单数据集1.2k
    • 难数据:除开简单的
RL策略:奖励+课程学习+正阳本强化

RL策略

  • 奖励:只看执行结果0、1,不看格式注释等内容。
    • BugFixer通过所有测试得1
    • TestWriter:Fail2Pass。修复前: 有Bug;修复后:无Bug
  • 课程学习
    • 先只学简单,待分数超过阈值,再逐渐加入难样本
    • 每100step 加入500难样本
  • 正样本强化
    • 后期性能进入平台期,很难探索新解法。
    • 使用之前的正样本加入迭代,做强化巩固记忆,冲刺效果。

正样本强化 后期训练要稳定一些。

RL 环境

Sandbox

并发度

  • 支持1w 并发2.5w docker镜像(来自各种数据集)

特点

  • Use-and-Destroy:沙盒只为1次执行,任务跑完后,立即摧毁。
  • 一套自动构建镜像流水线

技术栈 (K8s + Sdecar)

  • Kubernetes(K8s):行业标准,容器编排,管理2.5w docker
  • Sidecar Pattern:边车模式
    • 主容器:跑具体任务代码
    • Sidecar容器:辅助工作,收集日志等。

SWE-Agent 适配

SFT 适配

SWE-Agent 适配

背景

  • 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

对比模型

  • Base
  • MidTrain模型(MT先验)
  • SFT模型(SFT先验)
  • RL模型(先验)。
RL+MT+SFT 技能先验

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

Test-time self-play

背景

  • RL之后,模型已掌握BugFixerTestWriter能力。
  • 测试时,使用self-paly来协调2种能力

生成阶段

  • 遵循Agentless,为每个实例生成40个patch40个测试
  • BugFixer:第1个:贪婪解码;剩余39个:温度=1 采样,保证多样性
  • TestWriter:独立生成40个测试。仅保留代码没修复能报错的单元测试
    • 过滤:去掉没有报错的测试。

验证阶段

  • 解法Patch集合B;单元测试集合T

  • 每个Patch bi,去验证每1个单元测试 tj

    • 针对有无补丁2种情况
      • 分别记录下报错数F(j)通过数P(j)

      • 并计算Fail2Pass, Pass2Pass数量。

  • 最终Patch bi的得分:高FP率 + 高PP率能修bug + 不会破坏原有功能

    Si=jFP(i,j)jF(j)+jPP(j)jP(j)

Self-play 效果不如 Pass@N,优于投票。

实验设置(MidTrain+SFT+RL)

✍️实验设置

实验设置

基础模型

  • Qwen2.5-72B-Base

训练任务/数据

  • MidTrain150B token,DiffPatch + PR Commit + 推理数据 + 交互数据
  • LongCoT SFT2k数据,SWE-Gym + SWE-Bench-extra
  • Code-Edit RL1k数据,SWE-Gym + SWE-Bench-extra

评测任务/数据

  • SWE-Verified

算法/策略

  • Agentless 框架BugFixer + TestWriter,都依赖定位编辑能力。
  • Mid-TrainNTP任务Diff+PR+推理+交互模拟(文件定位代码编辑)。
  • SFT:DeepSeekR1 + 2角色蒸馏,提升推理技能。
  • RL (GRPO)结果奖励 + 难度课程学习 + 后期正样本强化

超参

  • RL: rollout=1064k

关键结果(Qwen2.5-72B-Base, MidTrain+SFT+RL)

🍑关键结果

关键结果

模型效果(Qwen2.5-72B-Base)

  • Agentless 训练:SWE-verified pass@1 48分,使用TTS(40)后,达60.4分
  • SWE-Agent SFT适配:
    • SWE pass@1 48分,优于SWE-Agent-LM-32B 40.2分
    • SWE Pass@10 74分,优于Agentless Pass@30 73.8分,推理次数仅1/3。

重要结论

  • 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
  • 环境扩展:利用合成环境进一步扩大训练数据规模
总访客数:— · 总访问量:—
PLM's Blog @ 2016 - 2026