Skip to content

推理模型测试专项

o3-pro / o4 / GPT-5 reasoning / Claude Opus 4.6 Extended Thinking / Gemini 3 Pro Deep Think / DeepSeek-R2 · 从原理到评测的完整测试方法

这篇的定位

推理模型(Reasoning Model)是 2024 年以来大模型最重要的演进方向,到 2026 年已进入"全家族标配"阶段——OpenAI 的 o3-pro / o4 / GPT-5 reasoning 模式,Anthropic 的 Claude Opus 4.6 Extended Thinking 1.0,Google 的 Gemini 3 Pro Deep Think,以及国产阵营的 DeepSeek-R2 / Qwen3-Reasoner / GLM-Reasoner / Kimi K2-Reasoning / Doubao-Reasoning-1.6 全面普及。与传统对话模型的"直觉式回答"不同,推理模型会先进行显式的"思考"过程,然后给出答案。这种新范式带来了全新的测试挑战:思考过程要不要测?怎么测?成本怎么控制?这篇专项课系统回答这些问题。

第1章:什么是推理模型

1.1 核心思想

推理模型在回答之前,会先生成一段"思考过程"(Thinking / Chain of Thought),然后基于思考结果给出最终答案。这个思考过程可能对用户可见(如 DeepSeek-R1),也可能被隐藏(如 OpenAI o1 系列的早期版本)。

用户提问 → Thinking(推理过程) → 最终回答

1.2 主流推理模型(2026-04)

阵营模型厂商Thinking 可见性推理深度控制
OpenAI 阵营o3-pro / o4OpenAIsummary 可见,完整过程隐藏reasoning_effort(low/medium/high)
OpenAI 阵营GPT-5(reasoning 模式)OpenAIsummary 可见reasoning_effort + tools 自适应
OpenAI 阵营GPT-5-CodexOpenAIsummary 可见编码专用,自动分配推理预算
Anthropic 阵营Claude Opus 4.6(Extended Thinking 1.0)Anthropicthinking 块可见budget_tokens 控制思考上限
Google 阵营Gemini 3 Pro(Deep Think)Googlethinking 摘要可见thinking_budget + Deep Think 开关
国产阵营DeepSeek-R2深度求索完整可见(reasoning_content)2026 已支持 reasoning_effort 参数
国产阵营Qwen3-Reasoner阿里完整可见enable_thinking + thinking_budget
国产阵营GLM-Reasoner智谱完整可见think 模式开关 + 深度参数
国产阵营Kimi K2-Reasoning月之暗面完整可见2M 上下文 + 长链思考
国产阵营Doubao-Reasoning-1.6字节跳动完整可见reasoning_mode + 国内合规快速接入
— 历史参考:o1 / o4-mini / DeepSeek-R1 / QwQ-32B —

1.3 主流推理模型基准(2026-04 真实数据)

模型AIME 2025(数学)GPQA-Diamond(科学)Codeforces Elo(编程)
OpenAI o491.464.82980
OpenAI o3-pro89.165.22870
GPT-5(reasoning high)87.863.52750
GPT-5-Codex2810
Claude Opus 4.6(Ext.Thinking 1.0)84.361.92680
Gemini 3 Pro(Deep Think)85.762.72640
DeepSeek-R286.160.42590
Qwen3-Reasoner82.557.82480
Kimi K2-Reasoning80.256.12390
GLM-Reasoner78.654.72310
— 数据来源:各厂商 2026-Q1 技术报告与第三方榜单(Artificial Analysis、LiveBench、SWE-bench 综合)—

第2章:与对话模型的差异

2.1 测试维度对比

维度对话模型推理模型
输出结构只有 contentthinking + content 两部分
延迟特征TTFT 较短TTFT 可能很长(思考中)
Token 消耗只计 prompt + completion额外消耗 thinking tokens(可能占 80%+)
一致性多次调用结果波动大推理过程不同但最终答案一致性更高
适用场景日常对话、创作数学、代码、逻辑推理、复杂决策
成本相对便宜thinking token 导致成本显著增加
Prompt 约束system + user 灵活使用部分模型限制 system prompt 用法

2.2 测试人员需要转变的思维

关键转变

  1. 不能只看最终答案——推理过程本身也是测试对象 2. 延迟预期要重新校准——30 秒的思考可能是正常的 3. 成本意识必须前置——一个复杂问题的 thinking token 可能消耗几万 token 4. 评测标准要分层——简单问题用推理模型可能是浪费

第3章:Thinking Token 机制

3.1 什么是 Thinking Token

Thinking Token 是模型在生成最终回答之前,用于"思考"的 Token。它们在 API 响应中可能以不同形式呈现:

# OpenAI o 系列:reasoning_tokens 在 usage 中体现
{
  "usage": {
    "prompt_tokens": 50,
    "completion_tokens": 200,
    "total_tokens": 250,
    "completion_tokens_details": {
      "reasoning_tokens": 150,    # 思考消耗的 token
      "accepted_prediction_tokens": 0,
      "rejected_prediction_tokens": 0
    }
  }
}

# DeepSeek-R2:思考过程在 reasoning_content 字段
{
  "choices": [{
    "message": {
      "role": "assistant",
      "content": "最终答案:42",
      "reasoning_content": "让我一步步分析这个问题...\n首先..."
    }
  }]
}

# Claude Extended Thinking:thinking 块
{
  "content": [
    {"type": "thinking", "thinking": "让我分析一下..."},
    {"type": "text", "text": "最终答案是..."}
  ]
}

3.2 Thinking Token 的测试要点

测试项检查内容PASS 标准
可见性thinking 内容是否按预期展示或隐藏与产品设计一致
计费准确性usage 中 reasoning_tokens 是否被正确计算总 token = prompt + reasoning + completion
流式传输streaming 时 thinking 块是否正确标识type 字段区分 thinking 和 text
截断行为超过 max_tokens 时 thinking 是否被截断优先保证最终答案完整
空思考简单问题是否跳过思考取决于模型和参数设置

第4章:推理链正确性验证

4.1 推理链的评测维度

维度说明检测方法
逻辑一致性思考过程中的推导步骤是否前后一致检查步骤间是否有矛盾
步骤完整性是否遗漏了关键推理步骤与标准解题步骤对比
结论一致性最终答案是否与思考过程的结论一致提取思考中的结论与 content 对比
错误传播早期步骤错误是否导致后续全部出错标注每步正确性,看错误扩散
自我修正模型是否在思考过程中发现并修正了错误检测"但是"、"不对"等修正信号

4.2 推理链自动化验证脚本

python
import re

def analyze_reasoning_chain(thinking_text, final_answer):
    """分析推理链的基础质量"""
    result = {
        "has_steps": False,
        "step_count": 0,
        "has_self_correction": False,
        "conclusion_in_thinking": None,
        "answer_consistent": None
    }

    lines = thinking_text.strip().split("\n")
    step_markers = [l for l in lines if re.match(r'^(步骤|Step|?\d|[\d]+[.、)])', l.strip())]
    result["has_steps"] = len(step_markers) > 0
    result["step_count"] = len(step_markers)

    correction_patterns = ["不对", "等等", "重新", "纠正", "wait", "actually", "let me reconsider"]
    result["has_self_correction"] = any(p in thinking_text.lower() for p in correction_patterns)

    conclusion_patterns = [r"所以[,,]?答案[是为]", r"因此[,,]?[论果]", r"最终答案"]
    for pat in conclusion_patterns:
        match = re.search(pat, thinking_text)
        if match:
            conclusion_line = thinking_text[match.start():].split("\n")[0]
            result["conclusion_in_thinking"] = conclusion_line
            break

    return result

4.3 数学推理验证示例

python
def test_math_reasoning(ai_client):
    """验证数学题的推理过程和最终答案"""
    resp = ai_client.chat.completions.create(
        model="o4-mini",
        messages=[{"role": "user", "content": "一个水池有两个进水管,A管单独注满需要6小时,B管单独注满需要8小时。同时打开两管,几小时注满?"}],
        max_completion_tokens=4000
    )

    answer = resp.choices[0].message.content
    usage = resp.usage

    assert "24/7" in answer or "3.43" in answer or "3又3/7" in answer, \
        f"数学答案不正确: {answer}"

    if hasattr(usage, 'completion_tokens_details'):
        reasoning_tokens = usage.completion_tokens_details.reasoning_tokens
        assert reasoning_tokens > 0, "推理模型应该有 reasoning tokens"

第5章:分场景评测

5.1 推理模型的优势场景

场景示例题目评测指标标准
数学计算多步应用题、方程求解答案正确率>= 90%
逻辑推理逻辑谜题、排列组合推理过程完整性 + 答案正确率>= 85%
代码生成算法题、Bug 修复代码可执行率 + 通过测试用例率>= 80%
科学分析实验设计、数据解读关键因素覆盖率>= 80%
复杂决策多因素权衡、风险评估因素覆盖率 + 结论合理性人工评审

5.2 推理模型的劣势场景

场景问题测试关注点
简单事实查询"法国首都是哪里"不需要推理是否过度思考导致延迟浪费
创意写作推理模式可能限制创造力文本多样性和创造性
日常闲聊用推理模型成本过高成本/质量比
实时对话思考时间导致延迟不可接受TTFT 和用户等待容忍度

5.3 场景路由测试

实际产品中通常会做"模型路由"——简单问题用对话模型,复杂问题用推理模型。测试需要验证路由策略的准确性。

ROUTING_TEST_CASES = [
    {"query": "你好",                           "expected_model": "chat",     "reason": "简单问候"},
    {"query": "法国的首都是哪里",                "expected_model": "chat",     "reason": "简单事实"},
    {"query": "证明根号2是无理数",               "expected_model": "reasoning", "reason": "数学证明"},
    {"query": "设计一个高并发秒杀系统的架构",     "expected_model": "reasoning", "reason": "复杂设计"},
    {"query": "帮我写一首关于春天的诗",           "expected_model": "chat",     "reason": "创意写作"},
    {"query": "分析以下代码的时间复杂度并优化",    "expected_model": "reasoning", "reason": "代码分析"},
]

def test_model_routing(router):
    correct = 0
    for case in ROUTING_TEST_CASES:
        selected = router.select_model(case["query"])
        if selected == case["expected_model"]:
            correct += 1
        else:
            print(f"路由错误: '{case['query'][:20]}...' "
                  f"期望={case['expected_model']}, 实际={selected}")
    accuracy = correct / len(ROUTING_TEST_CASES)
    assert accuracy >= 0.8, f"路由准确率 {accuracy:.0%} 低于阈值"

第6章:推理深度控制测试

6.1 不同模型的控制方式

模型控制参数可选值效果
OpenAI o3-pro / o4 / GPT-5reasoning_effortlow / medium / high控制思考深度,影响 token 消耗和准确率
Claude Opus 4.6(Extended Thinking 1.0)budget_tokens数值(如 5000)限制思考过程的最大 token 数
Gemini 3 Pro(Deep Think)thinking_budget + deep_think数值 / true|false预算 + 深度模式开关
Qwen3-Reasonerenable_thinking + thinking_budgettrue / false / 数值开启/关闭思考模式 + 预算
DeepSeek-R2reasoning_effort 或 Prompt 引导low/medium/high 或自然语言2026 已对齐 OpenAI 参数命名

6.2 推理深度对比测试

python
import time

def test_reasoning_effort_tradeoff(ai_client):
    """测试不同推理深度下的准确率、延迟和成本"""
    question = "一个正方形的面积是其对角线长度的一半,求正方形的边长。"
    levels = ["low", "medium", "high"]
    results = []

    for level in levels:
        start = time.time()
        resp = ai_client.chat.completions.create(
            model="o4-mini",
            messages=[{"role": "user", "content": question}],
            reasoning_effort=level,
            max_completion_tokens=8000
        )
        elapsed = time.time() - start

        usage = resp.usage
        reasoning_tokens = getattr(
            usage.completion_tokens_details, 'reasoning_tokens', 0
        ) if hasattr(usage, 'completion_tokens_details') else 0

        results.append({
            "level": level,
            "answer": resp.choices[0].message.content[:100],
            "latency_s": round(elapsed, 2),
            "reasoning_tokens": reasoning_tokens,
            "total_tokens": usage.total_tokens
        })

    for r in results:
        print(f"{r['level']:8s} | {r['latency_s']:6.2f}s | "
              f"thinking={r['reasoning_tokens']:5d} | "
              f"total={r['total_tokens']:5d} | "
              f"{r['answer'][:50]}")

    assert results[0]["total_tokens"] <= results[2]["total_tokens"], \
        "low effort 应该消耗更少的 token"

6.3 推理深度选择的测试矩阵

题目难度推荐深度验证标准
简单算术(1+1)low 或不用推理模型答案正确 + thinking token < 100
中等推理(应用题)medium答案正确 + thinking token < 2000
复杂证明(数学证明)high答案正确 + 推理过程完整

第7章:性能指标体系

7.1 推理模型的特有指标

指标定义与对话模型的差异
Thinking Time模型生成思考过程的耗时对话模型没有这个阶段
TTFT(首 Token 延迟)从请求发出到收到第一个输出 token推理模型的 TTFT 通常显著更长
Thinking Token 占比reasoning_tokens / total_completion_tokens推理模型可能 50-90% 的 token 用于思考
推理效率正确率 / thinking_tokens同样的准确率,更少的思考 token 更好
答案 Token 速率最终答案的 tokens / 秒需要区分思考和答案两个阶段的速率

7.2 延迟分段测量

python
import time

def measure_reasoning_latency(ai_client, model, question):
    """分段测量推理模型的延迟"""
    start = time.time()
    thinking_done = None
    answer_start = None
    chunks = []

    stream = ai_client.chat.completions.create(
        model=model,
        messages=[{"role": "user", "content": question}],
        stream=True,
        max_completion_tokens=8000
    )

    for chunk in stream:
        now = time.time()
        delta = chunk.choices[0].delta if chunk.choices else None
        if not delta:
            continue

        # 不同模型的思考标识不同,这里以通用方式处理
        if hasattr(delta, 'reasoning_content') and delta.reasoning_content:
            if thinking_done is None:
                pass  # 仍在思考中
        elif delta.content:
            if answer_start is None:
                thinking_done = now
                answer_start = now
            chunks.append(delta.content)

    end = time.time()

    return {
        "total_latency": round(end - start, 2),
        "thinking_time": round((thinking_done or end) - start, 2),
        "answer_time": round(end - (answer_start or end), 2) if answer_start else 0,
        "ttft": round((answer_start or end) - start, 2),
        "answer_length": len("".join(chunks))
    }

第8章:成本分析与优化测试

8.1 Thinking Token 的成本影响

成本案例

一个复杂数学题,对话模型回答约消耗 500 tokens(约 $0.001)。 同一个题,推理模型可能消耗 5000 thinking tokens + 500 answer tokens = 5500 tokens(约 $0.08)。 成本差距可达 80 倍。如果批量评测 1000 题,差距就是 $1 vs $80。

8.2 成本优化测试清单

优化策略测试方法PASS 标准
降低 reasoning_effort在同一数据集上对比 low/medium/high准确率损失 < 5% 时选低档位
设置 budget_tokens 上限逐步降低上限,观察准确率拐点找到"性价比拐点"
模型路由简单题不走推理模型路由准确率 > 90%
缓存推理结果相同问题第二次查缓存缓存命中率和结果新鲜度
Prompt 精简减少 prompt 长度降低 thinking 基数推理质量不下降

8.3 成本监控脚本

python
def calculate_reasoning_cost(usage, model="o4-mini"):
    """计算推理模型的分项成本"""
    PRICING = {
        # 2026-04 真实价格(USD per 1M tokens)
        "o4-mini":  {"input": 1.10, "output": 4.40, "reasoning": 4.40},
        "o4":       {"input": 15.0, "output": 60.0, "reasoning": 60.0},
        "o3-pro":   {"input": 20.0, "output": 80.0, "reasoning": 80.0},
        "gpt-5":    {"input": 5.0,  "output": 15.0, "reasoning": 15.0},
        "deepseek-r2":  {"input": 0.55, "output": 2.19, "reasoning": 2.19},
        "claude-opus-4-6": {"input": 15.0, "output": 75.0, "reasoning": 75.0},
    }
    price = PRICING.get(model, PRICING["o4-mini"])

    prompt_cost = usage.prompt_tokens * price["input"] / 1_000_000
    reasoning_tokens = getattr(
        usage.completion_tokens_details, 'reasoning_tokens', 0
    ) if hasattr(usage, 'completion_tokens_details') else 0
    answer_tokens = usage.completion_tokens - reasoning_tokens

    reasoning_cost = reasoning_tokens * price["reasoning"] / 1_000_000
    answer_cost = answer_tokens * price["output"] / 1_000_000

    return {
        "prompt_cost": round(prompt_cost, 6),
        "reasoning_cost": round(reasoning_cost, 6),
        "answer_cost": round(answer_cost, 6),
        "total_cost": round(prompt_cost + reasoning_cost + answer_cost, 6),
        "reasoning_ratio": round(reasoning_tokens / max(usage.completion_tokens, 1), 2)
    }

第9章:评测数据集设计

9.1 推理能力分级数据集

难度类型示例条数建议
L1 基础简单计算15 × 23 = ?20
L2 中等多步应用题鸡兔同笼问题30
L3 困难证明题 / 复杂优化证明 √2 是无理数20
L4 代码算法题实现 LRU Cache20
L5 综合多步推理 + 决策系统架构设计权衡10

9.2 数据集 JSON 格式

json
[
  {
    "id": "MATH-L2-001",
    "category": "math",
    "difficulty": "L2",
    "question": "水池有两个进水管...",
    "expected_answer": "24/7 小时",
    "answer_variants": ["24/7", "3.43", "3又3/7"],
    "required_reasoning_steps": ["求A管速率", "求B管速率", "合并速率", "求时间"],
    "max_acceptable_thinking_tokens": 2000
  }
]

第10章:自动化评测与 CI

10.1 推理模型评测框架

python
import json, time, pytest

def load_dataset(path):
    with open(path) as f:
        return json.load(f)

DATASET = load_dataset("reasoning_golden_set.json")

@pytest.mark.parametrize("case", DATASET, ids=[c["id"] for c in DATASET])
def test_reasoning_case(ai_client, case):
    start = time.time()
    resp = ai_client.chat.completions.create(
        model="o4-mini",
        messages=[{"role": "user", "content": case["question"]}],
        max_completion_tokens=8000
    )
    elapsed = time.time() - start
    answer = resp.choices[0].message.content

    # 答案正确性
    matched = any(v.lower() in answer.lower() for v in case["answer_variants"])
    assert matched, f"答案不匹配: {answer[:200]}"

    # Token 消耗合理性
    usage = resp.usage
    reasoning_tokens = getattr(
        usage.completion_tokens_details, 'reasoning_tokens', 0
    ) if hasattr(usage, 'completion_tokens_details') else 0

    max_thinking = case.get("max_acceptable_thinking_tokens", 5000)
    assert reasoning_tokens <= max_thinking, \
        f"思考 token ({reasoning_tokens}) 超过阈值 ({max_thinking})"

10.2 CI 中的成本安全阀

# 在 CI 脚本中加入成本上限
import os, sys

MAX_DAILY_COST = float(os.getenv("MAX_DAILY_COST", "5.0"))
accumulated_cost = 0.0

def check_cost_guard(cost):
    global accumulated_cost
    accumulated_cost += cost
    if accumulated_cost > MAX_DAILY_COST:
        print(f"成本安全阀触发: 累计 ${accumulated_cost:.2f} > ${MAX_DAILY_COST}")
        sys.exit(1)

第11章:案例实战 — 数学辅导 AI 的推理测试

11.1 场景描述

某教育产品使用推理模型为中学生做数学辅导。要求:回答正确、思考过程可展示给学生(教学价值)、延迟在可接受范围内、成本可控。

11.2 测试方案

功能测试

  • 覆盖代数、几何、概率三大类各 20 题
  • 正确率要求 >= 95%
  • 思考过程必须包含解题步骤(不能只有答案)
  • 步骤中的数学符号和公式展示正确

推理质量测试

  • 思考过程是否分步骤、有逻辑
  • 是否适合中学生阅读(语言难度)
  • 错误答案时思考过程是否显示了哪里出错

性能测试

  • 简单题(L1):总延迟 < 5s
  • 中等题(L2):总延迟 < 15s
  • 困难题(L3):总延迟 < 30s

成本测试

  • 平均每题成本 < $0.05
  • reasoning_effort=medium 与 high 的准确率差异 < 3%
  • 日均调用 10000 次的月成本预估

11.3 测试结果模板

推理模型评测报告
==================
模型:o4-mini(2026-04) | 推理深度:medium
数据集:60 题(代数 20 + 几何 20 + 概率 20)

准确率:
  L1 基础:20/20 (100%)
  L2 中等:18/20 (90%)
  L3 困难:16/20 (80%)
  总计:54/60 (90%)

推理质量:
  有步骤的比例:58/60 (97%)
  自我修正次数:3 次
  平均步骤数:4.2 步

性能:
  平均 TTFT:3.2s
  平均总延迟:8.7s
  P95 延迟:22.1s

成本:
  平均 thinking tokens:1,240
  平均 answer tokens:180
  平均每题成本:$0.028
  月估算(10K/天):$8,400

结论:
  推荐使用 medium 深度,L3 准确率需专项优化。

课堂练习

  1. 用 OpenAI o4-mini / GPT-5 reasoning 或 DeepSeek-R2 测试 5 道数学题,记录 thinking token 和答案正确率。
  2. 对比 reasoning_effort=low 和 high 下的准确率和成本差异。
  3. 设计一个"模型路由器"的测试用例集:10 个简单问题 + 10 个复杂问题,验证路由准确率。

推理模型测试专项 大模型测试体系教程 · 内部培训资料