Skip to content

4.10 Thinking 模式:Extended Thinking 与 thinking

本节学习目标

  • 解释 Extended Thinking 在 API 层面的基本语义(模型先「想」再答)。
  • 理解 thinking 内容块text / tool_use 的共存关系。
  • 评估 Thinking 对 工具调用时机、token 计费、UI 展示 的影响。

为何需要「先想后说」?

常规模型输出是 直接文本;复杂推理任务中,用户希望看到 中间推理链(或至少让模型在内部有更长的推理预算)。Extended Thinking 让模型可以产出 thinking——在教学上可视为 「草稿纸」

生活类比:数学题 草稿纸答题卡 分离——草稿可以不交,但答题卡要工整;Thinking 类似 草稿text 类似 正式答案


消息内容中的块类型扩展

4.4 的基础上,增加:

typescript
type ThinkingBlock = {
  type: "thinking";
  thinking: string; // 或结构化字段,视 API 版本而定
};

type AssistantContentBlock =
  | { type: "text"; text: string }
  | ThinkingBlock
  | ToolUseBlock;
块类型UI 默认是否进入用户剪贴板典型策略
thinking可折叠 / 仅调试可见依产品设置尊重用户隐私与简洁
text完整展示主通道
tool_use显示为工具卡片是(元数据)与执行器绑定

流式事件:Thinking 也有 delta

text_delta 类似,可能存在 thinking_delta(名称以 SDK 为准)。

教学伪代码

typescript
for await (const ev of stream) {
  if (isThinkingDelta(ev)) {
    yield { kind: "thinking_delta", text: ev.delta.thinking };
  }
  if (isTextDelta(ev)) {
    yield { kind: "assistant_text_delta", text: ev.delta.text };
  }
}

对工具调用的影响:「想完再动手」?

行为说明
同一轮内顺序常见顺序:thinking → text/tool(非严格保证)
tool_useThinking 可能 预先规划 多个调用
错误恢复若 thinking 显示「我搞错了」,模型可能在 下一轮 自纠

教学结论:QueryEngine 不必 等 thinking 结束才开始收集 tool_use——收集逻辑仍 以块类型为准;但 UI 可能 延迟高亮工具卡片 直到 thinking 折叠完成(产品决策)。


Token 与计费:Thinking 通常不免费

维度影响
输入窗口thinking 文本占用 输出侧 token
费用常计入 output tokens
压缩长 thinking 加速触达 87% 阈值

生活类比:草稿纸也用本子页数——页数(token) 会计入总消耗。


与历史压缩的摩擦

压缩策略需要决定:是否保留 thinking

策略优点缺点
保留调试价值高占空间
丢弃省 token丢推理轨迹
摘要平衡实现复杂

安全与隐私:Thinking 可能更「直白」

风险缓解
泄露内部策略默认不记录到共享日志
误导用户UI 标注「模型思考过程,非最终结论」
合规企业版可 关闭 Extended Thinking

QueryEngine 集成检查清单

检查项说明
解析器识别 thinking 起止事件
Accumulatortexttool_use 同索引管理
extractToolUses忽略 thinking,只扫 tool_use
yield单独事件类型,供 UI 订阅
预算将 thinking token 计入 usage

与八步循环的映射

八步Thinking 相关
2~3流式解析新增 delta 类型
1压缩是否保留 thinking
6token 预算更快触线

小结

  • Extended Thinking 通过 thinking 暴露或强化推理过程。
  • QueryEngine 把它当作 又一类 content 做流式累积与 yield
  • 工具调用 仍以 tool_use 为准;Thinking 主要影响 体验、计费与压缩策略

API / SDK 侧:如何「打开」Extended Thinking(概念)

具体字段名以 当前 SDK 与模型能力 为准,教学中可记三层:

层级示意
HTTP请求体中带 扩展思考开关(或模型族隐式支持)
SDKclient.messages.stream({ ..., /* thinking options */ })
响应流里出现 thinking 相关事件

本书不绑定某一泄露版本的 精确字段名,避免与你本地重建仓库不一致;你在 query.ts 附近搜索 thinkingextended 即可锚定。


UI 策略矩阵

用户画像推荐展示
默认开发者折叠面板 + 「显示思考过程」快捷键
演示模式仅显示 text,避免泄露中间推理
调试模式完整 thinking + 原始事件时间线

与工具治理的交叉:Thinking 里「计划」是否算承诺?

观点工程处理
计划可变更以实际 tool_use 为准,thinking 仅为解释
计划误导用户UI 提示「可能修订」

这能避免 把草稿当合同 的法律/体验风险。


调试清单:Thinking 相关 bug 从哪查?

  1. 事件类型未识别 → 流解析器缺分支,thinking 被丢弃。
  2. 块顺序错乱indexcontent_block_start 映射错误。
  3. token 暴涨 → 长 thinking 未参与压缩策略。
  4. 工具未触发 → 误以为 thinking 结束才算「模型说完」—应检查 tool_use 是否已闭合

与异步生成器:yield 顺序保证

Thinking delta 与 text delta 交错 yield 时,UI 应 按时间序 渲染;不要在客户端 重排 为「全文 thinking 在前」除非产品明确要求。

做法结果
保序与模型真实节奏一致
强行重排可能 误导 用户理解因果

下一篇:4.11 并行工具执行器

本项目仅用于教育学习目的。Claude Code 源码版权归 Anthropic, PBC 所有。