延伸思考 - Amazon Bedrock

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

延伸思考

扩展思维Claude增强了复杂任务的推理能力,同时在给出最终答案之前为其 step-by-step思维过程提供了不同程度的透明度。只要启用 Claude 的思考模式,您就需要为 Claude 可用于内部推理过程的最大词元数设置预算。

支持的模型如下所示:

模型 模型 ID

Claude Opus4.5

anthropic.claude-opus-4-5-20251101-v1:0

Claude Opus 4

anthropic.claude-opus-4-20250514-v1:0

Claude Sonnet 4

anthropic.claude-sonnet-4-20250514-v1:0

Claude Sonnet 4.5

anthropic.claude-sonnet-4-5-20250929-v1:0

Claude Haiku 4.5

anthropic.claude-haiku-4-5-20251001-v1:0

Claude 3.7 Sonnet

anthropic.claude-3-7-sonnet-20250219-v1:0

Claude Sonnet 4.5

anthropic.claude-opus-4-5-20251101-v1:0

注意

Claude 3.7 与 Claude 4 模型之间的 API 行为存在差异。有关更多信息,请参阅 不同模型版本在思考上的不同

延伸思考的最佳实践和注意事项

使用指南

  • 任务选择:使用扩展思维来处理特别复杂的任务,这些任务受益于数学、编码和分析等 step-by-step推理。

  • 上下文处理:您无需自己去移除以前的思考单元。Anthropic API 会自动忽略之前回合中的思考单元,并且在计算上下文使用情况时排除这些单元。

  • 提示工程:如果您想尽可能提高 Claude 的思考能力,请查看 Anthropic 的延伸思考提示技巧

性能注意事项

  • 响应时间:由于推理过程需要额外的处理,因此请做好可能需要更长响应时间的准备。还要考虑到生成思考单元可能会增加总体响应时间。

  • 流式处理要求:当 max_tokens 大于 21333 时,需要进行流式处理。使用流式处理时,请准备好在 thinkingtext 内容块到达时进行处理。

功能兼容性

  • 思考与 temperaturetop_ptop_k 修改不兼容,也不兼容强制使用工具

  • 启用思考后,您无法预先填写响应。

  • 对思考预算进行更改,会导致包含消息的缓存提示前缀失效。但是,当思考的参数发生变化时,缓存系统提示和工具定义将继续起作用。

处理思考预算

  • 预算优化:最低预算为 1024 个词元。Anthropic 建议从最小值开始,然后逐步增加思考预算,为您的使用案例找到最佳范围。词元数量越多,就可以进行更全面和更细致入微的推理,但根据任务的不同,收益也可能会降低。思考预算是一个目标值,而不是一个严格的限制,实际的词元使用量可能会因任务而发生变化。

  • 最低和最佳设置:最低预算为 1024 个词元。我们建议从最低预算开始,逐步增加思考预算,来找到 Claude 能够很好地执行您的使用案例的最佳范围。词元数量越多,您就可以获得更全面和更细致的推理,但根据任务的不同,收益也可能会降低。思考预算是一个目标值,而不是一个严格的限制,实际的词元使用量可能会因任务而发生变化。

  • 实验:在不同的最大思考预算设置下,模型的表现会有所不同。增加最大思考预算可以使模型思考得更好或更深入,但随之付出的代价是延迟增加。对于关键任务,可以考虑测试不同的预算设置,在数量与性能之间找到最佳平衡。

  • 大量预算:对于超过 3.2 万个词元的预算,我们建议使用批处理来避免网络问题。要求模型使用 3.2 万个词元进行思考的请求会导致请求长时间运行,这可能会随之导致系统超时和打开的连接数限制。请注意,max_tokens 限制因 Claude 模型而异。有关更多信息,请参阅 延伸思考的最大词元数和上下文窗口大小

  • 词元使用情况跟踪:监控思考词元的使用量,来优化成本和性能。

延伸思考的工作方式

启用延伸思考后,Claude 创建 thinking 内容块,在其中输出内部推理。Claude 会先融合此推理中的见解,然后起草最终响应。API 响应将包括 thinking 内容块,然后是 text 内容块。

以下为默认响应格式的示例:

{ "content": [ { "type": "thinking", "thinking": "Let me analyze this step by step...", "signature": "WaUjzkypQ2mUEVM36O2TxuC06KN8xyfbJwyem2dw3URve/op91XWHOEBLLqIOMfFG/UvLEczmEsUjavL...." }, { "type": "text", "text": "Based on my analysis..." } ] }

有关延伸思考的响应格式的更多信息,请参阅 Anthropic 的消息 API 请求和响应

如何使用延伸思考

要启用延伸思考,请添加 thinking 对象,将 thinking 参数设置为启用,并将 budget_tokens 设置为针对延伸思考指定的词元预算。

budget_tokens 参数决定了 Claude 允许在其内部推理过程中使用的最大词元数。在 Claude 4 模型中,此限制应用到全部思考词元,而不应用到汇总输出。较大的预算可以对复杂问题进行更彻底的分析,从而提高响应质量,尽管 Claude 可能不会使用分配的全部预算,尤其是在预算范围超出 3.2 万时。

budget_tokens 的值必须设置为小于 max_tokens 的值。但是,交替思考(测试版)与工具一起使用时,您可以超过此限制,因为词元限制会应用到您的整个上下文窗口(20 万个词元)。

汇总思考

启用延伸思考后,适用于 Claude 4 模型的消息 API 会返回 Claude 的完整思考过程摘要。汇总思考提供了延伸思考的全部智能化益处,同时又能防止滥用。

以下是使用汇总思考时需要考虑的一些重要注意事项:

  • 您需要为原始请求生成的全部思考词元付费,而不是摘要词元。

  • 计费的输出词元数量与您在响应中看到的词元数量不匹配。

  • 提供给摘要生成器模型的提示可能会发生变化。

  • 思考输出的前几行会更详尽,提供了详细的推理过程,这对于提示工程用途尤为有用。

注意

Claude 3.7 Sonnet 仍会返回完整思考输出。

要获取 Claude 4 模型的完整思考输出,请联系您的客户团队。

流式思考

您可以使用服务器发送的事件(SSE)流式处理延伸思考响应。为延伸思考启用流式处理时,您会通过 thinking_delta 事件接收思考内容。流式处理的事件无法保证以恒定的速度返回。流式处理事件之间可能会有延迟。有关通过消息 API 进行流式处理的更多文档,请参阅流式处理消息

以下是使用思维处理直播的方法 InvokeModelWithResponseStream

{ "anthropic_version": "bedrock-2023-05-31", "max_tokens": 10000, "thinking": { "type": "enabled", "budget_tokens": 4000 }, "messages": [ { "role": "user", "content": "What is 27 * 453?" } ] }

响应:

event: message_start data: {"type": "message_start", "message": {"id": "msg_01...", "type": "message", "role": "assistant", "content": [], "model": "claude-3-7-sonnet-20250219", "stop_reason": null, "stop_sequence": null}} event: content_block_start data: {"type": "content_block_start", "index": 0, "content_block": {"type": "thinking", "thinking": ""}} event: content_block_delta data: {"type": "content_block_delta", "index": 0, "delta": {"type": "thinking_delta", "thinking": "Let me solve this step by step:\n\n1. First break down 27 * 453"}} event: content_block_delta data: {"type": "content_block_delta", "index": 0, "delta": {"type": "thinking_delta", "thinking": "\n2. 453 = 400 + 50 + 3"}} // Additional thinking deltas... event: content_block_delta data: {"type": "content_block_delta", "index": 0, "delta": {"type": "signature_delta", "signature": "EqQBCgIYAhIM1gbcDa9GJwZA2b3hGgxBdjrkzLoky3dl1pkiMOYds..."}} event: content_block_stop data: {"type": "content_block_stop", "index": 0} event: content_block_start data: {"type": "content_block_start", "index": 1, "content_block": {"type": "text", "text": ""}} event: content_block_delta data: {"type": "content_block_delta", "index": 1, "delta": {"type": "text_delta", "text": "27 * 453 = 12,231"}} // Additional text deltas... event: content_block_stop data: {"type": "content_block_stop", "index": 1} event: message_delta data: {"type": "message_delta", "delta": {"stop_reason": "end_turn", "stop_sequence": null}} event: message_stop data: {"type": "message_stop"}
关于思考的流式处理行为

在启用思维功能的情况下使用流媒体时,您可能会注意到,文本有时会以较大的区块和较小的传送交替出现。 token-by-token这是预期的行为,尤其是对于思考内容而言。流式处理系统需要批量处理内容以获得最佳性能,可能会导致这种传输模式。

延伸思考结合工具使用

延伸思考可以与工具使用结合起来,使得 Claude 可以通过工具选择和结果处理进行推理。将延伸思考与工具使用结合起来时,请注意以下限制:

  • 工具选择限制:与思考结合起来的工具使用只支持 tool_choice: any。它不支持提供特定工具、auto 或任何其他值。

  • 保留思考单元:在工具使用期间,您必须将思考单元传回 API 以获取最近的助手消息。包含完整的未修改单元来传回 API,以保持推理的连续性。

以下是上下文窗口管理与工具的配合方式:

{ "anthropic_version": "bedrock-2023-05-31", "max_tokens": 10000, "thinking": { "type": "enabled", "budget_tokens": 4000 }, "tools": [ { "name": "get_weather", "description": "Get current weather for a location", "input_schema": { "type": "object", "properties": { "location": { "type": "string" } }, "required": [ "location" ] } } ], "messages": [ { "role": "user", "content": "What's the weather in Paris?" } ] }

第一个响应如下所示:

{ "content": [ { "type": "thinking", "thinking": "The user wants to know the current weather in Paris. I have access to a function `get_weather`...", "signature": "BDaL4VrbR2Oj0hO4XpJxT28J5TILnCrrUXoKiiNBZW9P+nr8XSj1zuZzAl4egiCCpQNvfyUuFFJP5CncdYZEQPPmLxYsNrcs...." }, { "type": "text", "text": "I can help you get the current weather information for Paris. Let me check that for you" }, { "type": "tool_use", "id": "toolu_01CswdEQBMshySk6Y9DFKrfq", "name": "get_weather", "input": { "location": "Paris" } } ] }

继续通过工具使用进行对话将生成另一个响应。请注意,thinking_blocktool_use_block 均传入。如果未传入,将会出错。

{ "anthropic_version": "bedrock-2023-05-31", "max_tokens": 10000, "thinking": { "type": "enabled", "budget_tokens": 4000 }, "tools": [ { "name": "get_weather", "description": "Get current weather for a location", "input_schema": { "type": "object", "properties": { "location": { "type": "string" } }, "required": [ "location" ] } } ], "messages": [ { "role": "user", "content": "What's the weather in Paris?" }, { "role": "assistant", "content": [ { "type": "thinking", "thinking": "The user wants to know the current weather in Paris. I have access to a function `get_weather`…", "signature": "BDaL4VrbR2Oj0hO4XpJxT28J5TILnCrrUXoKiiNBZW9P+nr8XSj1zuZzAl4egiCCpQNvfyUuFFJP5CncdYZEQPPmLxY", }, { "type": "tool_use", "id": "toolu_01CswdEQBMshySk6Y9DFKrfq", "name": "get_weather", "input": { "location": "Paris" } } ] }, { "role": "user", "content": [ { "type": "tool_result", "tool_use_id": "toolu_01CswdEQBMshySk6Y9DFKrfq", "content": "Current temperature: 88°F" } ] } ] }

API 响应现在仅包含文本

{ "content": [ { "type": "text", "text": "Currently in Paris, the temperature is 88°F (31°C)" } ] }

保留思考单元

在工具使用期间,您必须将思考单元传回 API,并且必须包含完整的未修改单元来传回 API。这对于维护模型的推理流和对话的完整性至关重要。

提示

虽然您可以忽略先前 assistant 角色回合中的 thinking 单元,但对于任何多回合对话,我们建议始终将所有思考单元传回 API。API 会执行以下操作:

  • 自动筛选提供的思考单元

  • 使用必要的相关思考单元来保留模型的推理

  • 仅对向 Claude 显示的单元的输入词元计费

当 Claude 调用工具时,它会暂停构造响应来等待外部信息。工具结果返回后,Claude 将继续构建现有响应。这就需要在工具使用期间保留思考单元,原因如下:

  • 推理连续性:思维块捕获Claude了导致工具请求的 step-by-step推理。当您发布工具结果时,包括最初的思考可确保 Claude 能够从上次停下来的地方继续推理。

  • 上下文维护:虽然工具结果在 API 结构中显示为用户消息,但它们是持续推理流的一部分。保留思考单元可以在多个 API 调用之间保持这种概念流。

重要

在提供思考单元时,连续思考单元的完整序列必须与模型在原始请求期间生成的输出相匹配;您不能重新排列或修改这些单元的顺序。

交替思考(测试版)

警告

根据服务条款的定义,交错思维作为 “测试版服务” 提供给您。AWS它受您的协议和AWS服务条款AWS以及适用的 EULA 范本的约束。

Claude 4 模型支持交替思考,该功能使得 Claude 可在多次工具调用之间进行思考,并在收到工具结果后运行更精密的推理。这实现了更复杂的代理式交互,其中 Claude 可以执行以下操作:

  • 在决定下一步操作之前,说明导致工具调用结果的原因

  • 将多个工具调用与其间的推理步骤串联起来

  • 根据中间结果做出更细致的决定

要启用交替思考,请在您的 API 请求中添加测试版标头 interleaved-thinking-2025-05-14

注意

在交替思考中,budget_tokens 可以超过 max_tokens 参数,因为前者代表了一个助手回合内所有思考单元的总预算。

思维区块清除(测试版)

警告

根据服务条款的定义,思维区块清除作为 “测试版AWS服务” 提供。

注意

Claude Sonnet 4.5、Claude Haiku 4.5 和 Claude Opus 4.5 目前支持此功能。将在 2026 年 1 月 15 日之前增加对 Claude Opus 4、Claude Opus 4.1 和 Claude Sonnet 4 的支持。

思考方块清除是 Anthropic Claude 模型的一项功能(测试版)。有了这个功能,克劳德可以自动清除之前回合中较旧的思维障碍。要使用 Thinking 区块清除功能,你context-management-2025-06-27需要在 anthropic_beta 请求参数上添加到测试版标头列表中。您还需要指定以下配置选项的用法clear_thinking_20251015并从中进行选择。

以下是 clear_thinking_20251015 上下文管理策略的可用控制项。所有控制项均为可选配置,或具有默认值:

配置选项 描述

keep

默认:1 个思考转弯

定义最近有多少助手使用思维方块进行保存。在 N 必须大于 0 {"type": "thinking_turns", "value": N} 的地方使用以保持最后 N 回合,或者{"type": "all"}保留所有思维方块。

Request
{ "anthropic_version": "bedrock-2023-05-31", "max_tokens": 10000, "anthropic_beta": [ "context-management-2025-06-27" ], "thinking": { "type": "enabled", "budget_tokens": 4000 }, "tools": [ { "name": "get_weather", "description": "Get current weather for a location", "input_schema": { "type": "object", "properties": { "location": { "type": "string" } }, "required": [ "location" ] } } ], "messages": [ { "role": "user", "content": "What's the weather in Paris?" }, { "role": "assistant", "content": [ { "type": "thinking", "thinking": "The user is asking for the weather in Paris. I have access to a get_weather function that takes a location as a parameter. I have all the information I need to make this call - the location is \"Paris\".\n\nLet me call the get_weather function with \"Paris\" as the location.", "signature": "ErgDCkgIChABGAIqQC/Ccv8GC+5VfcMEiq78XmpU2Ef2cT+96pHKMedKcRNuPz1x0kFlo5HBpW0r1NcQFVQUPuj6PDmP7jdHY7GsrUwSDKNBMogjaM7wYkwfPhoMswjlmfF09JLjZfFlIjB03NkghGOxLbr3VCQHIY0lMaV9UBvt7ZwTpJKzlz+mulBysfvAmDfcnvdJ/6CZre4qnQJsTZaiXdEgASwPIc5jOExBguerrtYSWVC/oPjSi7KZM8PfhP/SPXupyLi8hwYxeqomqkeG7AQhD+3487ecerZJcpJSOSsf0I1OaMpmQEE/b7ehnvTV/A4nLhxIjP4msyIBW+dVwHNFRFlpJLBHUJvN99b4run6YmqBSf4y9TyNMfOr+FtfxedGE0HfJMBd4FHXmUFyW5y91jAHMWqwNxDgacaKkFCAMaqce5rm0ShOxXn1uwDUAS3jeRP26Pynihq8fw5DQwlqOpo7vvXtqb5jjiCmqfOe6un5xeIdhhbzWddhEk1Vmtg7I817pM4MZjVaeQN02drPs8QgDxihnP6ZooGhd6FCBP2X3Ymdlj5zMlbVHxmSkA4wcNtg4IAYAQ==" }, { "type": "tool_use", "id": "toolu_bdrk_01U7emCvL5v5z5GT7PDr2vzc", "name": "get_weather", "input": { "location": "Paris" } } ] }, { "role": "user", "content": [ { "type": "tool_result", "tool_use_id": "toolu_bdrk_01U7emCvL5v5z5GT7PDr2vzc", "content": "Current temperature: 88°F" } ] } ], "context_management": { "edits": [ { "type": "clear_thinking_20251015", "keep": { "type": "thinking_turns", "value": 1 } } ] } }
Response
{ "model": "claude-haiku-4-5-20251001", "id": "msg_bdrk_01KyTbyFbdG2kzPwWMJY1kum", "type": "message", "role": "assistant", "content": [ { "type": "text", "text": "The current weather in Paris is **88°F** (approximately 31°C). It's quite warm! If you need more detailed information like humidity, wind conditions, or a forecast, please let me know." } ], "stop_reason": "end_turn", "stop_sequence": null, "usage": { "input_tokens": 736, "cache_creation_input_tokens": 0, "cache_read_input_tokens": 0, "cache_creation": { "ephemeral_5m_input_tokens": 0, "ephemeral_1h_input_tokens": 0 }, "output_tokens": 47 }, "context_management": { "applied_edits": [...] } }

延伸思考结合提示缓存

提示缓存与思考结合使用时,有几个重要的注意事项:

思考单元上下文移除

  • 从上下文中移除了之前回合中的思考单元,这可能会影响缓存断点。

  • 通过工具使用继续对话时,思考单元会被缓存,从缓存中读取时会计为输入词元。这会造成一种权衡,即思考单元表面上不会消耗上下文窗口空间,但在使用缓存时,仍会计入您的输入词元使用量。

  • 在禁用了思考时,如果您在当前的工具使用回合中传递思考内容,则请求将失败。在其他上下文中,传递给 API 的思考内容直接被忽略。

缓存失效模式

  • 更改思考参数(例如启用、禁用或更改预算分配)会导致消息缓存断点失效。

  • 交替思考(测试版)会加剧缓存失效的影响,因为思考单元会出现在多个工具调用之间。

  • 尽管思考参数发生更改或者单元被移除,但仍会缓存系统提示和工具。

注意

虽然从缓存和上下文计算中移除了思考单元,但在通过工具使用继续进行对话时,尤其是在交替思考时,必须保留这些单元。

了解思考单元缓存行为

将延伸思考与工具使用结合时,思考单元会表现出影响词元计数的特定缓存行为。以下序列演示其工作原理。

  1. 只有在您发出包含工具结果的后续请求时,才会进行缓存。

  2. 发出后续请求时,可以缓存之前的对话历史记录(包括思考单元)。

  3. 从缓存中读取这些缓存的思考单元时,在您的使用量指标中,会将其作为输入词元计数。

  4. 当包含 non-tool-result用户区块时,之前的所有思考方块都将被忽略并从上下文中删除。

以下是详细的示例流程:

请求 1:

User: "What's the weather in Paris?"

响应 1:

[thinking_block 1] + [tool_use block 1]

请求 2:

User: "What's the weather in Paris?", Assistant: [thinking_block_1] + [tool_use block 1], User: [tool_result_1, cache=True]

响应 2:

[thinking_block 2] + [text block 2]

请求 2 写入请求内容(不是响应)的缓存。缓存包括原始用户消息、第一个思考单元、工具使用单元和工具结果。

请求 3:

User: ["What's the weather in Paris?"], Assistant: [thinking_block_1] + [tool_use block 1], User: [tool_result_1, cache=True], Assistant: [thinking_block_2] + [text block 2], User: [Text response, cache=True]

由于包含了 non-tool-result用户方块,因此之前的所有思考方块都将被忽略。此请求的处理方式将与以下请求相同:

请求 3 交替:

User: ["What's the weather in Paris?"] Assistant: [tool_use block 1] User: [tool_result_1, cache=True] Assistant: [text block 2] User: [Text response, cache=True]

无论是使用常规思考还是交替思考,此行为都是一致的。

延伸思考的最大词元数和上下文窗口大小

在较早的 Claude 模型中(Claude 3.7 Sonnet 之前),如果提示词元数和 max_tokens 的总和超过模型的上下文窗口,系统将自动调整 max_tokens 以适应上下文限制。这意味着您可以设置一个较大的 max_tokens 值,系统会根据需要以静默方式减少该值。在 Claude 3.7 和 4 模型中,将 max_tokens(其中包括启用思考时的思考预算)作为严格限制来实施。现在,如果提示词元数加上 max_tokens 的值超过上下文窗口大小,系统会返回验证错误。

延伸思考的上下文窗口

在启用思考的情况下计算上下文窗口使用情况时,需要记住一些注意事项:

  • 上一个回合中的思考单元会被移除,不计入您的上下文窗口。

  • 当前回合的思考会计入您在该回合中的 max_tokens 限额。

有效的上下文窗口的计算公式为:上下文窗口 =(当前输入词元数 - 之前的思考词元数)+(思考词元数 + 加密思考词元数 + 文本输出词元数)。

管理延伸思考和工具使用的词元

将延伸思考与工具使用结合起来时,必须明确保留思考单元并与工具结果一起返回。对于延伸思考和工具使用,有效的上下文窗口的计算如下:

context window = (current input tokens + previous thinking tokens + tool use tokens) + (thinking tokens + encrypted thinking tokens + text output tokens)

管理延伸思考的词元

考虑到上下文窗口和 Claude 3.7 和 4 模型对于延伸思考的 max_tokens 行为,您可能需要执行以下操作之一:

  • 更积极地监控和管理词元使用情况。

  • 随着提示长度的变化,调整 max_tokens 数值。

  • 请注意,以前的思考单元不会在上下文窗口中累积。进行此更改是为了提供更可预测和更透明的行为,尤其是在最大词元限制有大幅增长的情况下。

延伸思考词元成本注意事项

在思考过程中,以下项会产生费用:

  • 思考期间使用的词元(输出词元)

  • 后续请求中包含的上一个助手回合中的思考单元(输入词元)

  • 标准文本输出词元

提示

启用延伸思考后,将自动包含专门的 28 或 29 词元系统提示来支持此功能。

budget_tokens 参数决定了 Claude 允许在其内部推理过程中使用的最大词元数。较大的预算可以对复杂问题进行更彻底的分析,从而提高响应质量,尽管 Claude 可能不会使用分配的全部预算,尤其是在预算范围超出 3.2 万时。

在交替思考中,budget_tokens 可以超过 max_tokens 参数,因为前者代表了一个助手回合内所有思考单元的总预算。

使用汇总思考时,请记住以下信息:

  • 输入词元:您的原始请求中的词元数。

  • 输出词元(计费):Claude 内部生成的原始思考词元数

  • 输出词元(可见):您在响应中看到的汇总思考词元数

  • 无费用:用于生成摘要的词元数

  • summary_status 字段可以指示词元限制是否影响汇总

  • 计费的输出词元数量与响应中的可见词元数量不会匹配。您需要为完整的思考过程付费,而不是看到的摘要。