第 6 章:多阶段训练:Agentic CPT → SFT → GRPO
讲清一个通用模型为什么要分三阶段训练成调研 Agent,每个阶段(Agentic CPT / SFT 冷启动 / GRPO 强化学习)各解决什么问题,以及 GRPO 的核心直觉和 Agent RL 里最容易踩的坑
📊 学习时长:60-75 分钟 🎯 完成后能力:讲清一个通用模型为什么要分三阶段训练成调研 Agent,每个阶段(Agentic CPT / SFT 冷启动 / GRPO 强化学习)各解决什么问题,以及 GRPO 的核心直觉和 Agent RL 里最容易踩的坑 🔗 关联面试题:5 道(覆盖 5 个角度,见 Part 3)
🧭 这一章怎么读:训练流程为什么分阶段、每阶段解决什么、GRPO 的直觉和关键技巧的原理,本章都会讲,并带一个零依赖小实验帮你理解 GRPO 的核心。训练本身要 GPU、跑起来慢,所以这一章不真的跑训练,而用「概念小实验 + 原理讲解」让你把机制看懂、面试讲清。
这一章你会学到什么
- ✓ 想清一个根本问题:为什么不能一步到位,非要把训练拆成 CPT → SFT → GRPO 三个阶段
- ✓ 搞懂三个阶段各自的分工:CPT 注入「Agent 偏置」、SFT 学输出格式(冷启动)、GRPO 在实战反馈里优化策略
- ✓ 理解 GRPO 的核心直觉:为什么它能去掉 PPO 里那个笨重的「价值网络」,用「组内相对优势」替代(配可跑小实验)
- ✓ 掌握 Agent RL 最容易踩的坑:截断的失败轨迹直接当负样本,会把模型训崩成「赶紧随便给答案」
- ✓ 建立对奖励设计、动态采样的判断,以及能在面试里讲清「多阶段训练为什么这么排」
本章按三段式组织:
段落 给谁看 内容 占比 🚀 Part 1 · 主线实战 零基础,想先看懂 为什么分三阶段 + 三阶段分工 + GRPO 优势小实验 ~45% 🎯 Part 2 · 面试深度 想讲透、备战面试 CPT / SFT / GRPO 逐阶段 + 负样本坑 + 奖励设计 + 动态采样 + 私货 ~45% 🏆 Part 3 · 验收串题 检验学到位没 关联面试题 + 自检清单 ~10%
🚀 Part 1 · 主线实战 | ~45% 这部分先想清「为什么要分三阶段」,再用一个零依赖小实验,看懂 GRPO 到底在算什么。
先讲个真实场景(这是本章的「为什么」)
上一章我们讲了训练数据怎么造。现在的问题是:怎么把这些数据喂进去,把一个通用模型训练成会做调研的 Agent?
很多人的第一反应是:拿 SFT 数据微调一下不就行了?试过就知道,一步到位训不出来。只做 SFT,模型能学会「输出格式长什么样」,但它只是在模仿轨迹,遇到训练里没见过的情况就抓瞎,而且不知道「怎样算做得好」。
真实的训练是分三阶段、层层递进的,像培养一个调研员:
- 先打底子(Agentic CPT):大量泛读,在脑子里建立「Agent 该怎么动」的直觉偏置。
- 再学规矩(SFT 冷启动):照着优质范例临帖,学会规范的输出格式和工具调用。
- 最后实战打磨(GRPO 强化学习):真刀真枪做调研,根据「做得好不好」的反馈,自己优化策略。
三步缺一不可,而且顺序不能乱。本章讲的就是:这三阶段各干什么、怎么衔接、坑在哪。
三阶段总览:各自解决什么
把三个阶段摆在一起看,分工就清楚了:
| 阶段 | 解决什么 | 输入 | 产出 |
|---|---|---|---|
| Agentic CPT | 注入「Agent 偏置」,让模型对「该怎么动」有直觉 | 上一章的 CPT 合成数据(FAS / HAS) | 有 Agent 底子的基座 |
| SFT 冷启动 | 学会规范的输出格式、工具调用格式 | 上一章的优质轨迹数据 | 会按格式做调研的模型 |
| GRPO 强化学习 | 在反馈里优化「怎样做得更好」的策略 | 调研环境 + 奖励信号 | 真正会做调研的 Agent |
概念:为什么 SFT 叫「冷启动」
SFT 这一步常被叫做冷启动(cold start)。为什么?因为它的真正使命不是「训出最终模型」,而是给后面的强化学习一个像样的起点。
强化学习是「在试错里学」的。如果直接拿一个连格式都不会的模型去做 RL,它一开始产出的几乎全是垃圾,RL 根本无从「比较哪个更好」,学不动。SFT 先把模型「冷启动」到「至少格式对、能跑完一轮调研」的水平,RL 才有得优化。
回扣上一章:SFT 阶段会用到 Loss Mask(只对模型该生成的 Thought/Action/Final 算 loss,mask 掉 observation)。忘了的话翻第 5 章的 Loss Mask 小实验。
🛠️ 跟着做:一个零依赖的 GRPO「组内相对优势」小实验
GRPO 是三阶段里最难懂的一环。它的核心思想其实一句话能说清:同一个问题,采样一组答案,谁比这组的平均水平好,就强化谁;谁比平均差,就抑制谁。 这个「比平均好多少」就叫优势(advantage)。
它最妙的地方:不需要像 PPO 那样单独训一个价值网络(value model)去估计基准,直接用这组答案的平均分当基准。省一个模型,省一半显存。
下面这段零依赖代码,演示 GRPO 怎么算优势。新建 grpo_advantage_demo.py:
# 零依赖,直接 python grpo_advantage_demo.py
# GRPO 核心:同一个问题采样一组答案,用「组内平均分」当基准,算每条的相对优势
# 不需要单独的价值网络(value model),这正是 GRPO 比 PPO 省的地方
group = [
("轨迹A: 逐个查全3个候选,结合约束给建议、格式对", 0.9),
("轨迹B: 只查1个就给建议、格式对", 0.6),
("轨迹C: 查了2个但建议方向错", 0.2),
("轨迹D: 超长被截断,没给出建议", 0.0),
]
rewards = [r for _, r in group]
mean = sum(rewards) / len(rewards)
std = (sum((r - mean) ** 2 for r in rewards) / len(rewards)) ** 0.5
print(f"组内平均分(基准) = {mean:.3f} 标准差 = {std:.3f}\n")
print(f"{'轨迹':<34}{'reward':>7}{'优势A':>9} 怎么更新")
print("-" * 68)
for desc, r in group:
adv = (r - mean) / (std + 1e-8) # 组内相对优势 = (自己 - 组均值) / 组标准差
arrow = "↑ 强化(多往这条学)" if adv > 0 else "↓ 抑制(少这么做)"
print(f"{desc:<34}{r:>7.2f}{adv:>9.2f} {arrow}")
运行
python grpo_advantage_demo.py
你应该看到(确定性输出):
组内平均分(基准) = 0.425 标准差 = 0.349
轨迹 reward 优势A 怎么更新
--------------------------------------------------------------------
轨迹A: 逐个查全3个候选,结合约束给建议、格式对 0.90 1.36 ↑ 强化(多往这条学)
轨迹B: 只查1个就给建议、格式对 0.60 0.50 ↑ 强化(多往这条学)
轨迹C: 查了2个但建议方向错 0.20 -0.64 ↓ 抑制(少这么做)
轨迹D: 超长被截断,没给出建议 0.00 -1.22 ↓ 抑制(少这么做)
看明白了 GRPO 的本质:它不需要知道「一条轨迹绝对值多少分」,只需要知道「在同一批里它算好的还是差的」。 好的(优势为正)就让模型多产出这种,差的(优势为负)就压下去。基准是「组内平均」,完全不用额外的价值网络。
🐛 跑不通看这里:纯标准库,不该报错。注意这只是优势计算的示意,真实 GRPO 还要乘上策略比率、加 KL 约束、做 clip,这些在训练框架里。
📌 说清楚:这是教学示意。这个实验只演示 GRPO 最核心的「组内相对优势」怎么算。真实训练里还需要:一个能让 Agent 真正跑调研、调真实工具的训练环境、一套给每条轨迹打分的奖励函数,以及完整的 GRPO 训练循环(采样、算优势、更新、KL 约束),工程上复杂得多;这个小实验只为让你把机制和直觉看透。
🧭 你刚才看到的,等于真实系统的什么? 你算的「优势A」= 真实 GRPO 里指导每个 token 梯度方向的 advantage。真实系统里 reward 不是手填的,而是由奖励函数(看答案对不对、格式对不对、过程合不合理)自动算出;一个「组」是同一个问题采样出的 N 条轨迹。理解了「用组内平均当基准」,你就抓住了 GRPO 区别于 PPO 的最关键一点。
🎯 Part 2 · 面试深度 | ~45% 这部分逐阶段讲透,外加 Agent RL 里最容易踩的坑。这些是大模型训练岗面试的硬核考点。
🔒 关于「讲到哪」:本节把三阶段的原理、衔接、关键坑讲透,面试足够用。但真正能跑起来的「配方级」细节——奖励函数每一项的具体权重与公式、完整的 GRPO 训练配置(组大小、KL 系数、clip、学习率等)、调研训练环境的工程实现、负样本筛选的判定规则,以及真实可训练的数据——是训练营的实战内容。看完你会懂「为什么这么训、每阶段在治什么」,面试讲得清;要亲手把训练跑通,还需要那一层。本节不灌水,讲到的原理都是真的。
2.1 为什么必须多阶段:单阶段的问题
把三阶段拆开问「能不能只留一个」,你就懂了为什么缺一不可:
- 只做 CPT:模型有了 Agent 直觉,但不会按规范格式输出,工具调用解析不了,没法用。
- 只做 SFT:模型会模仿格式,但只是「背范例」,遇到没见过的情况不会变通,也不知道「怎样算更好」,能力卡在范例水平。
- 只做 GRPO:没有 SFT 冷启动,模型一开始产出全是垃圾,RL 没有可比较的「像样答案」,根本学不动(冷启动问题)。
三阶段是层层递进:CPT 打底、SFT 定规范、GRPO 提上限。顺序不能换,因为每一步都依赖前一步的产出。
2.2 Agentic CPT:注入 Agent 偏置
CPT(持续预训练)用的是上一章讲的 FAS / HAS 合成数据。它的目标不是教具体任务,而是让模型在参数里先有「Agent 该怎么动」的直觉:看到信息缺口会想到检索、看到多个来源会想到交叉验证。
为什么值得单独做这一步?因为如果跳过 CPT 直接 SFT,模型是「带着一张白纸学规矩」;有了 CPT 打底,模型是「带着直觉学规矩」,后续 SFT 和 RL 都更高效、上限更高。这也是近两年 Agent 训练的一个重要进展:把「Agent 偏置」提前到预训练阶段注入。
2.3 SFT 冷启动:学格式,给 RL 搭好起点
SFT 用上一章的优质轨迹数据,核心任务是让模型学会规范的输出:Thought / Action / Observation / Final 的结构、工具调用的格式。
两个关键点:
- Loss Mask:只对模型该生成的部分算 loss,mask 掉 observation(回扣第 5 章)。漏了它,模型会学着背搜索结果。
- 冷启动定位:SFT 不追求「最终最优」,只追求「格式对、能跑完、给 RL 一个像样起点」。真正的能力提升留给 GRPO。
2.4 GRPO 是什么:去掉价值网络的策略优化
GRPO(Group Relative Policy Optimization,组相对策略优化)是这两年大模型 RL 的主流方法之一。理解它,最好的方式是对比 PPO:
- PPO 需要训练一个额外的价值网络(critic / value model),去估计「当前状态大概能得多少分」当作基准。这个网络和主模型一样大,训练贵、占显存。
- GRPO 的洞察:同一个问题采样一组(比如 8 条)答案,直接用这组的平均分当基准,省掉价值网络。谁高于平均就强化、谁低于平均就抑制(就是你刚才小实验里算的优势)。
对长程调研任务,GRPO 这种「省一个大模型」的特性尤其香,因为调研轨迹很长、显存本就紧张。
说得更精确一点:GRPO 不是「不要基准、不估计价值」,而是把 PPO 里那个需要单独训练的价值网络(可学习的 critic),换成了一个基于组内统计量(平均、标准差)算出来的基准。基准还在,只是从「学出来的」变成了「现算的」。另外,真实的 GRPO 目标函数里还有策略比率、KL 散度约束、clip这些组件(见上方 🐛),小实验只演示了最核心的优势计算。面试时讲清这两点,比笼统说「GRPO 去掉了 value model」更显功底。
业内行话:面试聊到 RL 方法,能讲清「GRPO 相比 PPO 省掉了 value model,用 group 内的相对 reward 当 baseline」,比只会背「PPO 是 on-policy」要值钱得多。再补一句「所以 GRPO 对长轨迹任务的显存更友好」,就是真用过的人才说得出的话。
2.5 Agent RL 最容易踩的坑:负样本筛选
这是本章最值钱的一个实战经验。GRPO 里,低于平均的轨迹会被当负样本「抑制」。但 Agent 训练里有个陷阱:
调研任务轨迹很长,经常有轨迹因为太长被截断,还没来得及给出最终答案,reward 就是 0(失败)。如果把这些「截断失败」的轨迹不加区分地当负样本去训,模型会学到一个灾难性的捷径:「为了不被截断、不拿 0 分,赶紧随便给个答案」。结果就是调研深度和输出格式一起崩:模型变得又浅又急。
正确做法的方向:对「因截断而失败」的轨迹要特殊处理(筛掉、或不简单当负样本),把负样本的「锅」精准地扣在「真正做错」的轨迹上,而不是「没做完」的轨迹上。
讲师私货:这个坑是 Agent RL 和普通 RLHF 最不一样的地方之一。普通对齐任务答案短,几乎不会截断;但长程调研 Agent 一定会遇到。面试能讲出「我会区分『做错』和『没做完』,不把截断轨迹无脑当负样本,否则模型会学会偷懒」,面试官立刻知道你真训过 Agent,不是纸上谈兵。
🔒 至于具体怎么判定一条轨迹是「截断失败」还是「真做错」、用什么规则筛、筛多狠,是反复调出来的实战细则。方向上通常会综合「有没有产出最终答案、轨迹完成度、工具调用是否有效」这类信号来区分,而不是只看 reward 是不是 0——但具体怎么组合、阈值定多少,训练营里给可直接用的判定逻辑。本节你要带走的是这个区分意识——这一点讲清楚,面试就赢了。
2.6 奖励设计与动态采样(简述)
GRPO 的效果,一大半取决于奖励函数设计得好不好。调研 Agent 的奖励通常综合几个方面:
- 答案正确性:最终答案对不对(对照参考答案,或用模型判)。
- 格式合法性:工具调用、标签结构是否规范(防止为了答对而乱来)。
- 过程合理性:有没有合理使用工具、有没有无意义的重复或死循环。
还有一个常用技巧叫动态采样(dynamic sampling):如果某个问题采样出的一组轨迹全对或全错,这组的优势全是 0(因为大家都一样,没有「相对好坏」),对训练没贡献,白白浪费算力。动态采样会过滤掉这种「没有区分度」的组,只保留有学习信号的组。
🔒 设防点:奖励每一项怎么量化、权重怎么配、怎么防止模型钻奖励的空子(reward hacking),是整套训练里最吃经验、最值钱的部分。方向上,正确性通常是主项、占大头,格式与过程更多作为约束项(防止模型为了答对而乱来);但具体权重、怎么防 reward hacking,是训练营重点带的实战。本节讲清「奖励要综合正确性 / 格式 / 过程」这个框架,面试已经够用。
🧭 这一章到这儿:多阶段训练的为什么、每阶段分工、GRPO 直觉、负样本坑、奖励与采样思路都讲透了——你已经能在面试里把「Agent 怎么训出来的」讲到点子上。要把这套训练真正跑通(奖励配方、GRPO 完整配置、训练环境),那是亲自下场时要翻的山,也是训练营实战要带你走的。下一章回到工程视角,讲怎么把训练好的模型送上线。
🏆 Part 3 · 验收串题 | ~10%
关联面试题(5 道,覆盖 5 个角度)
- 【SFT vs 预训练】 监督微调(SFT)和预训练在目标、数据、训练方式上有什么区别?
- 【PPO vs GRPO】 比较 PPO 与 GRPO 在目标函数、优势估计方式上的区别。
- 【奖励函数设计】 在强化学习或 Agent 系统中,如何设计一个有效的奖励函数?
- 【长视界信用分配】 长视界任务里奖励稀疏、信用分配困难,怎么应对?
- 【基于环境的训练】 「基于环境(environment-based)」的训练方法和监督式训练有什么不同?
自检清单
- 能讲清为什么训练要分三阶段(CPT 打底 / SFT 定规范 / GRPO 提上限),以及顺序为什么不能换
- 能说清 SFT 为什么叫「冷启动」(给 RL 一个能优化的起点,而非最终模型)
- 能讲清 GRPO 的核心:用组内平均当基准、省掉价值网络,优势为正就强化、为负就抑制
- 能讲清 Agent RL 的负样本坑:截断失败轨迹无脑当负样本,会把模型训成「赶紧随便答」
- 能说出奖励设计的三个方面(正确性 / 格式 / 过程)和动态采样的作用(过滤无区分度的组)
学完这一章,你已经走通了「数据 → 训练」的完整闭环:从一个通用模型,经过 CPT、SFT、GRPO,变成一个真正会做调研的 Agent。下一章,我们回到工程视角,讲这套系统怎么从「训练出来的模型」变成「能扛真实流量的线上服务」:推理优化、并发、成本与监控。