核心摘要

推理模型不是一种统一架构,而是经过训练或服务配置、会为特定难题投入更多推理期计算的模型或系统。OpenAI 公开资料说明 o1 使用强化学习并呈现测试时扩展特征;DeepSeek 则披露了更完整的 R1 训练流程。长答案和可见思维链都不能证明模型执行了正确搜索。生产落地必须使用预算匹配评测、独立验证器、停止规则和低成本回退路径。

目录

核心要点

  • 分清三个层次:底座架构、后训练配方和推理期策略是三项不同的工程决策。
  • 只陈述公开事实:o1 的精确架构、搜索过程和奖励设计仍未公开。
  • 区分 R1-Zero 与 R1:纯强化学习实验不等于完整 R1 的发布训练流程。
  • 把算力当成预算:延长单条轨迹、多路采样和验证器引导搜索不是同一种策略。
  • 评估被接受的结果:固定协议下同时报告任务成功率、p95 延迟、总成本、拒答和验证器错误。
  • 不要从文字反推过程:可见思维链是生成文本,不是完整执行日志或安全审计日志。

推理模型究竟是什么

推理模型更准确的定义是一个工程类别:模型经过训练或服务配置,会对适合多步处理的任务投入额外计算。这个术语不代表某种唯一的 Transformer 变体,也不保证模型一定有隐藏草稿、树搜索或可靠自我纠错。

“系统 1 / 系统 2”可以帮助理解快速回答与审慎推理的差异,但它只是教学类比,不是神经网络运行机制。普通大语言模型可能解决复杂问题,推理模型同样会自信地答错。

最容易混淆的三个层次

层次 要回答的问题 可核验的公开证据 常见误判
底座架构 哪种网络在预测下一个 Token 模型报告、权重、配置文件 “推理过程很长,所以一定是新架构”
后训练配方 预训练后强化了哪些行为 SFT/RL 阶段、奖励设计、数据说明 “模型完全没有使用示例数据”
推理期策略 单次请求如何分配计算 推理档位、采样数、Token、工具调用 “一条长回答就是树搜索”

比较 OpenAI o1 与 DeepSeek R1 时,这个分层尤其重要。OpenAI 公开了行为与评测证据,但没有给出完整底座架构和训练配方;DeepSeek 公开了多个模型权重和更详细的技术报告。披露程度不同,不等于某个模型必然更适合你的业务。

flowchart LR A["底座模型"] --> B["后训练策略"] B --> C["推理期计算策略"] C --> D["候选答案"] D --> E["独立验证"] E --> F["接受、重试或拒答"]

OpenAI o1 公开了哪些事实

OpenAI 关于 o1 的公开资料支持三项结论:o1 使用强化学习获得推理行为;它会在输出答案前进行额外内部计算;在报告所述评测条件下,增加训练时和测试时计算与性能提升相关。现有公开信息不足以还原所谓“o1 底层架构”。

OpenAI 的 AIME 2024 结果还说明了为什么必须记录解码策略:报告给出的单样本成绩为 74%,对 64 个样本做多数投票后为 83%,用学习到的评分函数对 1,000 个样本重排后为 93%。这是三套不同的推理系统和预算,不能当成同一路径的三个普通测量值。

公开报告能够支持 公开报告不能证明
强化学习被用于改善推理行为 精确底座架构与参数规模
更多测试时计算改善了部分报告基准 所有任务都遵循单调的推理扩展规律
模型在最终答案前使用内部推理 推理文本忠实、完整且可外部审计
单样本、共识和重排结果存在差异 具体采用了 PRM、MCTS、束搜索或某种验证器

工程上的结论很直接:描述 o1 时只能引用 OpenAI 已披露和已测量的内容,不能从流畅输出反推内部实现。当前 API 的推理档位、Token 计费和响应字段属于会变化的产品契约,接入前应核对最新的 OpenAI 推理模型文档。

DeepSeek R1 是如何训练的

DeepSeek R1 的关键价值在于技术报告明确区分了 R1-Zero 实验和完整 R1 流程。把两者统一概括为“R1 只用纯 RL 训练”,会丢失最重要的工程信息。

R1-Zero 验证了规则奖励强化学习

DeepSeek-R1-Zero 从 DeepSeek-V3-Base 出发,在强化学习之前没有进行推理监督微调热启动。报告采用 GRPO:它在同一问题的一组采样输出中估计相对优势,从而避免按 PPO 方式额外训练一个 Critic。

在报告涉及的数学、编程和逻辑任务上,R1-Zero 使用两类规则奖励:

  1. 准确性奖励:用确定性规则或代码测试检查最终答案。
  2. 格式奖励:检查推理与答案是否遵守约定的分隔格式。

作者明确说明,在 R1-Zero 的推理训练阶段没有使用神经网络结果奖励模型或过程奖励模型,原因包括奖励投机风险和持续重训成本。泛化介绍若把 PRM 直接写成 R1 的内部组成,就超出了论文证据。

R1-Zero 也暴露了纯实验路线的局限。报告提到可读性不佳、中英文混杂以及通用任务能力不足。更长的输出和“自我反思”措辞是观察到的行为,不代表每一步中间结论都正确。

完整 R1 采用多阶段训练

完整 DeepSeek-R1 并没有原样复用 R1-Zero 配方,而是加入数据与对齐阶段:

  1. 冷启动监督微调:先建立更可读的推理表达。
  2. 面向推理的强化学习:提升可验证任务上的表现。
  3. 拒绝采样与监督微调:引入成功推理轨迹和非推理数据。
  4. 第二阶段强化学习:覆盖有用性、安全和更广泛行为。
  5. 蒸馏:把生成的推理数据迁移到更小的稠密模型。
产物 训练定位 能够证明 不能证明
R1-Zero 无 SFT 热启动的规则奖励 RL 实验 RL 可显著改善报告中的可验证任务 纯 RL 足以构建成熟通用助手
DeepSeek-R1 多阶段推理与对齐模型 冷启动、RL、拒绝采样、SFT 和对齐可以组合 所有托管 R1 类服务都采用相同流水线
蒸馏模型 用生成推理数据训练的小模型 蒸馏可以迁移有价值的行为 学生模型复制了教师内部机制

同一份报告还把过程奖励模型和蒙特卡洛树搜索列为在作者实验中未达到预期的尝试。PRM 与 MCTS 本身仍是有效研究方向,但不能据此宣称它们是 DeepSeek-R1 已确认的内部组件。底座网络可继续阅读混合专家模型架构解析,偏好优化背景可参考RLHF 与偏好学习。

测试时算力如何改变推理

测试时算力描述的是收到 Prompt 后系统额外执行多少工作,但“多思考”可能对应完全不同的机制。只比较输出 Token 数,会掩盖真正发生的工程变化。

策略 额外计算花在哪里 选择信号 主要风险
延长单条轨迹 一个样本产生更多顺序 Token 模型自身续写策略 错误累积与循环论证
并行采样 生成多个完整候选 多数投票或任务聚合器 候选高度相关导致虚假信心
Best-of-N 生成多个候选 结果验证器或奖励模型 验证器偏爱流畅但错误的答案
验证器引导搜索 扩展局部候选和分支 过程评分或状态评分 搜索利用评分器漏洞
工具辅助循环 调用测试、检索或求解器 外部工具结果 工具错误、越权和状态过期

这些机制的质量、延迟与成本曲线并不相同。带有较长隐藏轨迹的模型不等于采样 64 个答案的系统,多数投票也不等于使用独立验证器选优。

Snell 等人的测试时计算研究发现,最佳策略同时取决于问题难度与底座模型。在论文限定的 PaLM 2 与 MATH 实验中,计算最优策略用更少算力优于 Best-of-N 基线;最难问题则可能几乎无法从额外推理中获益。这是带有明确实验条件的结果,不是普适 Scaling Law。

如果需要实现自洽采样、搜索和动态预算,可继续阅读测试时算力工程指南。本文后续聚焦如何评测推理产品,而不是重复实现搜索算法。

如何评测推理模型

有效评测必须固定任务、模型快照、工具与验收规则,只改变推理计算策略。否则更高分可能来自更大的模型、更多样本、额外工具或不同评分器,而不是更强推理能力。

冻结评测契约

每次运行至少记录:

  • 数据集版本与污染控制方式;
  • 模型、供应商和具体快照;
  • System Prompt 与 User Prompt 模板;
  • 推理档位、温度、最大输出和采样数量;
  • 工具定义、权限、超时和测试夹具版本;
  • 答案提取器、验证器版本与拒答规则;
  • 重试、缓存、并发、区域和执行时间。

比较预算可解释的路径

至少应在同一留出集上比较四条路径:

  1. 低成本模型或低推理档位,只生成一个样本;
  2. 推理模型生成一个有预算上限的回答;
  3. 多个候选通过共识聚合;
  4. 多个候选由独立验证器选择。

不能拿单样本基线与 64 样本推理结果直接比较,再把全部差异归因于模型能力。报告必须同时写清模型身份和推理策略。

使用含义明确的指标

指标 实际衡量对象 常见误用
Pass@1 第一个交付候选的成功率 隐藏重试后仍标成 Pass@1
Pass@k k 个候选中至少一个成功的概率 没有选择器却把它当用户可见准确率
共识准确率 某种聚合规则的准确率 默认多个样本互相独立
验证器选优准确率 经过指定选择器后的质量 忽略验证器误接受
每个有效任务成本 模型、工具、重试和人工成本除以被接受的成功数 只报告 Token 单价
p95 与 p99 延迟 成功和失败请求的尾部耗时 只看平均延迟
拒答质量 被拒任务是否确实风险更高 把拒答数量直接当安全性

结果还要按任务类型、难度、输入长度、语言、工具可用性和失败后果切片。生产路由依赖的是校准后的分层证据,不是一个混合平均分。

用 Go 实现验证器契约

生产验证器应该检查范围窄、可以测试的输出契约,并与模型的自然语言解释解耦。下面的 Go 程序只接受 FINAL: 字段中的精确整数,拒绝全部错误候选,再以成本最低、延迟次优为规则选择通过验证的答案。

go
package main

import (
	"errors"
	"fmt"
	"sort"
	"strconv"
	"strings"
)

type Candidate struct {
	ID         string
	Output     string
	CostMicros int
	LatencyMS  int
}

type VerifiedCandidate struct {
	Candidate
	Answer int
}

func verifyInteger(output string, expected int) (int, error) {
	const prefix = "FINAL:"

	if !strings.HasPrefix(output, prefix) {
		return 0, errors.New("missing FINAL field")
	}

	answer, err := strconv.Atoi(strings.TrimSpace(strings.TrimPrefix(output, prefix)))
	if err != nil {
		return 0, fmt.Errorf("invalid integer: %w", err)
	}
	if answer != expected {
		return 0, fmt.Errorf("expected %d, got %d", expected, answer)
	}

	return answer, nil
}

func selectVerified(candidates []Candidate, expected int) (VerifiedCandidate, error) {
	verified := make([]VerifiedCandidate, 0, len(candidates))

	for _, candidate := range candidates {
		answer, err := verifyInteger(candidate.Output, expected)
		if err != nil {
			continue
		}
		verified = append(verified, VerifiedCandidate{
			Candidate: candidate,
			Answer:    answer,
		})
	}

	if len(verified) == 0 {
		return VerifiedCandidate{}, errors.New("no candidate passed verification")
	}

	sort.Slice(verified, func(i, j int) bool {
		if verified[i].CostMicros == verified[j].CostMicros {
			return verified[i].LatencyMS < verified[j].LatencyMS
		}
		return verified[i].CostMicros < verified[j].CostMicros
	})

	return verified[0], nil
}

func main() {
	candidates := []Candidate{
		{ID: "candidate-a", Output: "FINAL: 41", CostMicros: 2100, LatencyMS: 420},
		{ID: "candidate-b", Output: "FINAL: 42", CostMicros: 3200, LatencyMS: 700},
		{ID: "candidate-c", Output: "FINAL: 42", CostMicros: 4200, LatencyMS: 610},
	}

	selected, err := selectVerified(candidates, 42)
	if err != nil {
		fmt.Println("abstain:", err)
		return
	}

	fmt.Printf(
		"selected=%s answer=%d cost_micros=%d latency_ms=%d\n",
		selected.ID,
		selected.Answer,
		selected.CostMicros,
		selected.LatencyMS,
	)
}

预期输出:

text
selected=candidate-b answer=42 cost_micros=3200 latency_ms=700

这段代码演示的是推理期验收,不是对 R1 奖励函数的复刻。真实验证器应根据任务运行单元测试、Schema 校验、约束求解、策略检查或人工审核。若正确性无法可靠验证,生成更多候选往往只会制造更多有说服力的错误。

失败模式与生产控制

当额外计算放大了弱候选、偏置验证器或危险工具循环时,推理系统仍会失败。每类故障都需要位于模型叙述之外的可观测控制。

失败模式 可观测现象 必要控制
过度推理 提高档位后延迟上升、任务成功率反而下降 按切片限制预算并提供低档回退
相关性采样 多个候选重复同一个错误 增加 Prompt/模型多样性并执行确定性检查
验证器投机 高分答案无法通过真实验收 隐藏留出测试和验证器红队样本
预算耗尽 请求结束时仍没有可用答案 预留最终输出、提前停止并返回明确失败
工具循环漂移 重复调用或执行越权操作 幂等键、最小权限、调用上限和审计事件
推理内容泄漏 日志保存了敏感 Prompt 或业务数据 数据最小化、脱敏和保留周期
理由不忠实 解释遗漏了真正影响答案的提示或工具结果 审计输入、输出、工具调用和证据,不审计文风

Anthropic 的受控实验发现,可见推理经常没有提到实际影响答案的提示信息,其中也包括奖励投机实验。该研究使用了人工构造的提示任务和有限模型,不能证明每条思维链都不忠实;但它足以说明,思维链不能充当完整安全审计日志。

最低发布门禁

一条推理链路只有同时满足以下条件才适合上线:

  • 在有版本记录、能代表真实流量的留出集上优于低成本基线;
  • 质量提升在预算匹配、工具匹配的比较中仍然成立;
  • p95 延迟、超时率和每个有效任务成本满足服务目标;
  • 在对抗样本上测量了验证器的误接受与误拒绝;
  • 无有效答案时的行为明确且已经测试;
  • 工具权限、重试次数与副作用都有上限;
  • 监控能把回归定位到模型、Prompt、验证器或路由变化。

新策略应先灰度上线。回滚依据是被接受答案的质量,而不是模型自己输出的置信度。

如何选择推理模型

推理模型选型应从业务验收契约出发,而不是从榜单标题出发。OpenAI o1 与 DeepSeek R1 代表不同的披露和部署选择,普通模型仍可能是日常任务的最佳工作点。

需求 优先测试 原因
托管 API,尽量减少模型运维 供应商推理 API 供应商负责推理服务、更新和容量
权重可用、私有部署或运行时控制 合适的 R1 系开源权重 可以检查模型资料并控制服务环境
低延迟或大规模常规请求 低推理档位或普通模型 额外计算未必提高验收率
可验证的数学、代码或约束规划 推理模型加外部验证器 客观检查能让额外候选真正产生价值
高风险开放式建议 任意模型外加检索、工具和专家复核 推理文本无法证明事实可靠

不要建立永久的任务黑名单,而应运行路由实验。实用策略通常先走低成本路径,只对已测得高价值的任务切片升级推理预算,并在验证器无法确认答案时拒答。供应商推理开关的实现细节可参考混合推理模型工程实践。

常见问题

推理模型是一种新的神经网络架构吗

不一定。“推理模型”通常描述训练后的行为或推理产品形态。公开资料对底座架构、后训练方法和服务控制的披露程度各不相同。供应商没有公布网络细节时,把它称为新架构属于推测。

DeepSeek R1 是否只使用强化学习

不是。R1-Zero 才是报告中的纯强化学习实验,它从底座模型出发,没有监督推理热启动。完整 DeepSeek-R1 还加入冷启动数据、监督微调、拒绝采样、第二阶段强化学习,并为小模型生成蒸馏数据。

推理档位越高是否一定越准确

不一定。额外算力只有在模型能产生更好候选、系统又能识别这些候选时才有价值。简单任务可能只会变慢,最困难任务也可能超出候选模型或验证器能力。应测量完整的质量、成本与延迟曲线。

多数投票等于验证吗

不等于。多数投票衡量多个样本是否一致;独立验证器检查答案是否通过测试或满足约束。如果多个样本共享同一种系统性错误,共识反而会带来错误的高置信度。

可见思维链能否用于合规审计

在策略允许时,它可以作为辅助调试信息,但不能独立构成合规记录。应记录请求、模型与 Prompt 版本、工具调用、检索证据、策略决策、最终输出、验证结果和人工审批,并对可能包含敏感数据的推理文本做最小化或脱敏。

总结

推理模型把推理期计算变成可以管理的工程资源,但它不等于事实保证。真正可辩护的比较不是“哪个模型想得更久”,而是哪一组固定的模型与推理策略能在延迟、成本和安全约束内,产出更多通过独立验证的结果。

来源与延伸阅读