本页目录

推理与 thinking

让模型"先想再答"——在推理时多花算力做分解、试错、自检,而不是只靠预训练压进权重的直觉。adaptive thinking 和 effort 把思考深度从手填 token 数变成了语义档位。

概述

让模型"先想再答"——在推理时(test-time)⁠多花算力做分解、试错、自检,而不是只靠预训练压进权重的直觉。这条线从 Chain-of-Thought(2022,让模型写出推理步骤就显著提升数学/推理准确率)走到推理模型(reasoning models),再到 Claude 的 adaptive thinking:模型自己决定何时想、想多深。理解它,是把"又快又便宜"和"又准又稳"调对档位的关键——这也是 上下文工程 里 token 预算波动最大的一个变量。

核心直觉:⁠算力可以花在训练时,也可以花在推理时⁠。同一个模型,允许它在回答前先"想"一段,等价于在推理时投入更多计算去搜索、验证——对多步推理、agentic 长任务,这能换来实打实的正确率提升;对简单查询,则是纯浪费。所以现代做法不是"全程深想"或"全程不想",而是按任务难度动态分配思考量⁠,并留一个总闸来权衡。

机制:thinking block 与它为什么有用

开启思考后,一次响应里先出现 thinking block(模型的内部推理),再出现 text(给用户的答案):

flowchart LR
    Q["输入"] --> TH["thinking block<br/>分解 → 试错 → 自检"]
    TH --> A["text block<br/>最终答案"]

为什么"想"能提升质量,可以拆成三个动作:

  • 分解⁠:把难题拆成可逐个攻克的小步,降低单步出错率。
  • 搜索/试错⁠:在思考里走几条路、比较,而不是一锤定音。
  • 自检/验证⁠:对照约束回查自己的中间结论(尤其代码、数学)。

举个具体的:解"27 × 453",直接答容易错位;而 thinking 里会分解成 27×400 + 27×53,⁠试错地把 27×53 再拆成 27×50+27×3,最后自检把 10800+1431=12231 回乘一遍核对。同样的三步发生在写代码(先列边界条件、试几种实现、再对照需求回查)与多步规划上——这正是 Chain-of-Thought 把推理"显式写出来"就显著提分的原因:把一步登天的概率赌注,换成几步各自高把握的小赌注。

代价同样实在:⁠多花 token、多等延迟⁠。所以"想多少"必须可控,这就是 effort 与 thinking 控制存在的理由。

Claude 的思考控制(当前 API 行为)

现代 Claude(Opus 4.6+)用 adaptive thinking,不再手填思考预算:

thinking = {"type": "adaptive", "display": "summarized"}   # 自适应 + 展示摘要
output_config = {"effort": "high"}                         # 总闸

effort:深浅总闸

effort ∈ {low, medium, high, xhigh, max}(xhigh 是 Opus 4.7 起新增、介于 high 与 max 之间),默认 high:

effort行为用在
low工具调用更少更聚合、前言更短、最快最省简单/低敏任务、延迟敏感
medium平衡点一般应用
high更充分推理多数 intelligence-sensitive 任务(推荐下限)
xhighcoding/agentic 甜点(Claude Code 默认)长 coding、复杂 agent
max压到顶正确性 ≫ 成本;注意易空转

effort 越高,模型越倾向多想、多探索、多调工具——这把"思考深度"从一个 token 数变成一个语义档位。

thinking 的可见性:默认看不到原文

  • display 默认 omitted(Opus 4.7/4.8、Fable 5):thinking block 仍在响应里,但 thinking 字段是空字符串⁠。要给用户看推理就设 display: "summarized"摘要⁠。
  • 原始思维链(raw CoT)从不返回⁠——能拿到的最多是摘要,不是逐字推理。
  • 流式 UX 坑⁠:omitted 下,流看起来像"长时间停顿后才突然出字"(其实在思考)。要展示进度,显式设 summarized

多轮里:thinking block 要原样回传

这是最容易踩的工程坑。多轮对话/agent 循环里,把上一轮的 thinking block 喂回时:

  • 同一模型续话⁠:必须原样回传⁠(含 signature 签名,甚至空文本块也照原样)。API 拒绝被改动的块,但不拒绝读过的块——展示摘要没问题,编辑/重构块会 400。
  • 换模型⁠:换用其它模型时,API 会自动把上一代(如 Fable 5)的 thinking block 从 prompt 里丢弃⁠(通常静默、且丢弃发生在计价前,不计费);不要手动 strip 常规 thinking 块,否则可能触发顺序/签名 400。

interleaved thinking 与 task budget

  • interleaved thinking:adaptive 下,⁠工具调用之间也会思考(边做边想),无需额外 header——这对 agent 循环尤其重要(每次拿到 tool_result 后再想)。
  • task budget(beta task-budgets-2026-03-13):给整个 agent 循环一个 token 预算,⁠模型能看到倒计时并自我收尾⁠。它和 max_tokens 不同:
task_budgetmax_tokens
作用范围整个 agentic 循环单次响应
模型是否可见可见⁠(看倒计时自我节制)不可见
性质软建议硬上限(截断)
下限20000 token1

该想还是不该想:把 effort 当一个要扫的维度

不要反射式拉满 xhigh/max。更强的模型有更高的智能上限,⁠起步用 high、在自己的 eval 集上扫 medium/high/xhigh 再定⁠——关系不是单调的:高 effort 在 agentic 任务上常减少回合数、反而更省;而某些任务 medium 同样好且更快(评估见 评估与可观测)。

任务起点
分类 / 抽取 / 简单查询low(甚至关思考)
数学 / 多步推理 / 规划high
长 agentic / codinghigh ~ xhigh,配大 max_tokens 与流式
正确性压倒成本max(警惕空转)

迁移提示:旧模型用 temperature 调"创造性"的思路,在新模型换成 effort 调"思考深度"——采样参数已移除(见 Token 与采样)。

最佳实践

  • 用 adaptive thinking,别手填 budget。 现代 Claude 自适应想多深;手填 budget_tokens 在 Opus 4.7/4.8/Fable 5 上直接 400。
  • effort 起步 high,按 eval 扫档定。 关系非单调——高 effort 在 agentic 上常减回合反更省,某些任务 medium 同样好且更快。
  • 按任务给 effort 起点。 分类/抽取→low;数学/规划→high;长 agentic/coding→high~xhigh 配大 max_tokens 与流式;正确性压倒成本→max(警惕空转)。
  • 要给用户看推理就设 display:"summarized" 默认 omitted 下流像"长时间停顿后突然出字"。
  • 多轮里 thinking block 原样回传。 同模型续话含签名照原样;换模型让 API 自己丢,别手动 strip。
  • 过度思考/探索先降 effort,别堆 prompt 约束。 medium 常是甜点。

权衡与失败模式(附 prompt 修法)

  • overthinking:高 effort 在简单任务上空转烧 token → 先降 effort(medium 常是甜点),别急着堆 prompt 约束。要按需抑制可加:"思考会增加延迟,只在确实需要多步推理时才深想;拿得准就直接回答。"
  • 过度探索 / 过度委派⁠(agent 场景):高 effort 下更爱探索、爱开子 agent → 降 effort 或给明确边界。
  • 思考被当成卡死⁠:omitted 时前端像没响应 → display: "summarized"
  • 多轮丢块⁠:手动改/删 thinking block 导致 400 → 同模型原样回传(含签名),换模型让 API 自己丢。
  • thinking:{type:"disabled"} 时啰嗦⁠:关思考时模型可能把推理写进可见正文 → 留 adaptive,或加 "只输出最终答案,不要中间推理。"

参考

  • Anthropic 官方文档⁠: Extended Thinking、Adaptive Thinking、Effort、Task Budgets、Migration Guide(platform.claude.com)
  • 论文⁠: "Chain-of-Thought Prompting Elicits Reasoning in LLMs"(Wei 2022)

Keywords: chain-of-thought, CoT, reasoning model, test-time compute, extended thinking, adaptive thinking, effort, low, medium, high, xhigh, max, thinking block, signature, display, summarized, omitted, raw CoT, interleaved thinking, task budget, max_tokens, multi-turn echo-back, budget_tokens deprecated, overthinking