跳到主要内容
Code Agents

第7章 Code Agent 训练 — SFT 与 RL

代码基座模型时间线(StarCoder/CodeLlama/DeepSeek-Coder/Qwen-Coder)、SWE-RL(Meta)、SWE-Gym(PKU)、Code-R1 等专项工作,以及与模块七 Agentic RL 的衔接

training sft rl swe-rl swe-gym codellama deepseek-coder qwen-coder

第7章 🎓 Code Agent 训练 — SFT 与 RL

一句话:调用 GPT-5 / Claude Sonnet 4.5 是用 Code Agent 的 90%路径;训练自家 Code Agent 是另外 10% 的高价值场景 —— 当你需要私有部署 / 领域特化 / 成本敏感时,本章给你完整路径。SWE-RL(Meta 2025-04)是这一方向的奠基 ——它证明了 RL with rule-based reward 能让代码 agent 自己学好。

📑 目录


一、为什么要专门训 Code Agent

直接用 Claude Sonnet 4.5 / GPT-5 的好处:最强、最方便。 但有 4 个场景必须自训:

1.1 隐私 / 合规

  • 银行 / 医疗 / 政府客户的代码不能上 cloud LLM
  • 必须本地部署 → 7B-70B 自家模型

1.2 成本

  • 大 repo 用 Claude Sonnet 4.5 可能每个 issue 1-5 美元
  • 团队 100 工程师 × 10 issue/天 × 3=3 = **9000/天 = $270K/月**
  • 自家小模型 + RL 调优,成本可降 90%

1.3 领域特化

  • 私有 SDK / 框架 / 业务系统,公开 LLM 没见过
  • 自训 + 私有代码 SFT → 比 frontier LLM 强 10-30%

1.4 工作流定制

  • 公司有特殊 PR 规范、code review 流程
  • 通用模型遵循指令不严,自训对齐流程

现实:80% 团队应直接用商业 API(成本可控、模型最强);20% 头部企业 / AI 实验室自训


二、代码基座模型时间线

2021-08  Codex(OpenAI)        ── 12B,Copilot 引擎
2022-12  CodeGen(Salesforce)   ── 16B,开源
2023-04  StarCoder(BigCode)    ── 15B,开源,The Stack 数据
2023-08  CodeLlama(Meta)       ── 7/13/34/70B,开源
2024-01  DeepSeek-Coder        ── 1.3/6.7/33B
2024-02  StarCoder 2(BigCode)  ── 3/7/15B
2024-05  Codestral(Mistral)    ── 22B
2024-06  DeepSeek-Coder V2     ── 16/236B(MoE)
2024-09  Qwen2.5-Coder ⭐       ── 0.5/1.5/3/7/14/32B,SOTA 开源
2024-12  DeepSeek-V3 / V3-Coder ── 671B MoE
2025-04  SWE-RL(Meta)          ── RL training 论文 ⭐
2025-09  Qwen3-Coder           ── 32B / 480B-MoE,开源 SOTA
2026-01  DeepSeek-V4           ── (1M context, 推理强)

2.1 推荐使用

最强开源代码基座:

  • 小型 (7B-32B):Qwen3-Coder-32B / DeepSeek-Coder-V2 16B-MoE
  • 大型 (>100B):DeepSeek-V4-Coder / Qwen3-Coder-480B-MoE

最强闭源代码模型:Claude Sonnet 4.5 / GPT-5 / o3。

2.2 模型规模 vs SWE-bench Verified

规模代表Verified
7B-15BStarCoder 2 / DeepSeek-Coder 7B~15-25%
30B-70BCodeLlama 70B / Qwen2.5-Coder 32B~30-40%
MoE 大型DeepSeek-V3 / Qwen3-Coder-480B~50-60%
Frontier 闭源Claude Sonnet 4.5 / GPT-5~70-73%

规律:开源每 18 个月追平闭源 SOTA,当前差距 ~10-15%


三、SFT 阶段

3.1 数据准备

代码 SFT 数据的来源:

来源量级质量
The Stack v2(BigCode)67TB,3B+ files全语言、多许可证
StarCoder 数据集1TB已清洗
CommitPackFT(commit 数据)数百万commit message + diff
OSS-Instruct(合成)数十万高质量 instruction
WizardCoder 数据数十万LLM evolution 合成

3.2 三阶段 SFT

1. Base Pretraining
     The Stack v2 + Web data

2. Instruction Tuning
     OSS-Instruct + Magicoder + WizardCoder data

3. Agent SFT(关键!)
     SWE-bench train set + 合成 trajectory

Agent SFT 阶段最关键 —— 给模型大量 “agent 解 SWE-bench” 的轨迹,让它学会正确调工具

3.3 数据合成关键

用 strong LLM 给 weak student 造数据:

  • GPT-5 跑 SWE-bench 训练集 → 拿到成功 trajectory
  • 蒸馏给 7B-32B 小模型
  • 小模型学会分布,而不是从零摸索

类比:学生跟着名师做题(看名师怎么思考、调工具),比自己瞎刷强得多。


四、SWE-RL ⭐(Meta arXiv 2504.21798)

论文:Wei et al., “SWE-RL: Advancing LLM Reasoning via Reinforcement Learning on Open Software Evolution”,arXiv 2504.21798,Meta 2025-04。

4.1 核心问题

SFT 教会”模仿成功 trajectory”,但不教模型”探索” ——遇到训练数据没见过的失败,模型会死循环。

RL 才能教模型从失败中学习。但 RL 需要 reward signal——代码场景下用什么?

SWE-RL 的解法:Rule-based reward + 测试通过 = 强 signal

4.2 训练 pipeline

1. 准备数据
   PR-Mix 数据集:从 PR 历史构造 (issue, repo state, patch, tests) 四元组

2. SFT 冷启动
   先用 SFT 让 model 学会基本 workflow

3. RL 训练(GRPO)
   每个 step:
     a. 给 issue,生成多个 candidate patch
     b. 跑测试评分:pass=+1, fail=0
     c. GRPO 更新(详见模块七第3章)

4. Iterative Refinement
   重复 SFT → RL 多轮

4.3 关键创新

  1. PR-Mix 数据:把 PR 转成 RL 训练格式,规模化获得(GitHub 上有数十亿 PR)
  2. Rule-based reward:
    • 测试通过 +1
    • 编译失败 -0.5
    • 不必要修改 -0.1
    • 主要 reward 来自自动判定,不需要 human label
  3. 多 reward shaping:测试通过率 / 修改 minimal 度 / 风格一致性

4.4 实验结果

(论文 Table)

模型SWE-bench Verified
Llama 3 70B (SFT only)18%
Llama 3 70B + SWE-RL41%
+23 个百分点 ——纯靠 RL

4.5 与模块七 Agentic RL 的关系

SWE-RL 直接复用 模块七讲的:

  • GRPO(Group Relative Policy Optimization)
  • RLVR(Rule-based Verifiable Reward)
  • Async rollout(并行跑多个 candidate)

Code 是 RLVR 的最佳应用场景:测试通过 = 完美 verifier。


五、SWE-Gym(PKU/Databricks)

论文:Pan et al., “Training Software Engineering Agents and Verifiers with SWE-Gym”,arXiv 2412.21139,2024-12。

5.1 核心贡献

SWE-Gym = 第一个公开的、可大规模 RL 训练的 SWE 环境

Resources              数据
- 2438 个 Python 任务   ── 来自 Pythonic OSS
- 完整 docker 环境     ── 装好依赖的镜像
- 测试 suite           ── pass / fail 自动判定
- Trajectory 数据集    ── 多个 trained agent 的 success/fail trace

5.2 怎么用

import swegym

env = swegym.make('django_001')
obs = env.reset()
# obs = "issue 描述 + repo 状态"

while not done:
    action = agent.act(obs)
    # action = "edit_file('models.py', '42:50', '...')"
    
    obs, reward, done, info = env.step(action)
    # reward 在 done=True 时给(测试结果)

5.3 训练 verifier

SWE-Gym 论文的另一贡献:训了一个 verifier(用 7B 模型),专门判断”这个 patch 是否对”:

  • 不跑测试,纯靠 LLM 判断
  • 对于不可执行的子任务(如 unit test 不全),verifier 给 fallback signal
  • 实验显示 verifier 加速了 RL 训练 2-3 倍

5.4 SWE-Gym vs SWE-bench

维度SWE-benchSWE-Gym
用途评测训练
数据held-out 测试集训练集 + 验证集
接口单次 evaluatorgym.Env 完整循环
Trajectory没有完整

研究者常组合用:SWE-Gym 训练 → SWE-bench Verified 评测。


六、Code-R1 / o1-coder 类工作

OpenAI o1 / DeepSeek R1 出来后,推理时间 scaling 成为新方向。学界开始研究 “Code Agent + Long CoT”。

6.1 核心 idea

Issue

1. 长 CoT 推理(几千到几万 token)
   "让我想想:先理解问题、再 grep 相关代码、然后..."

2. Action

3. 反思 → 再 CoT

6.2 代表工作

  • OpenAI o3 / o3-mini:推理优化的 frontier 模型,SWE-bench Verified ~73%
  • DeepSeek-R1-Coder(社区魔改):基于 R1,加 code-specific RL
  • QwQ-Coder:Qwen 团队的推理 + 代码模型

6.3 trade-off

优势劣势
单步质量高(更深思考)推理时间长(秒级 → 分钟级)
复杂任务突破简单任务过度思考
不需要复杂 scaffolding推理 token 成本高

业界趋势:简单任务用 fast 模型(Sonnet/Flash),复杂任务用推理模型(Opus/o3) —— 自动路由是产品化方向。Cursor / Claude Code 已经这么做。


七、训练数据来源

7.1 公开数据集

数据集规模用途
The Stack v267TB预训练
StarCoder 数据集1TB预训练
CommitPack4TBcommit-aware SFT
CommitChronicle数百万 commitcommit 数据
PR-Mix(SWE-RL)千万级 PRRL 训练
SWE-Gym2438 taskRL 环境
SWE-bench train1700 issueSFT

7.2 合成数据

随着 frontier LLM 强,用 strong LLM 合成训练数据成为标配:

  • OSS-Instruct:从 GitHub 代码片段生成 instruction
  • Magicoder(WizardCoder 系列):evolutionary 合成
  • Self-Play:用自己的早期版本生成 trajectory,蒸馏给后续版本

7.3 隐私保护

企业自训时,code license / privacy 是大坑:

  • The Stack v2 包含各种许可证 —— 商用 model 必须挑 permissive
  • 自家代码训练前应去敏感(密钥、PII)
  • 合规风险:GPL 代码训出的 model 可能被法务认为派生作品

八、训练栈选型

8.1 SFT 框架

框架优势劣势
HuggingFace TRL简单,生态好大模型扩展性弱
DeepSpeed Chat大模型 OK复杂
Megatron-LM极致性能学习曲线陡
OpenRLHFRL + SFT 一体偏 RL 场景
verl(ByteDance) ⭐RL 最强需要 ray 集群

8.2 RL 训练栈

(详见模块七 Agentic RL 第 6 章)

首选:

  • verl + VerlTool(适配 SWE-Gym 等环境)
  • OpenRLHF + 自定义 env

8.3 评测 / 监控

  • swebench-cli:自动跑 SWE-bench
  • WandB / TensorBoard:训练监控
  • Modal / E2B:大规模 sandbox

九、与模块七 Agentic RL 的衔接

模块七讲的所有方法,SWE-RL 都直接套用:

模块七主题SWE-RL 应用
GRPOSWE-RL 主算法
RLVR(rule-based reward)测试通过 = 1.0
Async rollout并行跑 SWE-Gym tasks
ToolRLcode edit tool 使用对齐
Search-R1 思想加 grep / search 工具
Self-Improvement FlywheelIterative SFT → RL

建议:学习路径上,先看模块七第 3-6 章(GRPO / RLVR / Multi-turn RL / 训练栈),再回来看本章 SWE-RL 的应用。

9.1 训练配置示例

# 类似 SWE-RL 的训练配置
algorithm: grpo
base_model: Qwen2.5-Coder-32B
reward:
  type: rule_based
  components:
    - name: tests_pass
      weight: 1.0
      fn: run_pytest
    - name: compile_pass
      weight: 0.5
      fn: type_check
    - name: minimal_diff
      weight: 0.1
      fn: diff_size_penalty
env:
  type: swegym
  task_set: SWE-bench-verified-train

rollout:
  num_candidates: 16
  async: true
  max_steps: 50

batch_size: 32
learning_rate: 1e-6
total_steps: 10000

✅ 自我检验清单

  • 能说出训练 Code Agent 的 4 个动机
  • 能背出 5 个主流开源代码基座模型
  • 能解释 SFT → Agent SFT → RL 的三阶段流程
  • 能说清 SWE-RL 的 PR-Mix 数据 + rule-based reward 设计
  • 能区分 SWE-bench(评测)vs SWE-Gym(训练)
  • 能说出代码 RL 训练的关键栈(verl / OpenRLHF + SWE-Gym)
  • 能解释为什么 RLVR 在代码场景特别有效

📚 参考资料

核心论文

  • SWE-RL (Meta arXiv 2504.21798) — 第一篇 Code Agent RL ⭐
  • SWE-Gym (arXiv 2412.21139) — 训练环境奠基
  • StarCoder / The Stack(BigCode 系列)
  • DeepSeek-Coder V2 (arXiv 2406.11931)
  • CodeLlama (arXiv 2308.12950)
  • Qwen2.5-Coder (arXiv 2409.12186)
  • WizardCoder (arXiv 2306.08568)
  • Magicoder (arXiv 2312.02120)

官方实现 / 数据集

训练框架

衔接

  • 模块七 Agentic RL 第 3-6 章(GRPO / RLVR / Multi-turn / 训练栈)

下一章:第8章 生产部署与安全 —— Sandboxing、PR review 自动化、测试发现、Cost 控制、Failure 处理、Audit trace、Prompt injection 防御。