课程0基础Agent开发课 / LLM基础 / 推理模型解析-o1和DeepSeek-R1的思考机制
— 12 min read

推理模型解析-o1和DeepSeek-R1的思考机制

> **本文适合谁**

推理模型解析:o1 和 DeepSeek-R1 的思考机制

本文适合谁

想搞清楚"o1 和 GPT-4o 有什么区别"、"推理模型适合哪些场景"、"为什么推理模型更贵更慢"的开发者。选型指导:什么时候该用推理模型,什么时候不该用。


2024 年 9 月,OpenAI 发布 o1。推理模型(Reasoning Model)与普通 LLM 在架构上没有本质差别,都是 Transformer,区别在于生成策略:普通 LLM 直接输出答案,推理模型在输出答案之前先进行大量内部"思考"。

理解推理模型的核心隐喻是:给了模型一张草稿纸


1.1 推理模型与普通 LLM 的根本区别

1.1.1 测试时计算扩展:能力不再完全固化在训练里

在推理模型出现之前,提升模型能力的方式主要是两条路:训练更大的模型,或者使用更多、更高质量的训练数据。这两种方式都发生在训练阶段——模型一旦训练完成,能力就固化了,无论对简单问题还是复杂问题,消耗的计算量是相同的。

推理模型

用户问题

思考 1
分析问题

思考 2
分解子问题

思考 N
验证与整合

输出答案
⏱ 深度

普通 LLM

用户问题

模型
直接生成

输出答案
⏱ 快速

图 6.13:普通 LLM 与推理模型的本质区别——直接回答 vs 链式思考再回答

推理模型打开了第三条路:在推理阶段(模型生成答案时)消耗更多计算,换取更好的答案质量。同一个模型,对简单问题快速回答,对复杂问题花更多时间深度思考,计算资源可以动态分配。

这个思想来自人类的认知习惯:做简单的加法题不需要打草稿,但解复杂的数学证明需要一步步推导、验证、可能还要回头修正。推理模型把这个"打草稿"的过程给了语言模型。

1.2 普通 LLM vs 推理模型

推理模型

用户输入
解方程 x² - 5x + 6 = 0

内部推理链
(think 标签内容)

展开因式?
(x-2)(x-3)=0
→ x=2 或 x=3
验算:4-10+6=0 ✓
9-15+6=0 ✓

输出最终答案
x = 2 或 x = 3

普通LLM

用户输入
解方程 x² - 5x + 6 = 0

直接生成
(一次 forward pass 序列)

输出答案
x = 2 或 x = 3

本质区别不在架构,在于 Token 的使用方式。 普通 LLM 用有限的 Token 直接给答案,推理模型用大量 Token 进行中间推导,最终答案只是推理过程的最后几行。


1.3 测试时计算扩展(Test-time Compute Scaling)

1.3.1 为什么这是一个范式转移

传统范式:能力 = f(模型规模, 训练数据),能力固化在训练权重里,推理时无法动态提升。

推理模型范式:能力 = f(模型规模, 训练数据, 推理时计算量),通过在答题时消耗更多计算来提升特定任务的表现。

这个转变意味着:同一个基础模型,通过调整"思考预算",可以在不同任务上展现出不同水平的能力。这比训练一个更大的模型灵活得多,也便宜得多——不需要重新训练,只需要多花一些推理时的算力。

传统的"更强模型"需要更大参数、更多训练算力(Training-time Compute,训练时的计算量)。推理模型引入了另一个维度:在推理(Inference,模型生成答案时)花费更多计算,换取更好的答案质量

这一现象称为 Test-time Compute Scaling(推理时计算扩展,即通过增加答题时的计算量来提升准确率),是 o1 系列最重要的洞见之一。

code
准确率 ∝ f(推理 Token 数量)

在 AIME(美国数学邀请赛,一种高难度数学竞赛考试,常被用于评测推理模型能力)数学竞赛题上,增加推理 Token 数量,模型正确率持续提升,直到某个饱和点。这意味着:

  • 困难问题值得多花推理成本
  • 简单问题无需开启推理模型(高延迟、高成本)

1.4 内部推理链:think 标签里在做什么

以 DeepSeek-R1 和 Claude(Extended Thinking 系列)为代表的推理模型会用特殊标签(如 <think>...</think>)包裹内部推理过程。这段内容对用户可选可见,但本质上是模型的"草稿纸"。

推理链中实际发生的行为模式:

1. 问题分解(Problem Decomposition)

code
原题:证明 √2 是无理数
思考:假设 √2 = p/q(最简分数)→ 2 = p²/q² → p² = 2q²
      → p 是偶数 → p = 2k → 4k² = 2q² → q² = 2k²
      → q 也是偶数 → 与最简分数矛盾

2. 假设验证(Hypothesis Testing)

code
思考:先试 x = 2,代入方程检验...
      不对,再试 x = -1...
      方向错了,换个思路...

3. 回溯(Backtracking)

code
思考:等等,上面的假设有问题,忽略了边界条件...
      重新来,当 n = 0 时...

4. 自我验证(Self-Verification)

code
思考:得到答案 42,反过来验算:6 × 7 = 42 ✓
      单位对吗?米/秒² ✓
      符合物理直觉吗?✓

1.5 DeepSeek-R1:从零发现 CoT 的强化学习训练

1.5.1 为什么思维链(CoT)能有效提升推理能力

思维链(Chain of Thought,CoT)让模型先展示推理步骤,再给出最终答案。这为什么有效?有几个互补的解释:

第一,中间步骤作为上下文。Transformer 的每个 token 都会被后续 token 关注。把推理步骤写出来,相当于为后续计算提供了更丰富的上下文,模型在每个步骤都可以"看到"之前的所有推导,避免了在"脑中"同时维护太多状态。

第二,纠错机会。在连续推理时,一旦某步出现错误,写出来的中间步骤给了模型发现并修正的机会。如果直接跳到结论,错误就没有被捕捉的机会。

第三,分解复杂问题。难题往往可以分解成一系列较简单的子问题。思维链迫使模型做这个分解,每个子问题相对简单,组合起来解决整体问题。

DeepSeek-R1 的训练过程是推理模型领域最值得关注的研究成果之一,其核心训练方法是 GRPO(Group Relative Policy Optimization)

1.5.2 GRPO 的基本思路

python
# GRPO 的核心思路(伪代码,非完整实现)
def grpo_training_step(model, question):
    """
    对每道题生成多个答案,以组内相对表现作为奖励信号。
    避免了 PPO 需要独立价值函数(Critic)的复杂性。
    """
    # 步骤 1:对同一道题采样多个答案(通常 8-16 个)
    answers = [model.generate(question) for _ in range(8)]

    # 步骤 2:用规则验证每个答案是否正确
    # 数学题:直接对比最终数值;代码题:运行测试用例
    rewards = [verify_answer(question, ans) for ans in answers]

    # 步骤 3:计算组内基线(去中心化)
    baseline = mean(rewards)
    advantages = [r - baseline for r in rewards]

    # 步骤 4:用相对优势更新策略
    # 比平均水平好的答案 → 提高其概率
    # 比平均水平差的答案 → 降低其概率
    loss = policy_gradient_loss(model, question, answers, advantages)
    return loss

1.5.3 CoT 的涌现:无监督发现推理

DeepSeek-R1-Zero(无任何 SFT,纯 RL)的训练过程中出现了一个意外现象:模型自发学会了思维链推理(CoT,Chain of Thought,即让模型一步步展示推理过程而不是直接给答案)。在训练早期,模型直接给答案;随着训练推进,模型开始在答案前生成越来越长的中间步骤,且这些步骤是有逻辑意义的推理过程。

这一发现意义重大:CoT 不需要人工标注,可以从强化学习信号中涌现,只要任务有清晰的正确/错误奖励信号(如数学验证)。

训练阶段 方法 作用
DeepSeek-R1-Zero 纯 GRPO RL(无 SFT) 证明 CoT 可以涌现
DeepSeek-R1 冷启动 SFT + GRPO RL 推理格式更规范,可读性更好
蒸馏(Distillation) 用 R1 生成数据训练小模型 R1-7B 保留了大量推理能力

1.6 Budget Tokens:推理长度与准确率的权衡

推理模型的输出长度不是固定的,可以通过 Budget Tokens(预算 Token)参数控制。

python
from openai import OpenAI

client = OpenAI()

# 控制推理深度:max_completion_tokens 限制总输出(含推理链)
# reasoning_effort 是更高级的控制(low/medium/high)
response = client.chat.completions.create(
    model="o3-mini",
    messages=[{"role": "user", "content": "证明黎曼假设"}],
    # reasoning_effort 控制模型在推理上投入多少计算
    # "low" → 快速浅层思考;"high" → 深度长链推理
    reasoning_effort="high",
    max_completion_tokens=16000  # 包含推理链的总 token 上限
)

# 查看实际使用的推理 token 数量
usage = response.usage
print(f"提示 Token: {usage.prompt_tokens}")
print(f"推理 Token: {usage.completion_tokens_details.reasoning_tokens}")
print(f"输出 Token: {usage.completion_tokens}")

调用 DeepSeek-R1(通过兼容 OpenAI 的 API)并获取推理内容:

python
import openai

client = openai.OpenAI(
    api_key="your_deepseek_api_key",
    base_url="https://api.deepseek.com"
)

response = client.chat.completions.create(
    model="deepseek-reasoner",
    messages=[
        {"role": "user", "content": "用 Python 实现快速排序,并分析时间复杂度"}
    ],
    # DeepSeek-R1 通过 reasoning_content 字段暴露推理过程
)

# 提取推理链(think 标签内容)
if hasattr(response.choices[0].message, 'reasoning_content'):
    reasoning = response.choices[0].message.reasoning_content
    print("推理过程:", reasoning[:500], "...")

# 提取最终答案
answer = response.choices[0].message.content
print("最终答案:", answer)

1.7 适合 vs 不适合推理模型的任务

任务类型 适合推理模型? 原因
竞赛数学(AIME、AMC) 非常适合 需要多步推导,有明确正确答案可验证
算法题(LeetCode Hard) 非常适合 需要规划、实现、调试迭代
逻辑推理谜题 非常适合 需要穷举假设和回溯
代码 Debug(复杂逻辑错误) 适合 需要系统性分析调用栈和状态
简单问答("法国首都是?") 不适合 延迟高、成本高,结果一样
创意写作 不适合 推理链无助于提升创意质量
实时对话(客服、聊天) 不适合 首 Token 延迟数秒不可接受
文档摘要 不适合 不需要推理,直接提取即可

1.8 推理模型的局限性

1. 延迟问题
推理模型首 Token 出现时间(TTFT)可达数十秒,总响应时间可达数分钟。这使其不适合任何需要实时响应的场景。

2. 成本倍增
推理 Token 与输出 Token 计费相同,一道数学题可能产生 2000 Token 的推理链,成本是普通 LLM 的 10-50 倍。

3. 思考过程不透明
尽管 <think> 标签让推理可见,但这并不等于模型的"真实思考过程"——模型没有显式的规划机制,推理链是自回归生成的,与最终答案有时并不完全一致。

4. 过度推理(Overthinking)
简单问题上,推理模型会进行无谓的冗长分析,浪费 Token 且可能引入错误("想太多")。


1.9 小结

推理模型的核心贡献在于将"计算预算"从训练时转移到推理时,使得同一个模型在不同任务上可以动态分配计算资源。

维度 普通 LLM 推理模型
生成策略 直接输出答案 先推理,再输出
推理时计算 固定(O(n) tokens) 可动态扩展(数十倍)
数学/代码能力 中等 显著提升
延迟 低(秒级) 高(数十秒至数分钟)
成本 高(10-50 倍)
训练方式 SFT + RLHF SFT + 规则奖励 RL(GRPO 等)
代表模型 GPT-4o、Claude Sonnet 系列 o3、DeepSeek-R1、Claude 3.7 Extended Thinking 及之后版本

选择推理模型的判断标准只有一个:这道题用普通 LLM 答不对,且答案的正确性值得支付 10 倍以上的成本和延迟

本页目录