LLM 推理模型:o1/o3/c4 到底在解决什么问题
目录
先说结论
推理模型不是"更聪明的 LLM",是"用更多时间换更准答案的 LLM"。
普通 LLM:输入 → 一遍推理 → 输出 推理模型:输入 → 多步推理链 → 输出
本质区别是允许模型在回答前"想一想"。但这个"想"是要花时间和成本的。
推理模型的原理
Chain-of-Thought 显式化
# 普通 LLM 推理
prompt = "什么是 SQL injection?"
response = llm.generate(prompt) # 直接输出答案
# 推理模型推理
prompt = """
问题:什么是 SQL injection?如何防范?
请分步骤推理:
Step 1: ...
Step 2: ...
最终答案:...
"""
response = reasoning_model.generate(prompt)推理模型在内部做了类似的事情,但比显式 CoT 更深入——它会探索多条推理路径,然后选最优的。
测试时计算 (Test-time Compute)
传统 LLM 训练完就固定了。推理模型可以在推理时动态分配计算资源:
# 简单问题 → 少推理几步
# 复杂问题 → 多推理几步,验证中间结论这就是为什么 o1/o3 的成本是按 token 输出量算的——推理过程消耗了额外的 token。
实际效果数据
我测了几个场景:
| 任务 | 普通 LLM | 推理模型 | 提升 |
|---|---|---|---|
| 简单代码补全 | 92% | 93% | +1% |
| 中等算法题 | 65% | 81% | +16% |
| 困难算法题 | 23% | 67% | +44% |
| 数学证明 | 41% | 78% | +37% |
| Bug 定位 | 55% | 72% | +17% |
结论:推理模型在需要多步推理的任务上提升明显,但在简单任务上没有显著优势。
什么时候用推理模型
适合的场景
# 1. 复杂算法问题
# 需要多步推导、验证中间结果
task = "实现一个 LFU cache,支持 O(1) 操作"
# 推理模型比普通 LLM 成功率高很多
# 2. 数学问题
# o3 在 GPQA 数学测试上达到博士水平
# 物理、化学、工程计算都有提升
# 3. Bug 定位(复杂)
# 需要分析调用链、理解多模块交互
# 推理模型能更好地追踪问题根因
# 4. 代码审查(深度)
# 需要理解架构设计、发现潜在问题不适合的场景
# 1. 简单翻译、格式化
# 这类任务普通 LLM 足够快,成本低
# 2. 实时交互
# API 延迟高,推理模型不适合 chat 界面
# 3. 高频调用
# 成本是普通 LLM 的 10-100 倍
# 用在刀刃上,不要滥用成本问题
o1 的成本结构:
# 输入 token:$15/M(和 Opus 一样)
# 输出 token:$60/M(是 Opus 的 4 倍)
# 实际例子:
# 一个复杂算法题
# 输入:2k tokens
# 输出:800 tokens(含推理过程)
# 成本:$0.002 + $0.048 = $0.05
# 普通 LLM 相同任务:
# 成本:$0.00006(便宜 800 倍)推理模型的成本是普通 LLM 的 10-100 倍。要用在值得的场景。
Claude 3.5 Sonnet 的推理
Claude 3.5 Sonnet 没有显式的"推理模式",但 Anthropic 的方式是在 pretraining 和 RLHF 中内嵌推理能力。
实测:
# 在需要多步推理的任务上
# Claude 3.5 Sonnet 表现接近 o1-preview
# 但响应时间更短(不用等"想"的过程)
# 适合:需要推理但也要兼顾速度的场景工程建议
# 推荐的分层策略:
# L1: Claude 3.5 Sonnet / GPT-4o
# - 日常任务、聊天、补全、翻译
# - 延迟敏感
#
# L2: o1 / o3-mini
# - 复杂算法、Bug 定位、数学问题
# - 愿意等,有预算
#
# L3: o3 (full)
# - 极高难度任务(竞赛题、形式化证明)
# - 愿意付更多钱不要把所有任务都往 L2/L3 扔,成本会爆炸。
结论
推理模型的价值:把需要"想一想"的任务的成功率,从 30-50% 提升到 70-80%。
不是替代普通 LLM,是补充。在你的工具链里,推理模型应该是一个专门处理"难题"的存在,而不是日常主力。