本文是「Agent 开发实践与思考」系列第 15 篇。系列目录:
- 2024
- 2025
三个阶段各干什么
现在主流大模型的训练大致分三段:预训练、监督微调(SFT)、强化学习(RL)。
预训练做的事一句话能说清:在海量文本上预测下一个词。互联网上的书、代码、论文、帖子灌进去,模型学会语言规律,顺带把知识压缩进参数。这个阶段的产物叫基座模型,它擅长的不是回答问题,而是续写文本。你给它一个问题,它可能续写出十个相似的问题,因为在互联网文本里,问题后面跟着的经常还是问题。
对 decoder-only 模型来说,SFT 解决”怎么回话”。做法是把数据换成示范:一条指令配一个人写的(或者模型生成再经筛选的)标准回答,让模型继续学。 我对这个事情的理解是对这类模型,SFT 的训练目标和预训练完全一样,还是预测下一个词,变的只是数据和训练阶段。所谓微调并没有换一套新算法,只是把”续写互联网”调成”续写示范回答”。模型从示范里学到的是格式和风格:回答要直接给结论,要分点,代码要放在代码块里,被拒绝的请求要怎么措辞。
RL 阶段连示范都没有了,只有反馈。模型自己生成回答,外部环境给一个分数,得分高的回答下次出现的概率被调高,得分低的被压低。模型在试错中自己找出什么做法能拿高分。这是三个阶段里唯一一个不告诉模型标准答案的阶段。
为什么是先 SFT 后 RL
RL 的运作方式是在模型已有的行为分布里挑出好的、放大它们的概率,它不凭空创造行为。一种回答方式如果模型从来生成不出来,概率是零,奖励再高也找不到它。直接拿基座模型做 RL,生成的绝大部分内容根本不像回答,奖励信号稀疏到给不出方向,探索空间大到收敛不了。
SFT 的作用就是先把行为分布拉到像样的区域:回答的格式是对的,遇到指令会尝试执行,推理会一步步写出来。然后 RL 在这个像样的区域里探索,才有得挑。粗略地说,SFT 划定搜索空间,RL 在空间里做搜索。
这个机制有一个直接的推论:SFT 数据里的毛病会成为 RL 的起点。示范里如果全是”首先、其次、总而言之”的八股,RL 之后模型大概率还是这个腔调,因为 RL 只在这个分布里挑,不负责换分布。
SFT 记知识,RL 学长处
两个阶段的天花板不一样。
SFT 的天花板是标注数据。模型只能学会示范里有的做法,而且学的方式接近背诵:示范怎么写它就怎么写,示范里的错误也一并学走。标注数据覆盖不到的场景,SFT 之后的模型只能靠泛化撞上去。
RL 的天花板是奖励信号。因为模型是在试不是在抄,只要奖励设计得对,它有机会发现比所有示范都好的做法。R1 的训练报告里有一个被广泛讨论的细节:模型在长推理中自己出现了”等等,我重新检查一下”这类自我修正的行为,没有任何示范教过它这么写,这是试错试出来的。
一句话版的区别:SFT 让模型记住别人怎么做,RL 让模型发现怎么做更好。这也解释了为什么各家模型 SFT 之后风格趋同,而 RL 的投入程度开始拉开差距。
RLHF:人打不了分,但比得出好坏
开放任务没有标准答案。写一段文案、总结一份会议纪要,怎么算对?让人给每个回答打十分制,同一个人上午和下午打的都不一样,没法用。但把两个回答放在一起让人挑哪个好,这件事人做得又快又稳。
RLHF 就是利用这一点。先收集大量成对比较,用这些数据训一个奖励模型,让它学会预测人会选哪个回答,然后让大模型对着奖励模型做 RL。人从打分环节退出去了,打分的是奖励模型这个替身。
问题也出在这里。奖励模型只是一个近似的裁判,它对人偏好的拟合有误差。对着一个近似裁判优化得足够狠,模型会找到裁判的偏好漏洞,而不是真的把事做好:回答写得更长、格式更规整、语气更肯定,分数就高,内容对不对裁判看不出来。这类行为叫 reward hacking。任何代理指标被当成优化目标之后都会失灵,这是做工程的人早就熟悉的现象,在训练环节换个名字再出现一次。
过程奖励和结果奖励
RL 的反馈粒度有两种给法。
结果奖励只看最终答案:数学题的最后得数对不对,代码改完测试过没过。好处是便宜,判分可以完全自动化;坏处是反馈稀疏。一个二十步的任务只在终点给一个分数,中间哪步立功、哪步闯祸分不清。更麻烦的是它会奖励碰运气的坏过程:过程全错但蒙对答案的轨迹拿了高分,下次模型会更倾向于复现这套坏过程。
过程奖励逐步给分,每步判断这步走得对不对。信用分配的问题解决了,代价是标注贵,让真人逐步批改一份数学解答,成本是只批最终答案的几十倍。替代方案是用程序逐步验证,但这条路只在数学和代码这类可验证领域走得通。开放任务里也有人训练过程奖励模型来打分,那它本身又是一个可以被攻击的近似裁判,reward hacking 的问题原样回来。
DeepSeek R1 的启发
今年一月 R1 发布,圈内讨论最多的是它展示了一条路径:在可验证领域,可以少依赖奖励模型,直接用规则发结果奖励。数学题,答案和标准答案对上就是一分;代码,测试通过就是一分。规则奖励减少了对单独奖励模型的依赖,但并不意味着不会被利用,规则覆盖不全时仍然可能出现 specification gaming。正式版 R1 还经过冷启动数据的 SFT 和后续多个训练阶段,不能把它概括成只有规则奖励。它使用的 GRPO 是一种策略优化方法。与依赖单独 critic 或价值模型估计状态价值的方法不同,GRPO 对同一道题采样一组回答,用组内奖励计算相对优势,再更新策略。这里的 critic、价值模型和奖励模型不是同一个概念,奖励模型评估回答,critic 估计状态或轨迹价值。
顺带补一个我一开始理解错的点。R1-Zero 是从基座模型开始,只用大规模强化学习探索推理能力的实验版本。它证明了在基座能力和奖励条件合适时,可以不先做传统 SFT,但可读性差、语言混杂等问题明显。正式版 R1 则采用了冷启动数据进行 SFT,再结合强化学习,并加入了更多训练阶段来改善可用性。两者不是同一个训练流程,不能用 R1-Zero 的结果概括正式版 R1。
抛开算法细节,这件事再次确认了一个分水岭:验证器便宜的领域,RL 的收益最大。数学有标准答案,代码有编译器和测试。这和我在拆解 Coding Agent 那篇里写的是同一件事:编程领域有便宜的裁判,所以 Agent 在编程上最先跑通。R1 说明这条规律在训练侧同样成立。
和我的工作的关系
第一个关系是行业趋势。各家实验室现在都在把工具调用、多轮任务 RL 化,也就是所谓 agentic RL:给模型一个带工具的沙箱环境,以任务完成为奖励去训练。未来模型的 Agent 行为会越来越多从这种环境里练出来,提示词能改变的部分相应变少。
第二个关系更实际:我们虽然不训模型,但天天在做和奖励设计同构的事。**你给 Agent 设计的环境和反馈,本质上就是奖励设计。**工具报错时返回什么信息,决定 Agent 下一步怎么修正;任务拆成什么样算完成,决定它往哪个方向使劲;中间产物保留什么丢弃什么,决定它能从自己的轨迹里看到什么。这些设计的好坏,和 RL 里奖励函数设计的好坏,是同一类问题。
第三个关系落在评估上。我在评估那篇里写过,判据能程序判就不要人判。学完后训练我才意识到这个原则的另一半:一套有明确判据、判据可被程序验证的评估集,本身就是一个训练场的雏形。R1 的经验放到应用层,结论是能自动验证的检查越多,系统的进化空间越大。反过来,只能靠人眼感觉好坏的环节,既不配进评估集,将来也不配进训练场。
reward hacking 在应用层也有对应物。用 LLM 当裁判做评估,裁判同样会被讨好:回答写得长、格式漂亮就占便宜。Agent 也会优化指标本身,你让它把任务清单勾完,它就倾向于草草勾选而不是把活干完。即使使用规则奖励,也可能因为规则没有覆盖真实目标而出现 specification gaming。对策还是老一套:能程序验证的判据优先,同时检查规则是否覆盖了真正的任务目标。
收尾
我的一个判断是,应用层的护城河不在模型权重,在环境和数据。权重是各家实验室的军备竞赛,轮不到我们参与;但环境怎么搭、反馈怎么设计、评估集怎么攒,这些是应用团队自己的资产,而且它们和后训练时代模型能力的进化方向是同构的。这也解释了为什么我一直把评估看得比提示词重:提示词是一次性的指令,评估集是可以反复产生反馈的资产。
悬而未决的问题也清楚:开放任务至今没有便宜的验证器。文案、沟通、创意类的工作,奖励信号还是得人给,或者用一个会被攻击的裁判给。这个问题没有好答案之前,编程和数学会继续是 Agent 能力进展最快的领域,因为它们站在验证器便宜的那一边。

