推理模型是训练出来的,不是提示出来的
从零构建推理模型可以看清:思维链源于带可验证奖励的强化学习训练,而非巧妙的提示词技巧。

去年团队午餐时我曾经不太有说服力地捍卫过一个观点,如今我更加确信它了:如果你对推理模型的理解还停留在“就是个被要求一步步思考的普通大模型”,那你其实并没有真正理解推理模型,而这种误解正在悄悄地让你在生产环境中损失金钱和准确率。推理模型不是一种提示技巧,而是训练的产物。让它们擅长数学和代码的思维链行为,来自带可验证奖励的强化学习,而不是你在系统提示词里写的任何东西。我是在跟着 Sebastian Raschka 新推出的 11 小时“从零构建推理模型”课程走完同样的路径后,才真正想通这一点的:加载一个小型 Qwen3 基础模型,实现一个验证器,运行 GRPO,然后看着推理轨迹越来越长,准确率一路攀升。一旦你在自己的训练循环里亲眼见证过这个过程,就再也无法视而不见了。
让我先把这个论点好好论证一下,然后再在该收回的地方收回。因为确实有一个地方,提示词真的很重要,假装它不重要本身也是另一种形式的炒作。
为什么“直接提示就行”的思维模型站不住脚
流行的说法大致是这样的:2022 年,研究人员发现,在提示词末尾加上“让我们一步步思考”,可以显著提高算术准确率,思维链提示由此诞生。这话本身没错。但这个故事漏掉了接下来发生的事:各大实验室把这种行为用强化学习固化进了模型权重里。现代推理模型不再需要你那句一步步思考的咒语。它默认就会生成很长的推理轨迹,因为它被训练成了这样,并且因为生成最终能得出正确答案的轨迹而获得奖励。
你自己花一个下午就能验证这一点。拿一个基础模型,比如 Qwen3 0.6B,它在一块消费级 GPU 上就能跑。用它在 MATH-500 上分别测试有无思维链提示的情况,你会得到一个温和的提升。然后再换成同一模型家族中经过 RLVR 训练的版本。这两种条件之间的差距已经不是小幅提升,而是断崖式的。没有任何一条系统提示词能填平这个差距。这就是我观点的经验核心:能力存在于权重之中,而权重之所以变成这样,是靠训练,而不是推理时巧妙的 token 排列。
这种混淆之所以长期存在,是因为从外部看,两者几乎一模一样:模型都会在给出答案前输出一长串中间推理。但表面相似掩盖了因果上的根本区别。让基础模型一步步思考,就像让人在心算时边算边念叨思路,念叨是跟在能力后面的。而 RL 训练真正改变的是能力本身,因为模型被端到端地优化以追求答案正确,而长篇推理恰好是解决难题、得出正确答案的一种有效策略。
验证器才是关键所在
我以前做 ML 工程师时,RLHF 中总让我觉得有点别扭的,是奖励模型。你先训练一个独立的神经网络去模仿人类偏好,然后让策略去优化它,接着整个项目剩下的时间都在对抗奖励作弊。策略会找到一些退化的输出,它们在奖励模型那里得分很高,但对真正的人类毫无用处。这种对抗关系是写死在架构里的。
可验证奖励的强化学习(RLVR)完全绕开了这个问题。亲手从零实现一个验证器,你会更加欣赏这一招的巧妙。对于数学题,验证器就是一个枯燥、确定性的程序:从模型输出中提取最终答案,做归一化处理(比如处理分数、小数,以及 1/2 与 0.5 这类等价形式),然后检查数学上是否等价。答对得一分,答错得零分。不存在可以被钻空子的学习型奖励模型,奖励信号就是基准真相。
这就是为什么推理模型最先在数学和代码上变强。这两个领域都有廉价、可靠的验证器:数学有符号等价检查器,代码有单元测试。你不需要人工标注员给输出排序,你只需要一个返回布尔值的 Python 函数。对于想构建特定领域推理能力的人来说,实际影响非常直接:如果你能为你的领域写出验证器,你大概率也能训练出该领域的推理模型。如果你做不到,比如你领域里的“正确”取决于品味,像营销文案那样,那你就只能用 RLHF,并承受它带来的奖励作弊之苦。
在一个新领域里,推理能力的瓶颈不是算力,也不是数据,而是你能否把“正确”的含义写成一段程序。
我特别喜欢先于任何训练构建验证器这件事,它一举两得。在 MATH-500 上给基础模型打分做评估的那个评分器,在 RL 阶段就变成了奖励函数。自己动手实现时,你会注意到它做了多少细微的工作:答案提取真的很棘手,因为模型会用几十种格式表达最终答案,而脆弱的提取器会悄无声息地污染你的奖励信号。如果你的正则只匹配框起来的答案,那么一个写出“因此 x = 7”的模型可能会被判错。粗糙的验证器会教出粗糙的策略。这类教训,你是永远不可能从读论文中学到的。
GRPO 究竟对权重做了什么
训练循环本身,在简化的从零实现形式下,出奇地紧凑。Group Relative Policy Optimization,也就是 DeepSeek 推广开来的那个算法,去掉了让 PPO 特别吃显存的 critic 网络。你不再学习一个价值函数,而是针对同一个提示词生成一组回答,用验证器给它们全部打分,然后计算每个回答相对于组内平均水平的优势。比组平均分更好的回答,其词元概率被推高;更差的则被压低。
def grpo_advantages(rewards: torch.Tensor) -> torch.Tensor:
# rewards: [group_size], one per sampled response to the same prompt
mean = rewards.mean()
std = rewards.std().clamp_min(1e-4)
return (rewards - mean) / std # relative advantage per response
# Training step: maximize advantage-weighted log-probability
def grpo_loss(logprobs: torch.Tensor, advantages: torch.Tensor) -> torch.Tensor:
# logprobs: summed sequence log-prob under the current policy
return -(advantages.detach() * logprobs).mean()
真实的实现还会加入 KL 惩罚,防止策略偏离参考模型太远,并借用 PPO 的裁剪机制,但上面这个骨架确实就是核心思想。而让它看起来近乎神奇的是:你从不告诉模型任何关于推理风格的东西,你只奖励正确的最终答案。然而随着训练推进,回答长度会不断增长。模型开始在推理过程中自我修正,比如“等等,我检查一下”,因为带有验证行为的轨迹更容易得出正确答案,而正确答案是唯一能换来奖励的东西。思维链风格是优化问题的一个涌现解,而不是任何人设计出来的行为。这就是我说它是训练出来而非提示出来的原因:提示词时代的这种行为,不过是人类在模仿 RL 后来自己发现的东西。

这里埋着一个务实的工程提示,是炒作周期常常跳过的:一个 0.6B 模型加上一块不错的 GPU,就足以真实地观察到这种动态。你可以在每小时只需几美元租用的硬件上,通过 GRPO 获得可测量的 MATH-500 提升。但你得不到前沿模型的水平。没关系,这本来也不是这次练习的目的。
推理时扩展:算力在哪里部分地取代了训练
在任何 RL 发生之前,有一类技术可以在权重冻结的情况下提升答案质量:用温度和 top-p 采样多个候选,然后把它们组合起来。自洽性(self-consistency)是主力方法:生成 k 个答案,对最终答案取多数投票。它的效果好得出奇,而且对基础模型同样有效。这是我开头论点的第一道裂缝,我承认这一点:推理时的计算量是一条真实存在、且与训练正交的提升途径。
但仔细看看这些技术实际上需要什么。多数投票只有在模型本身已经有一定概率给出正确答案时才有用:投票放大的是已经存在的信号,它无法凭空创造信号。基于评分的筛选(按序列对数概率对候选排序)也有同样的性质。而自我改进循环,即模型批评并修改自己的答案,在基础模型上表现得令人失望地弱,因为诚实的自我批评本身就是一种能力,而这种能力正是 RL 装进模型里的。每一种推理时技巧都可以与训练叠加,但没有一种能替代训练。前沿系统之所以把 RL 训练的模型与推理时扩展结合起来,是因为二者是相乘的关系,而不是相加。
成本一面对从业者很重要。k=16 的自洽性意味着推理成本翻了十六倍。这笔账划不划算,完全取决于你的每美元准确率曲线,而唯一诚实的回答方式,就是自己画出 MATH-500 准确率随候选数量变化的曲线。我们在关于 flash 级模型与推理效率的文章中讨论过类似的计算放置问题,其反复出现的主题是:“多花算力”至少有三种不同的含义,而且它们并不能互换。
蒸馏,以及提示词唯一残存的地方
从零构建流程的最后一个阶段是蒸馏:拿一个强大的(通常是大型的)推理模型生成的长推理轨迹,直接用普通监督学习微调一个小模型。这里没有 RL,循环中也没有验证器。许多你真正会部署的廉价小型推理模型,就是这样做出来的。这反而强化了我的论点,而不是削弱它:推理行为依然来自由 RL 训练模型生成的训练数据,只不过是通过梯度下降而不是奖励传递过来的。能力从来不是在提示时注入的,它始终是靠优化烘焙进去的。
那么,我的逆向观点在哪里会站不住脚?坦白讲:提示词在边缘地带依然重要,而且这些边缘并不等于零。推理强度控制,也就是当前新一代模型提供的低、中、高思考预算设置,是推理时的杠杆,能在准确率与延迟、成本之间进行有意义的权衡。结构化输出约束、验证器参与的流水线以及受约束解码,都属于提示词和运行框架层面的技术,它们有真实的价值,这一点我们在关于受约束解码的文章中也讨论过。而如果你被困在一个基础模型上,又无法训练任何东西,思维链提示在评测中依然能带来实实在在的分数提升。“训练出来,而非提示出来”描述的是能力起源于何处,而不是说推理时的选择无关紧要。

为什么动手构建胜过阅读
常见的渠道里出现过一个合理的质疑:一个“自己动手做推理模型”的教程,是不是跟“自己动手造 CPU”的指南一样,有趣却没什么用,毕竟真正的训练需要集群和专有数据?我认为这误解了这类练习的意义。我对经典的“从零写一个 shell”教程也会这么说,我们在《写一个 Shell 能教你什么 Unix 知识》中正是因为这个原因称赞过它。没有人写 shell 是为了取代 bash。你写它,是因为 fork、exec、管道和信号处理不再是你背下来的抽象概念,而变成了你亲手握过的机制。
推理模型也是同样的道理。真正永久改变我与推理模型打交道方式的,是实现细节,而不是论文:
- 写验证器让我明白,奖励质量首先是一个软件工程问题:归一化的边界情况会悄悄扭曲训练,而“奖励就是基准真相”这句话的真实程度,取决于你的答案提取器有多可靠。
- 实现序列对数概率打分(以及随之而来的数值稳定性技巧)让后训练文献中一半的损失函数不再神秘。它们归根结底都是在比较不同策略下回答的可能性有多大。
- 在 GRPO 训练中眼看着回答长度在没有任何提示的情况下增长,打破了我最后一点残留的信念,即推理风格只是表面行为。它是当正确性是唯一目标时,优化过程自然找到的解。
- 为自洽性绘制准确率与候选数量的曲线,让我对每美元准确率的权衡有了真正的直觉,这是任何基准测试表格都从未给过我的。
对于学习用途来说,算力焦虑也被夸大了。前面的部分,比如加载基础模型、带 KV 缓存的流式生成、构建验证器、运行 MATH-500,基本只需要 CPU 和笔记本电脑,或者接近这个水平。GRPO 训练需要 GPU,但只需要一块,按小时租用,比大多数教科书还便宜。你在家里无法复现的是规模,而规模确实是另一门学科。这也是我们测试过的关于 DeepSeek 推理引擎的误区之一:前沿实验室的推理服务栈解决的是教程规模下根本不存在的问题,反过来也一样。
务实的结论
如果你只记住一件事,那就记住以验证器为中心的世界观。现代推理技术栈是这样的:一个基础模型,一个决定“正确”含义的程序,一个针对它进行优化的 RL 算法,以及让结果倍增的推理时技术。提示词位于这个系统的最边缘,它只是在引导由训练所创造的能力。理解这一点的团队会把精力投入到能产生复利的地方:更好的验证器、更好的奖励设计,以及更好的评估闭环,比如我们主张大多数未能反映真实工作的 AI 基准测试所缺失的那些。不理解这一点的团队则会不断调整系统提示词,然后纳闷准确率为什么停滞不前。
我在午餐桌上提出的观点,带着一个星号依然成立:推理模型是训练出来的,而不是提示出来的,但你围绕它们搭建的运行框架,包括提示词在内,决定了你究竟能收获多少被训练出的能力。有空的时候,亲手做一个小型版本吧。跟着敲代码走完十一个小时,对于再也不会在这件事上困惑而言,是非常划算的代价。


