第 27 课:Agent 训练

上一课我们把"会用工具、会规划"交给提示与编排去实现。但编排改一次、生效一次,换个场景就得重写:怎么把会用工具训进权重?这一课从"提示做不到的事"讲起,把一次 Agent 执行变成可训练的信号(轨迹 → 奖励),再看只给结果奖励为什么会出问题、过程奖励与工具结果奖励怎么设计,最后回答一个成本问题——提示、工作流、微调、RL,到底该怎么选。

🎯 学完这 6 步你将能够:
① 说清"策略写进提示"与"写进权重"的分工,并判断哪些能力必须靠训练
② 把一次 Agent 执行变成可训练的轨迹与奖励信号,说出 ReTool / ToolRL 报告的效果与代价,并分清算法归属(ReTool 用 PPO、ToolRL 用 GRPO;GRPO 即「不用单独训练一个打分模型、直接拿一组采样答案的相对好坏当基准来更新策略」)
③ 解释结果奖励为什么会教坏模型、过程奖励与工具结果奖励怎么补,并解释训练循环为什么要盯稳定性与成本
🗺 本节推理链(6 步逻辑递进:从"为什么要训练"到"四条路怎么选")
1要让一个 Agent 记住"什么时候该用工具、什么时候不该",这就要求先分清两种办法:把策略写进提示(prompt)还是写进权重(weights)——前者改一次就生效、但不稳定且占 tokens。策略要么写提示要么写权重。
↓
2既然「策略要么写提示要么写权重」,所以要动权重就得先有可学的信号——这就要求把一次任务变成一条可训练的轨迹(trajectory:写进 context 的思考、动作与观察序列),再给它打分。轨迹要先能被打分。
↓
3既然「轨迹要先能被打分」,那么最省事的打法是只看结果——这就要求正视它的代价:结果对了不代表过程对,长轨迹里每一步都写进 context、却分不清哪一步立了功、哪一步闯了祸。只给结果奖励会分不清对错。
↓
4既然「只给结果奖励会分不清对错」,所以要给每一步、每个工具参数单独打分——这就要求引入过程奖励(process reward)与工具结果奖励,而不是只看最终 tokens 序列答对没有。过程奖励要标中间步。
↓
5既然「过程奖励要标中间步」,那么给每一步都打分就意味着 rollout 里要真的执行工具、还要给每个中间步算奖励——这就要求整个训练循环跑得稳,否则工具执行慢会拖垮采样、奖励缝一多 gradients 就会学"怎么骗奖励"。训练循环要稳。
↓
6既然「训练循环要稳」,那么最后要回答一个成本问题:这就要求在提示、工作流、微调、RL 四条路里选——判据不是"越重越好",而是"这条策略靠提示里的 context 能不能稳住"。训练与提示要按场景选。
Agentic RL轨迹与奖励结果 vs 过程奖励工具结果奖励GRPO训练选型
1
提示能改行为——那什么时候非动权重不可?
提示:比较"每次都要交代"和"练成习惯"两种做法的差别——哪一种更稳、更省、更能迁移到新场景?
▾
知识背景
用监督微调(SFT,即拿一批带标准答案的示例、让模型照着模仿该怎么做)学工具调用,本质是模仿给定的轨迹;论文 ToolRL(Qian 等,arXiv:2504.13958)指出:SFT 常常只学到"表面像",会过度解读工具、不会拒绝不合适的工具,泛化到新工具上就露馅;而基于强化学习(RL)的做法能在反馈中探索策略。该工作报告 RL 相比基座提升约 17%、相比 SFT 提升约 15%。

上一课我们把"会工具、会规划"交给提示与编排。这一张要问:既然提示能改行为,为什么还要动权重?

因为提示是"每次都要重新交代"的软约束:它占 tokens、随措辞漂移、换个场景就可能失效;而权重里的策略是默认行为,不占提示、无需每次交代、更容易迁移。就像教新人:口头交代一次(提示)能应付今天,反复练到成肌肉记忆(训练)才能在新情况下也做对。所以先分清两条路各自管什么。

🧮 第一笔账:提示 vs 权重
Step 1:两条路的性质对比
维度写进提示写进权重
生效时机改一次即生效需一次训练
tokens 开销每次请求都占不占提示
稳定性随措辞 / 场景漂移成为默认行为
迁移性换个场景要重写泛化到相似场景
算术无关的一条对比:提示适合"临时、多变、要立刻见效"的策略;权重适合"稳定、高频、要跨场景一致"的策略。
Step 2:SFT 的泛化缺口
训练方式擅长短板
SFT(模仿轨迹)复现见过的模式遇到新工具 / 新场景就退化
RL(按反馈探索)学会"何时用、何时不用"需要可打的奖励与更多算力
算术无关的一条判据:SFT 教"怎么做",RL 教"该不该做"——这也是 ToolRL 报告 RL 优于 SFT 的原因。
Step 3:训练值不值(以 ToolRL 报告为例)
对比提升
RL 相比基座约 +17%
RL 相比 SFT约 +15%
能否直接相减原文只说 +17% over base / +15% gain over SFT,未声明为同一基线的绝对百分点;若两者确为同一基线,才有 SFT ≈ 17 − 15 = +2(示意,非原文口径)
算术:报告口径下 RL 相对基座约 +17%、相对 SFT 约 +15%。两个数出自不同比较基准、原文未明示口径,不能简单相减;只有当二者都是"相对同一基线的百分点"时,才谈得上 SFT ≈ +2 个点(此处仅作示意)。结论不是"能训就训",而是"当提示稳不住时才值得动权重"。
🎯 关键认知

提示与权重不是替代关系,而是分工:提示管"多变、临时、要立刻生效",权重管"稳定、高频、要跨场景一致"。判断该不该训,只问一句——这条策略靠提示能不能长期稳住?

这条路最早的标志性工作是 Toolformer(Meta, 2023, arXiv:2302.04761):让模型在预训练阶段自己标注「这句话里该调哪个 API、参数填什么」,把工具用法直接写进权重。它证明了「会用工具」可以不完全依赖提示,而是训练出来的能力——这正是本课要走的那条路的起点。

AI 助教
👋 对"提示还是训练"有疑问?比如「我的需求该不该训练」「SFT 够不够」?

说清你的场景与策略稳定性要求,我帮你判断该走哪条路。
2
一次 Agent 执行里那么多动作,怎么把它变成能训练的信号?
提示:把一次执行摊开看——模型每一步产出什么、环境回什么、最后怎么判对错?这些里哪些能当"分数"。
▾
知识背景
ReTool(Feng 等,arXiv:2504.11536,字节 Seed)用"冷启动 SFT + RL"训练工具调用:先用合成数据教模型"边推理边写代码执行",再让 RL 基于任务结果探索何时调用工具(RL 阶段用 PPO,Schulman 等,arXiv:1707.06347)。它在 AIME 上报告:32B 模型 400 步达到 67%,而纯文本 RL 基线 1080 步只有 40%;扩展设置下达到 72.5%。

上一张卡片说明策略该不该写进权重。要训练,就得先有可学的信号——一次执行怎么变成训练数据?

因为模型要学的是"在什么状态下、做什么动作"这个映射,所以需要把执行过程记录成一条轨迹(trajectory):每一步的思考、动作、环境观察都写进 context,再对整条轨迹或某些步打分。就像教练看比赛录像:先把每个回合拆出来,再逐球点评,才知道哪一招该表扬、哪一招该改。所以先看一条轨迹的构成,再看它怎么被"打分"用起来。

🧮 第二笔账:从轨迹到可训练信号
Step 1:一条轨迹由四类片段构成
片段内容能否当信号
State 状态任务 + 当前上下文——
Thought 思考模型的推理文本难直接判对错
Action 动作调用工具 + 参数可判格式 / 参数
Observation 观察工具返回值可判结果
算术无关的一条结构说明:能直接当信号的是动作与观察;思考文本要靠"最终结果"或"过程奖励"间接判——这正是后面两张卡片的主题。
Step 2:ReTool 报告的训练效率
方法训练步数AIME 准确率
纯文本 RL 基线108040%
ReTool(工具+RL)40067%
步数比1080 ÷ 400 = 2.7×准确率 +27 点
算术:ReTool 用 400 步到 67%,基线要 1080 步才 40%——步数比约 2.7×,准确率差 27 个点。说明"让模型学会调用工具"可能比"在文本里死磕"更省算力。
Step 3:扩展设置与对照
设置数值
ReTool 扩展设置72.5%
相对 o1-preview 报告口径+27.9 个百分点
关键副作用出现"代码自我纠错"等涌现行为
算术:72.5% 与 +27.9 个百分点是该论文的口径。值得记住的不是某个分数,而是机制:把工具结果接进训练信号,模型会自己学会"什么时候该调、错了怎么改"。
🎯 关键认知

把 Agent 训练起来的第一步不是"选算法",而是把一次执行记录成能打分的轨迹:状态、思考、动作、观察。能直接打分的是动作与观察;思考要靠结果或过程奖励来间接监督。

AI 助教
👋 对"轨迹变信号"有疑问?比如「一条轨迹要多长」「冷启动数据从哪来」?

说一下你的任务与环境,我帮你设计轨迹采集与奖励信号。
3
只给最终答案一个分,模型会学到什么?
提示:想一个"答案蒙对、过程全错"的例子——如果奖励只看最终答案,模型会学到什么?
▾
知识背景
结果奖励模型(ORM)只看最终结果对不对;过程奖励模型(PRM)给每一步打分。OpenAI 的《Let's Verify Step by Step》(Lightman 等,arXiv:2305.20050)在 MATH 上对比后报告:用 PRM 做 best-of-N 选择解出 78.2%,ORM 为 72.4%;并公开了 PRM800K(约 80 万条步级人工标注)。

上一张卡片说轨迹要能被打分。最容易实现的打分就是"看最后答对没有"——可为什么只看结果会把模型教坏?

因为长轨迹里"结果对"不等于"过程对":模型可能用错误的推理蒙对答案,也可能在正确推理后算错最后一步。只看结果,奖励就分不清哪一步立了功、哪一步闯了祸——这就是信用分配(credit assignment)难题。就像只按期末总分表扬一个学生:他可能靠押题蒙对,真实能力并没提高。所以要看得更细。

🧮 第三笔账:结果奖励 vs 过程奖励
Step 1:结果奖励为什么分不清对错
情形结果过程结果奖励会给
推理全对、答案对对对高分(应得)
推理错、蒙对答案对错高分(错奖)
推理对、末步算错错基本对低分(误罚)
算术无关的一条诊断:结果奖励既会错奖蒙对的轨迹,也会误罚末步手滑的轨迹——因为整条轨迹摊在同一个 context 里,模型看不出该在哪一步改。
Step 2:PRM 比 ORM 高多少
奖励模型MATH 子集(best-of-N)
ORM(只看结果)72.4%
PRM(逐步打分)78.2%
差值78.2 − 72.4 = 5.8 个百分点
算术:过程监督比结果监督高 5.8 个百分点。原因是它提供了更精确的反馈——能指出错在第几步,而不是给整条结论一个笼统的分数。
Step 3:过程奖励的代价
项数值
公开的过程标注量约 80 万条(PRM800K)
标注粒度逐步(positive / negative / neutral)
代价标数据贵、比结果奖励更难自动化
算术:80 万条步级标注是过程奖励的门槛。所以工程上常见折中:先用结果奖励冷启动,再对关键步骤补过程奖励。
🎯 关键认知

结果奖励的问题不是"不准",而是太粗——它把"整条轨迹"压成一个数,于是既奖错也罚错。过程奖励用 5.8 个点的优势换来了精确定位能力,代价是要标中间步。

AI 助教
👋 对结果 / 过程奖励有疑问?比如「没有人工标注怎么办」「过程奖励怎么自动生成」?

说清你的任务与可用的判分方式,我帮你选奖励方案。
4
为什么只加一个"结果分"不够,还要给每一步、给工具参数单独打分?
提示:一次工具调用要同时满足哪些条件才算"对"?把一个笼统的"调用成功"拆开,能拆出几个彼此独立的判据?
▾
知识背景
ToolRL(Qian 等,arXiv:2504.13958)系统研究了工具使用任务的奖励设计,指出粗粒度、只看答案匹配的奖励效果最差;它把奖励拆成格式奖励(特殊标记是否齐全、顺序对不对)与正确性奖励(工具名、参数名、参数值是否匹配),并用 GRPO 训练。报告称相比基座约 +17%、相比 SFT 约 +15%。

上一张卡片说过程奖励更细。落到工具调用上,为什么一个"结果分"还不够?

因为工具调用可能错在三个不同层次:格式(标记缺失)、选择(工具名错)、参数(名字对、值填错)。只给一个总分,模型不知道错在哪、也就无从改起。就像考试分步给分:过程分、结果分分开算,学生才知道是"思路错"还是"算错";只给一个总分,改错题时两眼一抹黑。所以要把奖励拆细。

🧮 第四笔账:把奖励拆成可归因的几项
Step 1:工具调用的三层错误
层次典型错误对应奖励项
格式缺标记、顺序乱格式奖励(0/1)
选择工具名编造 / 选错工具名匹配
参数参数名或值不对参数名 / 值匹配
算术无关的一条拆解:奖励要能逐层归因——格式错就扣格式分、选错就扣选择分,模型才知道往哪改。
Step 2:乘性 vs 加性的差别
组合方式效果出处 / 定位
加性(求和)可用格式分"补偿"正确性,诱导刷格式ToolRL 原文做法(R = R_format + R_correct)
乘性(相乘)任一项为 0 则总分 0,堵住捷径本课推荐的改进(非 ToolRL 口径)
算术无关的一条设计原则(本课推荐,非 ToolRL 口径):把"格式"当门槛(乘性)而不是"加分项"(加性),否则模型会学会"格式写得很漂亮但答错";ToolRL 原文用的是加性 R = R_format + R_correct。
Step 3:拆细后的效果(ToolRL 报告口径)
对比提升
相比基座约 +17%
相比 SFT约 +15%
训练稳定性报告称训练更稳、可扩展
算术:+17% / +15% 是该论文的口径。关键不是数字,而是"奖励拆得够细 → 奖励曲线更稳、泛化更好"这条因果链——代价是要重算的 tokens 变多。(注意:ToolRL 原文用的是加性奖励 R = R_format + R_correct;本卡推荐的乘性是对"刷格式"风险的改进,两者不是一回事。)
🎯 关键认知

工具训练的奖励设计有一条铁律:把错误拆到"可归因"的粒度——格式、选择、参数各算各的;并且(本课推荐)用乘性把格式当门槛,防止模型用"格式漂亮"掩盖"答错"。

AI 助教
👋 对奖励设计有疑问?比如「奖励要不要减分」「怎么防止刷分」?

说一下你的工具集与常见错误,我帮你拆奖励项。
5
强化学习训练 Agent,为什么经常训着训着就崩?
提示:Agent 的训练比纯文本训练多接了一条"真实世界"的链路——想想它多了什么、会带来什么麻烦。
▾
知识背景
Agent 的 RL 训练循环是"采样轨迹(rollout)→ 执行工具 → 算奖励 → 更新参数",常用 GRPO(Group Relative Policy Optimization,一种用一组采样估计基线的策略优化方法;Shao 等,arXiv:2402.03300)。与纯文本 RL 不同,工具执行会拖慢采样:VerlTool 等工程报告显示,把 rollout 做成异步可带来 1.22×–1.97× 的加速(arXiv:2509.01055);同时,奖励设计不当会让模型学会"骗奖励"(reward hacking)。

上一张卡片把奖励拆细了。但拆得细不代表训得稳——为什么 Agent 的 RL 更容易训崩?

因为它比纯文本多了一条真实世界的链路:采样时要真的调工具、等返回,工具慢就把 GPU 晾在那里;同时奖励一旦有缝,gradients(梯度,即参数更新的方向)会顺着缝去"刷分"而不是学本事。就像开车时方向盘猛打——单步看着有效,跑一段就翻车;训练要的是可控、可复现的更新。所以要从循环、瓶颈、稳定性三处一起看。

🧮 第五笔账:训练循环的三个坑
Step 1:循环的四步与它们的时间占比
环节做什么常见瓶颈
Rollout采样轨迹工具执行最慢
Tool exec真实调用工具受外部系统限制
Reward打分奖励设计易被钻空子
Update更新参数学习率 / 批大小不稳
算术无关的一条诊断:Agent RL 与文本 RL 最大的不同是 rollout 里多了"等待真实世界"——它既是性能瓶颈,也是训练不稳定的来源之一。
Step 2:异步 rollout 能省多少
场景异步相对同步的加速
数学工具(Math-TIR)1.32×
SQL1.22×
深度搜索(DeepSearch)1.97×
算术:异步采样在三个场景分别加速 1.32× / 1.22× / 1.97×(工程报告口径)。结论:Agent RL 的成本大头常在"等工具",而不是"算梯度"。
Step 3:奖励被钻空子的三种典型
漏洞模型学到什么
只看格式输出漂亮格式、内容乱写
只看答案匹配记住答案、跳过推理
可被检索到的奖励把奖励信号"抄"进回答
算术无关的一条纪律:奖励里任何"可被直接写出来"的部分,都会被模型写出来——所以奖励要看模型行为的结果,而不是它能复述的文本。
🎯 关键认知

Agent RL 的稳定性来自两处:工程上把"等工具"异步掉(1.22×–1.97×),算法上让奖励不可钻空子。判据一句话:把奖励定在"行为造成的结果"上,而不是"模型能说出来的话"上。

AI 助教
👋 对训练稳定性有疑问?比如「怎么发现模型在刷分」「rollout 太慢怎么办」?

说清你的训练循环与奖励,我帮你找不稳定的来源。
6
提示、工作流、微调、RL——这四条路怎么选才不浪费算力?
提示:给这四条路按"改动成本"排个序,再想每条路各自能解决什么问题、不能解决什么问题。
▾
知识背景
第 20 课已给出"能简单就别复杂"的总原则(Anthropic《Building Effective Agents》)。把这条原则用到"训练 vs 提示"上:提示管临时多变、工作流管路径可写死、SFT 管稳定行为与格式、RL 管"要不要做 / 做得好不好"这类无法用示例写死的策略。

前面五张卡片把"训练"这条线讲完了。最后回到最实用的一问:四条路到底该怎么选?

因为四条路的成本大致差一个数量级(示意):改提示几乎免费、写工作流要工程、SFT 要标数据、RL 要奖励与算力。用最重的手段去解决最轻的问题,就是浪费。就像出行选工具:三公里走路、三十公里地铁、三百公里高铁——不是越贵越好,而是匹配距离。所以用一张判据表把选择固化下来。

🧮 第六笔账:四条路的选型
Step 1:四条路的成本与适用
路径成本量级适合解决
提示最低(改文本)临时、多变、要立刻见效
工作流低(写编排)步骤可提前写死
SFT中(标轨迹)稳定行为 / 格式 / 风格
RL高(奖励 + 算力)策略写不进示例(该不该用工具)
算术无关的一条排序:提示 < 工作流 < SFT < RL——永远优先用更轻的那条,只有它确实稳不住才升级。
Step 2:一句判据定分叉
问题答案选
改提示能稳定解决吗能提示 / 工作流
只能用示例教、且要稳定是SFT
要学"该不该做"的取舍是RL
算术无关的一条判据链:先问"能不能用 context 里的提示稳住"——能就停在这里;不能,再看是要"学会做"(SFT)还是"学会取舍"(RL)。
Step 3:常见误配与代价
误配后果
能改提示却上 RL多花数量级算力,收益不成比例
该学取舍却只做 SFT新场景泛化差(ToolRL 报告的现象)
该写死流程却上 Agent引入不确定性,得不偿失
算术无关的一条收口:本课把"训进权重"讲清了,但结论仍然克制——训练是最后手段,不是默认选项。
🎯 关键认知

本课收口:Agent 训练的链条是先分清提示与权重的分工 → 把执行变成可打分的轨迹 → 用过程奖励修正结果奖励的粗糙 → 把工具奖励拆到可归因 → 把训练循环做稳 → 最后按成本选型。下一课收口全课程:怎么证明一个 Agent 真的能上生产——评测、可靠性、安全与发布门禁。

AI 助教
👋 对训练选型有疑问?比如「我的场景该 SFT 还是 RL」「能不能都不做」?

说清你的策略稳定性与数据情况,我帮你选路。