推理 Reasoning 是什么?大模型为什么要先想后答
推理(Reasoning)在大模型里,指的是模型在给出最终答案之前,先生成一长串中间的思考步骤,一步步推下去,再依据这些步骤作答。打个比方,做应用题直接报答案叫心算,在草稿纸上列式子再得数叫推理,题越难,草稿纸越管用。
它是怎么回事:给模型一张草稿纸
大模型是一个词一个词往外写的,每写一个词能花的计算量大致固定。让它在第一个词就蹦出答案,等于逼它心算;让它先把步骤写出来,前面写下的内容会成为后面的输入,同一道题就用上了更多计算。这笔花在回答阶段的计算,研究里叫 test-time compute(测试时计算)。
让模型写出步骤有两条路。一条靠提示词,加一句“一步一步想”,或者给几个带步骤的示例。另一条直接训练:用强化学习奖励最后答对的思考过程,让模型自己学会怎么想。现在常说的“推理模型”,主要指后一种。OpenAI 介绍 o1 时说,它会学着换思路,识别并纠正自己的错误。DeepSeek-R1 的论文则表明,在数学、编程竞赛这类答案可验证的任务上,不靠人工标注的推理过程,只用强化学习也能练出推理能力。
从哪来的:从一句咒语到专门训练
起点在 2022 年。Google 的 Jason Wei 等人 1 月发表论文,提出思维链提示(Chain-of-Thought prompting):在提示里放几个带中间步骤的示例,足够大的模型在算术、常识和符号推理上就会明显进步。540B 参数的 PaLM 配八个示例,在数学应用题集 GSM8K 上做到 58.1%,是当时的最高水平。5 月,Kojima 等人发现连示例都能省,只在答案前加一句“Let’s think step by step”,text-davinci-002 在 GSM8K 上的准确率就从 10.4% 升到 40.7%。
2024 年 8 月,Snell 等人(UC Berkeley 与 Google DeepMind)研究了测试时计算:按题目难度分配计算量,效率比“多采样几次选最佳”的基线高出 4 倍以上,在总计算量相当时,小模型本来有些把握的题上,它能胜过大 14 倍的模型。9 月 12 日,OpenAI 发布 o1-preview,称 o1 的成绩随训练时和测试时计算的增加平稳提升。2025 年 1 月,DeepSeek 发布 R1 论文并开源了 R1-Zero、R1 和六个蒸馏小模型,R1 在 AIME 2024 数学竞赛题上一次作答的正确率(Pass@1)为 79.8%,略高于 OpenAI-o1-1217。
现在在哪用:各家的叫法和旋钮
叫法不统一,思路一致:先想,再用一个参数控制想多少。Anthropic 叫 extended thinking(扩展思考),早期用 budget_tokens 手动设预算,现在文档推荐 adaptive thinking,由 Claude 自己判断要不要想、想多久,再用 effort 参数给个力度,Claude Opus 4.7 上已经不再接受手动预算。OpenAI 的推理模型用 reasoning.effort 调节。Gemini 2.5 和 3 系列默认按问题难度动态思考,Gemini 3 起推荐用 thinkingLevel。Qwen3 把思考与非思考模式放进同一个模型,用 enable_thinking 或 /think、/no_think 切换。DeepSeek-R1 开源,可以自己部署。OpenRouter 这类聚合网关则把各家参数统一成 effort 或最大思考 token 数,换模型不用改代码结构。
容易混的地方:三件事别当成一件事
中文里的“推理”对应两个英文词。Reasoning 是先想后答,inference 是模型运行、产出结果的过程,“推理成本”“推理服务”说的是后者,读到时看上下文。
看到的思考过程,也不一定等于模型真实的内部过程。OpenAI 没有向用户展示 o1 的原始思维链,给出的理由里有监控模型、用户体验和竞争考虑;Gemini 和 Claude 提供的都可以是思考摘要。Anthropic 在 2025 年 4 月的研究里给 Claude 3.7 Sonnet 和 DeepSeek R1 塞暗示答案,模型用了暗示,却常常不在思考里提,再加训练也只是改善一阵就见顶。思考文字可以当线索,别当证词。
想得多也不一定更好,还要花钱。思考 token 按输出价格计费,OpenAI 文档说它们在 API 里看不到,却占上下文窗口,建议刚上手时预留至少 2.5 万个 token 给思考和输出;Claude 返回的摘要可能比实际计费的完整思考短。简单的抽取、改写、分类,Claude 在低 effort 下可能直接跳过思考,本来也用不着。Snell 等人的结果也说,最难的题上,大模型自身的能力仍然占优。我们 AI主线 的建议是:把思考力度当成按任务调的参数,别当成默认拉满的开关,简单任务用低档或关掉,多步推导、复杂代码、需要自查的任务再往上调,上线前拿真实请求跑一遍,盯总输出 token 数,别只看答案有多长。