第 1 层 · 教学 · 1.7 训练闭环 · 第 1 讲
编程能力是怎么训出来的:从预训练到过程强化
我们评测的 agent 不是凭空出现的。这一讲把「一个模型从读懂代码,到能修仓库级 bug」的五阶段训练链路拆开,逐段标注数据来源、奖励信号与能力产出,并用 2026 年的最新证据修正「RL 创造能力」这个流行误解——这是理解「为什么不同 agent 在同一道题上表现差异巨大」的前提。
概览
5
训练阶段(含 2026 新增的 mid-training)
11.4→39.0
RL 前后 SWE-bench Verified(Qwen2.5-72B)
50K
SWE-smith 合成任务实例
600B
Qwen3-Coder-Next mid-training 可验证 token
| 项目 | 说明 |
|---|---|
| 本卡定位 | 「训练闭环」单元第 1 讲 · 宏观链路:一个模型的能力是怎么训出来的(五阶段) |
| 前置知识 | 知道 SWE-bench 任务是什么(swe-bench-intro);知道 F2P / P2P 判分契约 |
| 读完会什么 | 能复述完整训练链路并说出每阶段「学到什么」;能识别「RL 创造了新能力」这类流行误解;能说清轨迹数据在训练链路里的位置 |
| 证据分级 | 本单元所有断言带四级标记:① 官方文档 / 技术报告 · ② 论文(arXiv / 会议) · ③ 逆向分析 · ④ 新闻报道——数字的可靠程度随级别递减,引用时请连同级别一起引 |
第一篇 · 预训练与 SFT:从代码语感到会做题的格式
第 1 卡 · 1 语料链 + 2 训练目标
图 1 · 五阶段训练链路。①③④ 是经典三段;② 是 2026 年才定型的「新常态」(第 5 卡展开);⑤ 是工业界收尾的统一手段。
预训练:把代码语感喂出来
任何代码大模型(Qwen-Coder、DeepSeek-Coder、Claude、GPT)的地基都是同一件事:在海量仓库级代码上做下一个 token 预测。全讲的地图先立在这里——五阶段链路,每一段学到不同的东西:
flowchart TB
PT["① 预训练
海量代码 + FIM/AST + 去污染
→ 语法与代码语感(会写代码)"] --> MT["② mid-training【2026 新常态】
合成可验证任务 + 可执行环境
→ agent 行为提前塑形"] MT --> SFT["③ SFT / 蒸馏
指令格式 + 高质量轨迹
→ 听话、会模仿(会做题的格式)"] SFT --> RL["④ RL with Verifiable Rewards
测试 0/1 + 过程惩罚 + 难度过滤
→ 单发命中、格式纪律(会把题做对)"] RL --> DIST["⑤ 专家蒸馏统一
→ 单模型部署(会当工程师)"]
海量代码 + FIM/AST + 去污染
→ 语法与代码语感(会写代码)"] --> MT["② mid-training【2026 新常态】
合成可验证任务 + 可执行环境
→ agent 行为提前塑形"] MT --> SFT["③ SFT / 蒸馏
指令格式 + 高质量轨迹
→ 听话、会模仿(会做题的格式)"] SFT --> RL["④ RL with Verifiable Rewards
测试 0/1 + 过程惩罚 + 难度过滤
→ 单发命中、格式纪律(会把题做对)"] RL --> DIST["⑤ 专家蒸馏统一
→ 单模型部署(会当工程师)"]
核心知识点
- 语料构建链:The Stack 一系的仓库级语料 → 语言筛选(留主流语言)→ 质量过滤(stars / 文件长度 / 启发式)→ 去重 → 去污染(按 n-gram 重叠剔除与 HumanEval / MBPP 等评测集重合的训练样本,Qwen2.5-Coder 用 10-gram 口径②)——不去污染的模型分数再高也说明不了能力,属于变相测试集泄漏
- FIM(Fill-In-the-Middle):写代码的常态是「光标停在函数中间补全」而非从左到右续写,因此把代码切成前缀 / 中间 / 后缀三元组,训练模型按前后文补中间——这是 IDE 双向补全的基础
- AST 感知的 FIM:用 tree-sitter 解析语法树、随机抽 AST 节点作为填充块,保证填的是完整逻辑单元(一个 if、一个函数体)而非任意半行②
- 长上下文演进:8K(StarCoder 一代)→ 16K(CodeLlama)→ 64K(CodeQwen 一级)——仓库级理解的前提
课堂实训
- 手工把一段 20 行函数切成前缀 / 中间 / 后缀三元组,对比「续写」与「中间填空」两种目标对模型能力要求的差异
- 用 pip install tree-sitter tree-sitter-python 打印一段代码的 AST 节点,指认哪些节点适合做填充块、哪些不适合
思考与讨论
- 若不去污染,模型在 HumanEval 上的高分意味着什么?这和我们评测 agent 时担心的「见过这道题」是什么关系?
- AST 感知的 FIM 相比随机切分,优势究竟体现在哪类任务上?
paper: The Stack (BigCode)
paper: Qwen2.5-Coder Technical Report
第 2 卡 · 1 混合目标 + 2 天花板
SFT:教格式与套路,以及它的两个天花板
预训练出来的基座只会无休止续写,不会「听指令答题」。SFT 用精选的「指令-回答」对做监督微调,教会格式与套路——但它有结构性的极限。
核心知识点
- 混合训练目标:把「代码补全」与「问答指令」混进一个统一目标——一个模型同时学 IDE 补全与对话答题②
- 仓库级(repo-level)数据:真实开发是跨文件的,单文件补全不足以支撑 SWE 任务(CrossCodeEval / ExecRepoBench 一类的仓库级基准就是为检验这个而设)
- SFT 的两个天花板:① 只会模仿示范 → 泛化到新题型弱;② 不做自我验证 → 做完就交卷,不知道自己对错。这两个天花板正是下一卡 RL 存在的理由
思考与讨论
- 为什么模仿学习的上限是示范者的水平?这个上限靠什么突破?
- 「做完不检查」在轨迹上会留下什么特征?(伏笔:trajectory-1 的八阶段里 S6 验证阶段的缺失)
第二篇 · RLVR:上帝裁判与「重加权」真相
第 3 卡 · 1 机制 + 1 流水线 + 2 修正
图 2 · GRPO 组内相对比较:优势来自组内相对好坏,而非绝对打分——所以「采样中偶然做对一次」对训练如此关键。
RLVR:可验证奖励、GRPO 与「RL 不产生新能力」
强化学习需要奖励信号,而大多数事无法自动打分。代码和数学是罕见的例外——有客观裁判:测试通过就是 1,不通过就是 0。这就是 RLVR(RL with Verifiable Rewards),它比人类偏好标签稳定,因为模型无法讨好一个客观裁判。
核心知识点
- RLVR 的成立条件:存在客观裁判——数学靠精确匹配,代码靠单元测试(正是本仓 answer_evaluator 的 F2P∧P2P 契约);绝大多数任务(写文章、做决策)不具备,所以这是「稀缺的例外」
- GRPO 机制:砍掉 PPO 必需的 Critic(价值网络),改用「同一道题采样的一组答案互相比较」估算优势,显著省资源②
- DeepSeek-R1 四阶段配方(教科书级②,arXiv 2501.12948):冷启动 SFT(几千条长思维链打底)→ 面向推理的 RL(GRPO)→ 拒绝采样 SFT(只保留做对的轨迹再微调)→ 全场景 RL(混写作 / 事实问答,兼顾有用无害);AIME 2024 pass@1 达 71.0%、多数投票 86.7%
- 修正一(pass@k,② arXiv 2504.13837):RL 大幅提升 pass@1,但在足够大的 k 下基座模型追平甚至反超——RL 做的是分布收敛:把基座分布里已存在的低概率正确路径抬上来,无法创造分布里不存在的路径
- 修正二(Spurious Rewards,② arXiv 2506.10947,ICML 2026):对部分模型,完全随机的奖励也能涨点——RLVR 的部分增益来自与正确性无关的隐式正则(输出变长、格式变规整);2026 年机制跟进(arXiv 2601.11061)指出 RLVR 还会激活记忆捷径:模型学会调取训练时见过的类似解法,而非现场推理
- 两条推论:① 小模型 RL 效果差不是算法不行,而是分布里没有好路径可抬——所以「蒸馏 > 小模型自己 RL」;② 「海量代码预训练」不可跳过——上限在底座里
flowchart TB
P["同一道题
采样 k 个回答"] --> G["组内比较
对的全组 + 优势 · 错的全组 − 优势"] G --> U["策略更新
正确路径概率↑ 错误路径概率↓"] G --> Z["全部失败 / 全部成功
组内零方差 → 无梯度信号"]
采样 k 个回答"] --> G["组内比较
对的全组 + 优势 · 错的全组 − 优势"] G --> U["策略更新
正确路径概率↑ 错误路径概率↓"] G --> Z["全部失败 / 全部成功
组内零方差 → 无梯度信号"]
对本平台的直接含义(本单元最重要的 callout):只看 %Resolved(pass@1 口径)会把「分布收敛」误读成「能力增长」。轨迹评估应增加多采样一致性 / 路径分歧度维度:同一实例 N 次采样,通过率方差与路径差异才是能力信号——这正是本仓 5 brand agent 同题轨迹能提供的独特视角。
课堂实训
- 给定同一道题的 4 个采样答案(2 对 2 错),手工计算组内相对优势,验证「正确答案得正优势、错误答案得负优势」
思考与讨论
- 如果一道题的全部 k 个采样都失败,GRPO 能从中学到什么?(提示:零方差组无梯度)
- 既然 RL 只是重加权,「模型在采样中偶然做对一次」为什么如此关键?
paper: DeepSeek-R1 (arXiv 2501.12948)
paper: Does RL Really Incentivize (arXiv 2504.13837)
paper: Spurious Rewards (arXiv 2506.10947)
第三篇 · 从做题到做工程:RSFT、数据与工业配方
第 4 卡 · 3 跃迁 + 2 数据源 + 1 曲线
图 3 · SWE-smith 轨迹数 vs 解决率(SFT 蒸馏口径,论文自报数字②):从 100 条到 5K 条单调上升——「轨迹是资产」的定量证据。
从「做题」到「做工程」:RSFT + 工具 RL + 数据从哪来
核心知识点
- 三重难度跃迁:单轮 → 多轮;无状态 → 有状态环境(每步都有编译器 / 测试的非平凡观测反馈,数学 / 单轮生成只是「退化的多轮 MDP」②);单文件 → 仓库级
- 信用分配难题:一条轨迹几十步,只有一个终局 0/1 奖励——模型无法知道是哪一步导致了成败(第 3 讲过程监督的全部动机)
- 拒绝采样微调(RFT / RSFT):用执行反馈筛选成功轨迹先做「热身」,教会任务格式与工具调用,再进 RL——Nebius 的精确三段数字②(arXiv 2508.03501):Qwen2.5-72B-Instruct 在 SWE-bench Verified 上 11.4%(基线)→ 20.5%(RFT 冷启动)→ 39.0%(两阶段 RL),Pass@10 达 58.4%
- SWE-smith 的真相(本卡重点澄清②):50K 实例 / 128 仓库的价值是提供「可采样 + 可验证的环境」,而不是「数据即训练语料」——其 40.2% 开源 SOTA 来自SFT 轨迹蒸馏:用强模型在任务上采样(8K 任务 × 3 次 = 17K 尝试,解决率 36%),过滤后得约 5K 轨迹微调 Qwen2.5-Coder-32B
- 轨迹数量的 scaling 曲线②:100 条轨迹 → 14.3%,5.0K 条 → 40.2%,单调上升——当前瓶颈是高质量轨迹的数量,而不是算法
- SWE-Gym 的 Verifier(② arXiv 2412.21139):额外训一个「判断轨迹能否成功」的模型,既能做 best-of-n 选择,也能当奖励信号
课堂实训
- 在本仓 experiments/ 里找一条「步数很多但最终失败」的轨迹,评估它作为训练样本的价值(提示:失败轨迹对 RL 也有用——组内比较需要负样本)
思考与讨论
- 工业级坑:为什么「丢弃超长负样本」会导致死循环得不到惩罚?这对数据清洗策略意味着什么?
- Pass@1 = 39.0% 而 Pass@10 = 58.4%,这 19 个百分点的差距说明了什么?(引出 Verifier / 重排序的价值)
paper: Nebius SWE RL (arXiv 2508.03501)
paper: SWE-smith (arXiv 2504.21798)
paper: SWE-Gym (arXiv 2412.21139)
第 5 卡 · 1 反直觉结论 + 1 份 2026 工业配方
蒸馏、对齐与 2026 工业配方:能力从大往小灌
核心知识点
- 反直觉结论(② R1 报告原文):直接从强模型蒸馏(用其思维链微调小模型),效果优于在小模型上直接做 RL——想低成本获得「会编程的小模型」,蒸馏是正路
- 能力阶段与对齐阶段的分工:RLVR 负责「会不会做题」,RLHF / DPO 负责「有没有帮助、是否无害」——顺序不可颠倒:先有能力,再谈对齐
- 2026 工业配方一瞥(① Qwen3-Coder-Next 技术报告,arXiv 2603.00729,80B 总参 / 3B 激活):
- agent 训练前移进 mid-training:约 600B token 的合成可验证任务配可执行环境,直接从环境反馈学习——图 1 里第 ② 格的来历
- 环境构造本身用模型做:过滤无效验证器(non-functional verifiers)、专门训一个模型提升环境构造质量——环境工程从脚本活变成模型活
- 三层奖励:轨迹级结果 0/1 + 未完成惩罚(超最大轮数)+ turn 级工具格式惩罚(非法 tool call 的 token 收负奖励,防止「正确结局 ≠ 高质量过程」——第 2 讲与第 3 讲的连接点)
- 专家蒸馏统一:Web 开发 / UX / 单轮 RL / 软件工程多个专家模型蒸馏回单一部署模型;SWE-Bench Verified 达 70.6
配套精读:训练基建(异步 rollout、万级并发编排)见 MegaFlow 精读;环境规模化(百万级可验证环境)见 SWE-Universe 精读——两篇论文正好是本讲链路第 ② 格的「基建侧」与「环境侧」实证。
思考与讨论
- 蒸馏得到的能力与 RL 得到的能力,在行为特征上有什么可观测差异?(提示:一致性 vs 探索性)
收口:把 5 张卡片装回一个心智
一句话收束:预训练决定上限,蒸馏决定下限,RL 决定单发命中率与纪律。2024 年的流行叙事是「RLVR 是分水岭」;2026 年的修正版是——可验证环境是主粮(600B token 级)、过程惩罚是标配、反作弊是基建,RL 的角色从「创造能力」降格为「收敛分布」。下一讲 zoom in 到这套链路里最特殊的一块:工具使用能力——它一半是训练的,一半是每次请求时注入的。