本页目录
推理与 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,不再手填思考预算:
= # 自适应 + 展示摘要
= # 总闸
effort:深浅总闸
effort ∈ {low, medium, high, xhigh, max}(xhigh 是 Opus 4.7 起新增、介于 high 与 max 之间),默认 high:
| effort | 行为 | 用在 |
|---|---|---|
| low | 工具调用更少更聚合、前言更短、最快最省 | 简单/低敏任务、延迟敏感 |
| medium | 平衡点 | 一般应用 |
| high | 更充分推理 | 多数 intelligence-sensitive 任务(推荐下限) |
| xhigh | coding/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_budget | max_tokens | |
|---|---|---|
| 作用范围 | 整个 agentic 循环 | 单次响应 |
| 模型是否可见 | 可见(看倒计时自我节制) | 不可见 |
| 性质 | 软建议 | 硬上限(截断) |
| 下限 | 20000 token | 1 |
该想还是不该想:把 effort 当一个要扫的维度
不要反射式拉满 xhigh/max。更强的模型有更高的智能上限,起步用 high、在自己的 eval 集上扫 medium/high/xhigh 再定——关系不是单调的:高 effort 在 agentic 任务上常减少回合数、反而更省;而某些任务 medium 同样好且更快(评估见 评估与可观测)。
| 任务 | 起点 |
|---|---|
| 分类 / 抽取 / 简单查询 | low(甚至关思考) |
| 数学 / 多步推理 / 规划 | high |
| 长 agentic / coding | high ~ 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