跳到正文

第 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,模型能学会「输出格式长什么样」,但它只是在模仿轨迹,遇到训练里没见过的情况就抓瞎,而且不知道「怎样算做得好」。

真实的训练是分三阶段、层层递进的,像培养一个调研员:

  1. 先打底子(Agentic CPT):大量泛读,在脑子里建立「Agent 该怎么动」的直觉偏置。
  2. 再学规矩(SFT 冷启动):照着优质范例临帖,学会规范的输出格式和工具调用。
  3. 最后实战打磨(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 个角度)

  1. 【SFT vs 预训练】 监督微调(SFT)和预训练在目标、数据、训练方式上有什么区别?
  2. 【PPO vs GRPO】 比较 PPO 与 GRPO 在目标函数、优势估计方式上的区别。
  3. 【奖励函数设计】 在强化学习或 Agent 系统中,如何设计一个有效的奖励函数?
  4. 【长视界信用分配】 长视界任务里奖励稀疏、信用分配困难,怎么应对?
  5. 【基于环境的训练】 「基于环境(environment-based)」的训练方法和监督式训练有什么不同?

自检清单

  • 能讲清为什么训练要分三阶段(CPT 打底 / SFT 定规范 / GRPO 提上限),以及顺序为什么不能换
  • 能说清 SFT 为什么叫「冷启动」(给 RL 一个能优化的起点,而非最终模型)
  • 能讲清 GRPO 的核心:用组内平均当基准、省掉价值网络,优势为正就强化、为负就抑制
  • 能讲清 Agent RL 的负样本坑:截断失败轨迹无脑当负样本,会把模型训成「赶紧随便答」
  • 能说出奖励设计的三个方面(正确性 / 格式 / 过程)和动态采样的作用(过滤无区分度的组)

学完这一章,你已经走通了「数据 → 训练」的完整闭环:从一个通用模型,经过 CPT、SFT、GRPO,变成一个真正会做调研的 Agent。下一章,我们回到工程视角,讲这套系统怎么从「训练出来的模型」变成「能扛真实流量的线上服务」:推理优化、并发、成本与监控。