7.5 推理预算与思考过程管理
Extended Thinking 提升准确度但也增加成本,需要精心的预算管理。本节介绍四种思考策略(禁用、自适应、预算控制、强制)、复杂度评估方法、思考质量分析,以及会话级的预算跟踪机制。
7.5.1 推理预算的意义
Adaptive Thinking(自适应思考)是 Claude 的现代特性,模型在“思考”中投入 token 进行深度推理,显著提升复杂任务的准确度。但思考本身有成本:
更新: Extended Thinking 的手动模式(
type: "enabled")在 Claude Fable 5.1、Mythos 5.1、Fable 5、Mythos 5、Opus 5、Sonnet 5 与 Opus 4.8/4.7 上已被移除(请求返回 400 错误),在 Opus 4.6 与 Sonnet 4.6 上已弃用但仍可用;Adaptive Thinking(type: "adaptive")是官方推荐方案。反向的边界同样要注意:Sonnet 4.5、Opus 4.5、Haiku 4.5 等更早的模型只有手动模式,传type: "adaptive"会返回 400。完整对照见本节末的附注表。
思考 Token 成本
与输出 Token 同价(按输出价计费)
大量思考会增加成本
推理时间
思考通常需要额外的推理步骤
延长响应时间
质量收益
复杂任务可能减少遗漏、重试和错误路径
需要用本地 eval 衡量收益
可预测性
思考深度难以精确控制
budget_tokens 限制
7.5.2 核心概念
推理预算的核心数据结构定义如下:
from enum import Enum
from dataclasses import dataclass
from typing import Optional
class ThinkingStrategy(Enum):
"""思考策略"""
DISABLED = "disabled" # 不使用思考
ADAPTIVE = "adaptive" # 自适应(模型决定)
REQUIRED = "required" # 强制思考
BUDGET_BASED = "budget_based" # 基于预算的条件思考
@dataclass
class ReasoningBudget:
"""推理预算配置"""
strategy: ThinkingStrategy
max_thinking_tokens: Optional[int] = None # 单次最大思考 token
max_thinking_per_session: Optional[int] = None # 会话总思考 token
budget_threshold: Optional[float] = None # 成本阈值,超过则不用思考
adaptive_threshold: Optional[float] = None # 自适应触发阈值
task_complexity_threshold: Optional[str] = None # 复杂度阈值
@dataclass
class ThinkingResult:
"""思考结果"""
thinking_tokens: int
thinking_content: str
output_tokens: int
output_content: str
total_cost: float
thinking_ratio: float # 思考 token / 总 token策略 1: 完全禁用思考
最经济的选择,适合简单任务:
策略 2: 自适应思考
让模型自主决定是否思考,适合混合工作负载:
策略 3: 基于预算的条件思考
根据成本和任务复杂度动态决定:
策略 4: 强制思考
某些任务(如代码审查、安全决策)必须激活思考:
思考结果分析
对思考过程进行质量分析的实现方式如下:
推理预算管理器
推理预算管理器的完整实现如下:
使用示例
推理预算管理器的使用示例如下:
总结
推理预算管理通过:
多种策略 (禁用、自适应、预算、强制)满足不同需求
动态复杂度评估 决定思考投入
成本和质量平衡 优化成本效益
会话级预算跟踪 防止失控支出
这是生产智能体系统必不可少的能力,尤其是当扩展思考成为标配时。
附注:Extended Thinking 的模型差异
Claude 官方对手动 Extended Thinking 配置(thinking: {type: "enabled", budget_tokens: N})按模型区分处理:
Claude Fable 5.1、Mythos 5.1(2026-09-01 发布,当前一代)与 Fable 5、Mythos 5(已列入官方 Legacy models,仍可调用)
❌ 不支持,返回 400 错误;思考常开,type: "disabled" 同样返回 400
Claude Opus 5、Sonnet 5
❌ 不支持,返回 400 错误,只提供 Adaptive Thinking(Opus 5 在 effort 为 xhigh/max 时也不接受 "disabled")
Claude Opus 4.8/4.7
❌ 不支持,返回 400 错误
Claude Opus 4.6、Sonnet 4.6
⚠️ 已弃用但功能正常(计划迁移)
Claude Opus 4.5、Sonnet 4.5、Haiku 4.5 等早期模型
✅ 仍支持,且是唯一模式(传 type: "adaptive" 反而返回 400)
迁移指南: 对支持 adaptive thinking 的模型,优先使用 thinking: {type: "adaptive"}。通过 output_config.effort 参数控制思考深度(max, xhigh, high, medium, low),而不是依赖固定 budget_tokens。
最后更新于
