使用扩展思维构建
扩展思维为Claude提供了处理复杂任务的增强推理能力,同时在提供最终答案之前,为其逐步思考过程提供不同程度的透明度。
支持的模型
扩展思维在以下模型中受支持:
- Claude Opus 4 (
claude-opus-4-20250514
) - Claude Sonnet 4 (
claude-sonnet-4-20250514
) - Claude Sonnet 3.7 (
claude-3-7-sonnet-20250219
)
API行为在Claude 3.7和Claude 4模型之间有所不同,但API结构保持完全相同。
有关更多信息,请参阅不同模型版本中思维的差异。
扩展思维的工作原理
当扩展思维开启时,Claude会创建thinking
内容块,在其中输出其内部推理。Claude在制作最终回应之前会融入这种推理的见解。
API响应将包含thinking
内容块,然后是text
内容块。
以下是默认响应格式的示例:
有关扩展思维响应格式的更多信息,请参阅Messages API参考。
如何使用扩展思维
以下是在Messages API中使用扩展思维的示例:
要开启扩展思维,添加一个thinking
对象,将type
参数设置为enabled
,并将budget_tokens
设置为扩展思维的指定令牌预算。
budget_tokens
参数确定Claude在其内部推理过程中允许使用的最大令牌数。在Claude 4模型中,此限制适用于完整的思维令牌,而不是摘要输出。更大的预算可以通过为复杂问题启用更彻底的分析来提高响应质量,尽管Claude可能不会使用分配的全部预算,特别是在超过32k的范围内。
budget_tokens
必须设置为小于max_tokens
的值。但是,当使用交错思维与工具时,您可以超过此限制,因为令牌限制变成您的整个上下文窗口(200k令牌)。
摘要思维
启用扩展思维后,Claude 4模型的Messages API返回Claude完整思维过程的摘要。摘要思维提供扩展思维的全部智能优势,同时防止滥用。
以下是摘要思维的一些重要考虑因素:
- 您需要为原始请求生成的完整思维令牌付费,而不是摘要令牌。
- 计费的输出令牌计数将不匹配您在响应中看到的令牌计数。
- 思维输出的前几行更加详细,提供详细的推理,这对提示工程目的特别有帮助。
- 随着Anthropic寻求改进扩展思维功能,摘要行为可能会发生变化。
- 摘要保留了Claude思维过程的关键思想,延迟最小,实现了可流式传输的用户体验,并便于从Claude 3.7模型迁移到Claude 4模型。
- 摘要由与您在请求中目标的模型不同的模型处理。思维模型看不到摘要输出。
Claude Sonnet 3.7继续返回完整的思维输出。
在需要访问Claude 4模型完整思维输出的罕见情况下,联系我们的销售团队。
流式思维
您可以使用服务器发送事件(SSE)流式传输扩展思维响应。
当为扩展思维启用流式传输时,您通过thinking_delta
事件接收思维内容。
有关通过Messages API进行流式传输的更多文档,请参阅流式消息。
以下是如何处理带有思维的流式传输:
流式输出示例:
当使用启用思维的流式传输时,您可能会注意到文本有时以较大的块到达,与较小的逐令牌传递交替。这是预期的行为,特别是对于思维内容。
流式系统需要批量处理内容以获得最佳性能,这可能导致这种”块状”传递模式,流式事件之间可能有延迟。我们正在不断努力改善这种体验,未来的更新将专注于使思维内容流式传输更加流畅。
扩展思维与工具使用
扩展思维可以与工具使用一起使用,允许Claude推理工具选择和结果处理。
当将扩展思维与工具使用一起使用时,请注意以下限制:
-
工具选择限制:带有思维的工具使用仅支持
tool_choice: {"type": "auto"}
(默认)或tool_choice: {"type": "none"}
。使用tool_choice: {"type": "any"}
或tool_choice: {"type": "tool", "name": "..."}
将导致错误,因为这些选项强制工具使用,这与扩展思维不兼容。 -
保留思维块:在工具使用期间,您必须将
thinking
块传回API以获取最后一条助手消息。将完整的未修改块包含回API以维持推理连续性。
保留思维块
在工具使用期间,您必须将thinking
块传回API,并且必须将完整的未修改块包含回API。这对于维持模型的推理流程和对话完整性至关重要。
虽然您可以从先前的assistant
角色轮次中省略thinking
块,但我们建议始终将所有思维块传回API以进行任何多轮对话。API将:
- 自动过滤提供的思维块
- 使用保持模型推理所需的相关思维块
- 仅对显示给Claude的块的输入令牌计费
当Claude调用工具时,它正在暂停构建响应以等待外部信息。当工具结果返回时,Claude将继续构建现有响应。这需要在工具使用期间保留思维块,原因如下:
-
推理连续性:思维块捕获了Claude导致工具请求的逐步推理。当您发布工具结果时,包含原始思维确保Claude可以从中断的地方继续其推理。
-
上下文维护:虽然工具结果在API结构中显示为用户消息,但它们是连续推理流程的一部分。保留思维块在多个API调用中维护这种概念流程。有关上下文管理的更多信息,请参阅我们的上下文窗口指南。
重要:当提供thinking
块时,连续thinking
块的整个序列必须与模型在原始请求期间生成的输出匹配;您不能重新排列或修改这些块的序列。
交错思维
Claude 4模型中的扩展思维与工具使用支持交错思维,这使Claude能够在工具调用之间进行思考,并在接收工具结果后进行更复杂的推理。
通过交错思维,Claude可以:
- 在决定下一步做什么之前推理工具调用的结果
- 在中间推理步骤之间链接多个工具调用
- 基于中间结果做出更细致的决策
要启用交错思维,请在您的API请求中添加beta标头interleaved-thinking-2025-05-14
。
以下是交错思维的一些重要考虑因素:
- 使用交错思维时,
budget_tokens
可以超过max_tokens
参数,因为它代表一个助手轮次内所有思维块的总预算。 - 交错思维仅支持通过Messages API使用的工具。
- 交错思维仅支持Claude 4模型,使用beta标头
interleaved-thinking-2025-05-14
。 - 对Anthropic API的直接调用允许您在对任何模型的请求中传递
interleaved-thinking-2025-05-14
,没有效果。 - 在第三方平台上(例如,Amazon Bedrock和Vertex AI),如果您将
interleaved-thinking-2025-05-14
传递给除Claude Opus 4或Sonnet 4之外的任何模型,您的请求将失败。
扩展思维与提示缓存
提示缓存与思维有几个重要考虑因素:
扩展思维任务通常需要超过5分钟才能完成。考虑使用1小时缓存持续时间来维持跨越更长思维会话和多步骤工作流程的缓存命中。
思维块上下文移除
- 来自先前轮次的思维块从上下文中移除,这可能影响缓存断点
- 当继续使用工具使用的对话时,思维块被缓存并在从缓存读取时计为输入令牌
- 这创建了一个权衡:虽然思维块在视觉上不消耗上下文窗口空间,但当缓存时它们仍然计入您的输入令牌使用量
- 如果思维被禁用,如果您在当前工具使用轮次中传递思维内容,请求将失败。在其他上下文中,传递给API的思维内容被简单忽略
缓存失效模式
理解思维块缓存行为
当将扩展思维与工具使用一起使用时,思维块表现出影响令牌计数的特定缓存行为:
工作原理:
- 缓存仅在您发出包含工具结果的后续请求时发生
- 当发出后续请求时,先前的对话历史(包括思维块)可以被缓存
- 这些缓存的思维块在从缓存读取时在您的使用指标中计为输入令牌
- 当包含非工具结果用户块时,所有先前的思维块都被忽略并从上下文中剥离
详细示例流程:
请求1:
响应1:
请求2:
响应2:
请求2写入请求内容的缓存(不是响应)。缓存包括原始用户消息、第一个思维块、工具使用块和工具结果。
请求3:
因为包含了非工具结果用户块,所有先前的思维块都被忽略。此请求将被处理为:
关键点:
- 这种缓存行为自动发生,即使没有显式的
cache_control
标记 - 无论使用常规思维还是交错思维,此行为都是一致的
扩展思维的最大令牌和上下文窗口大小
在较旧的Claude模型(Claude Sonnet 3.7之前)中,如果提示令牌和max_tokens
的总和超过了模型的上下文窗口,系统会自动调整max_tokens
以适应上下文限制。这意味着您可以设置一个大的max_tokens
值,系统会根据需要静默减少它。
对于Claude 3.7和4模型,max_tokens
(当启用思维时包括您的思维预算)被强制执行为严格限制。如果提示令牌 + max_tokens
超过上下文窗口大小,系统现在将返回验证错误。
您可以阅读我们的上下文窗口指南以获得更彻底的深入了解。
扩展思维的上下文窗口
当计算启用思维的上下文窗口使用情况时,有一些需要注意的考虑因素:
- 来自先前轮次的思维块被剥离,不计入您的上下文窗口
- 当前轮次思维计入该轮次的
max_tokens
限制
下图演示了启用扩展思维时的专门令牌管理:
有效上下文窗口计算为:
我们建议使用令牌计数API来获得您特定用例的准确令牌计数,特别是在处理包含思维的多轮对话时。
扩展思维与工具使用的上下文窗口
当将扩展思维与工具使用一起使用时,思维块必须明确保留并与工具结果一起返回。
扩展思维与工具使用的有效上下文窗口计算变为:
下图说明了扩展思维与工具使用的令牌管理:
使用扩展思维管理令牌
鉴于扩展思维Claude 3.7和4模型的上下文窗口和max_tokens
行为,您可能需要:
- 更积极地监控和管理您的令牌使用
- 随着提示长度的变化调整
max_tokens
值 - 可能更频繁地使用令牌计数端点
- 注意先前的思维块不会在您的上下文窗口中累积
进行此更改是为了提供更可预测和透明的行为,特别是随着最大令牌限制显著增加。
思维加密
完整的思维内容被加密并在signature
字段中返回。此字段用于验证思维块是由Claude生成的,当传回API时。
只有在使用扩展思维工具时才严格需要发送回思维块。否则,您可以从先前的轮次中省略思维块,或者如果您传回它们,让API为您剥离它们。
如果发送回思维块,我们建议按照您收到的方式传回所有内容,以保持一致性并避免潜在问题。
以下是思维加密的一些重要考虑因素:
- 当流式响应时,签名通过
content_block_delta
事件内的signature_delta
在content_block_stop
事件之前添加。 signature
值在Claude 4中比在先前模型中显著更长。signature
字段是一个不透明字段,不应被解释或解析 - 它仅用于验证目的。signature
值在平台间兼容(Anthropic API、Amazon Bedrock和Vertex AI)。在一个平台上生成的值将与另一个平台兼容。
思维编辑
偶尔Claude的内部推理会被我们的安全系统标记。当这种情况发生时,我们加密thinking
块的部分或全部内容,并将其作为redacted_thinking
块返回给您。redacted_thinking
块在传回API时被解密,允许Claude继续其响应而不丢失上下文。
当构建使用扩展思维的面向客户的应用程序时:
- 注意编辑的思维块包含不可人类阅读的加密内容
- 考虑提供简单的解释,如:“Claude的一些内部推理已出于安全原因自动加密。这不会影响响应的质量。”
- 如果向用户显示思维块,您可以过滤掉编辑的块,同时保留正常的思维块
- 透明地说明使用扩展思维功能可能偶尔导致一些推理被加密
- 实施适当的错误处理,以优雅地管理编辑的思维而不破坏您的UI
以下是显示正常和编辑思维块的示例:
在输出中看到编辑的思维块是预期行为。模型仍然可以使用这种编辑的推理来告知其响应,同时维持安全护栏。
如果您需要在应用程序中测试编辑思维处理,您可以使用此特殊测试字符串作为提示:ANTHROPIC_MAGIC_STRING_TRIGGER_REDACTED_THINKING_46C9A13E193C177646C7398A98432ECCCE4C1253D5E2D82641AC0E52CC2876CB
在多轮对话中将thinking
和redacted_thinking
块传回API时,您必须将完整的未修改块包含回API以获取最后一个助手轮次。这对于维持模型的推理流程至关重要。我们建议始终将所有思维块传回API。有关更多详细信息,请参阅上面的保留思维块部分。
不同模型版本中思维的差异
Messages API在Claude Sonnet 3.7和Claude 4模型之间处理思维的方式不同,主要在编辑和摘要行为方面。
请参阅下表进行简要比较:
功能 | Claude Sonnet 3.7 | Claude 4模型 |
---|---|---|
思维输出 | 返回完整思维输出 | 返回摘要思维 |
交错思维 | 不支持 | 支持interleaved-thinking-2025-05-14 beta标头 |
定价
扩展思维使用标准令牌定价方案:
模型 | 基础输入令牌 | 缓存写入 | 缓存命中 | 输出令牌 |
---|---|---|---|---|
Claude Opus 4 | $15 / MTok | $18.75 / MTok | $1.50 / MTok | $75 / MTok |
Claude Sonnet 4 | $3 / MTok | $3.75 / MTok | $0.30 / MTok | $15 / MTok |
Claude Sonnet 3.7 | $3 / MTok | $3.75 / MTok | $0.30 / MTok | $15 / MTok |
思维过程产生以下费用:
- 思维期间使用的令牌(输出令牌)
- 来自最后一个助手轮次的思维块包含在后续请求中(输入令牌)
- 标准文本输出令牌
当启用扩展思维时,会自动包含专门的系统提示以支持此功能。
当使用摘要思维时:
- 输入令牌:您原始请求中的令牌(不包括先前轮次的思维令牌)
- 输出令牌(计费):Claude内部生成的原始思维令牌
- 输出令牌(可见):您在响应中看到的摘要思维令牌
- 无费用:用于生成摘要的令牌
计费的输出令牌计数将不匹配响应中可见的令牌计数。您为完整的思维过程计费,而不是您看到的摘要。
扩展思维的最佳实践和考虑因素
使用思维预算
- 预算优化: 最小预算是1,024个令牌。我们建议从最小值开始,逐步增加思维预算以找到您用例的最佳范围。更高的令牌计数能够实现更全面的推理,但根据任务的不同,收益递减。增加预算可以以增加延迟为代价提高响应质量。对于关键任务,测试不同设置以找到最佳平衡。请注意,思维预算是目标而不是严格限制——实际令牌使用可能根据任务而变化。
- 起始点: 对于复杂任务,从较大的思维预算(16k+令牌)开始,并根据您的需要进行调整。
- 大预算: 对于超过32k的思维预算,我们建议使用批处理以避免网络问题。推动模型思考超过32k令牌的请求会导致长时间运行的请求,可能遇到系统超时和开放连接限制。
- 令牌使用跟踪: 监控思维令牌使用以优化成本和性能。
性能考虑
- 响应时间: 由于推理过程所需的额外处理,准备好可能更长的响应时间。考虑生成思维块可能增加总体响应时间。
- 流式要求: 当
max_tokens
大于21,333时需要流式传输。流式传输时,准备好处理到达的思维和文本内容块。
功能兼容性
- 思维与
temperature
或top_k
修改以及强制工具使用不兼容。 - 当启用思维时,您可以将
top_p
设置为1到0.95之间的值。 - 启用思维时无法预填充响应。
- 思维预算的更改会使包含消息的缓存提示前缀失效。但是,当思维参数更改时,缓存的系统提示和工具定义将继续工作。
使用指南
- 任务选择: 对特别复杂的任务使用扩展思维,这些任务受益于逐步推理,如数学、编码和分析。
- 上下文处理: 您不需要自己删除先前的思维块。Anthropic API自动忽略先前轮次的思维块,在计算上下文使用时不包括它们。
- 提示工程: 如果您想最大化Claude的思维能力,请查看我们的扩展思维提示技巧。