延伸思考為 Claude 提供了增強的推理能力,用於處理複雜任務,同時在提供最終答案之前提供不同程度的透明度,讓您了解其逐步思考過程。
延伸思考在以下模型中受支援:
claude-sonnet-4-5-20250929)claude-sonnet-4-20250514)claude-3-7-sonnet-20250219) (已棄用)claude-haiku-4-5-20251001)claude-opus-4-5-20251101)claude-opus-4-1-20250805)claude-opus-4-20250514)API 行為在 Claude Sonnet 3.7 和 Claude 4 模型之間有所不同,但 API 形狀保持完全相同。
如需更多資訊,請參閱不同模型版本之間的思考差異。
啟用延伸思考後,Claude 會建立 thinking 內容區塊,其中輸出其內部推理。Claude 在製作最終回應之前會納入此推理中的見解。
API 回應將包括 thinking 內容區塊,後面跟著 text 內容區塊。
以下是預設回應格式的範例:
{
"content": [
{
"type": "thinking",
"thinking": "讓我逐步分析這個...",
"signature": "WaUjzkypQ2mUEVM36O2TxuC06KN8xyfbJwyem2dw3URve/op91XWHOEBLLqIOMfFG/UvLEczmEsUjavL...."
},
{
"type": "text",
"text": "根據我的分析..."
}
]
}如需更多關於延伸思考回應格式的資訊,請參閱訊息 API 參考。
以下是在訊息 API 中使用延伸思考的範例:
curl https://api.anthropic.com/v1/messages \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "content-type: application/json" \
--data \
'{
"model": "claude-sonnet-4-5",
"max_tokens": 16000,
"thinking": {
"type": "enabled",
"budget_tokens": 10000
},
"messages": [
{
"role": "user",
"content": "是否存在無限多個質數使得 n mod 4 == 3?"
}
]
}'若要啟用延伸思考,請新增 thinking 物件,將 type 參數設定為 enabled,並將 budget_tokens 設定為延伸思考的指定代幣預算。
budget_tokens 參數決定了 Claude 被允許用於其內部推理過程的最大代幣數。在 Claude 4 模型中,此限制適用於完整思考代幣,而不適用於摘要輸出。較大的預算可以透過為複雜問題啟用更徹底的分析來改善回應品質,儘管 Claude 可能不會使用整個分配的預算,特別是在 32k 以上的範圍內。
budget_tokens 必須設定為小於 max_tokens 的值。但是,當使用與工具交錯的思考時,您可以超過此限制,因為代幣限制變成您的整個上下文視窗(200k 代幣)。
啟用延伸思考後,Claude 4 模型的訊息 API 會傳回 Claude 完整思考過程的摘要。摘要思考提供了延伸思考的完整智能優勢,同時防止濫用。
以下是摘要思考的一些重要考慮事項:
Claude Sonnet 3.7 繼續傳回完整思考輸出。
在罕見情況下,如果您需要存取 Claude 4 模型的完整思考輸出,請聯絡我們的銷售團隊。
您可以使用伺服器發送事件 (SSE) 流式傳輸延伸思考回應。
啟用延伸思考的流式傳輸後,您會透過 thinking_delta 事件接收思考內容。
如需更多關於透過訊息 API 進行流式傳輸的文件,請參閱流式傳輸訊息。
以下是如何處理思考流式傳輸的方法:
curl https://api.anthropic.com/v1/messages \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "content-type: application/json" \
--data \
'{
"model": "claude-sonnet-4-5",
"max_tokens": 16000,
"stream": true,
"thinking": {
"type": "enabled",
"budget_tokens": 10000
},
"messages": [
{
"role": "user",
"content": "27 * 453 是多少?"
}
]
}'範例流式傳輸輸出:
event: message_start
data: {"type": "message_start", "message": {"id": "msg_01...", "type": "message", "role": "assistant", "content": [], "model": "claude-sonnet-4-5", "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": "讓我逐步解決這個問題:\n\n1. 首先分解 27 * 453"}}
event: content_block_delta
data: {"type": "content_block_delta", "index": 0, "delta": {"type": "thinking_delta", "thinking": "\n2. 453 = 400 + 50 + 3"}}
// 其他思考 delta...
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"}}
// 其他文字 delta...
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"}使用啟用思考的流式傳輸時,您可能會注意到文字有時以較大的區塊到達,交替使用較小的逐代幣傳遞。這是預期的行為,特別是對於思考內容。
流式傳輸系統需要分批處理內容以獲得最佳效能,這可能導致這種「分塊」傳遞模式,流式傳輸事件之間可能會有延遲。我們正在持續努力改進此體驗,未來的更新將專注於使思考內容流式傳輸更順暢。
延伸思考可以與工具使用一起使用,允許 Claude 透過工具選擇和結果處理進行推理。
使用延伸思考與工具使用時,請注意以下限制:
工具選擇限制:具有思考的工具使用僅支援 tool_choice: {"type": "auto"} (預設) 或 tool_choice: {"type": "none"}。使用 tool_choice: {"type": "any"} 或 tool_choice: {"type": "tool", "name": "..."} 將導致錯誤,因為這些選項強制工具使用,與延伸思考不相容。
保留思考區塊:在工具使用期間,您必須將 thinking 區塊傳回 API 以供最後的助手訊息。將完整的未修改區塊傳回 API 以維持推理連續性。
您無法在助手回合中途切換思考,包括在工具使用迴圈期間。整個助手回合必須在單一思考模式中運作:
從模型的角度來看,工具使用迴圈是助手回合的一部分。助手回合在 Claude 完成其完整回應之前不會完成,這可能包括多個工具呼叫和結果。
例如,此序列全部是單一助手回合的一部分:
使用者:"巴黎的天氣如何?"
助手:[思考] + [tool_use: get_weather]
使用者:[tool_result: "20°C,晴天"]
助手:[文字:"巴黎的天氣是 20°C 和晴天"]儘管有多個 API 訊息,工具使用迴圈在概念上是一個連續助手回應的一部分。
您可能會遇到此錯誤:
預期 `thinking` 或 `redacted_thinking`,但找到 `tool_use`。
啟用 `thinking` 時,最終 `assistant` 訊息必須以思考區塊開始
(在最後一組 `tool_use` 和 `tool_result` 區塊之前)。這通常發生在以下情況:
✗ 無效:在工具使用後立即切換思考
使用者:"天氣如何?"
助手:[tool_use] (思考已停用)
使用者:[tool_result]
// 無法在此啟用思考 - 仍在同一助手回合中✓ 有效:先完成助手回合
使用者:"天氣如何?"
助手:[tool_use] (思考已停用)
使用者:[tool_result]
助手:[文字:"天氣晴朗"]
使用者:"明天呢?" (思考已停用)
助手:[思考] + [文字:"..."] (思考已啟用 - 新回合)最佳實踐:在每個回合開始時規劃您的思考策略,而不是嘗試在中途切換。
切換思考模式也會使提示快取對訊息歷史記錄無效。如需更多詳細資訊,請參閱延伸思考與提示快取部分。
在工具使用期間,您必須將 thinking 區塊傳回 API,並且必須將完整的未修改區塊傳回 API。這對於維持模型的推理流程和對話完整性至關重要。
雖然您可以從先前的 assistant 角色回合中省略 thinking 區塊,但我們建議始終將所有思考區塊傳回 API 以進行任何多回合對話。API 將:
在對話期間切換思考模式時,請記住整個助手回合(包括工具使用迴圈)必須在單一思考模式中運作。如需更多詳細資訊,請參閱在對話中切換思考模式。
當 Claude 呼叫工具時,它會暫停其回應的構建以等待外部資訊。當工具結果返回時,Claude 將繼續構建該現有回應。這需要在工具使用期間保留思考區塊,原因有幾個:
推理連續性:思考區塊捕捉了導致工具請求的 Claude 逐步推理。當您發佈工具結果時,包括原始思考可確保 Claude 能夠從中斷的地方繼續其推理。
上下文維護:雖然工具結果在 API 結構中顯示為使用者訊息,但它們是連續推理流程的一部分。保留思考區塊可在多個 API 呼叫中維持此概念流程。如需更多關於上下文管理的資訊,請參閱我們的上下文視窗指南。
重要:提供 thinking 區塊時,連續 thinking 區塊的整個序列必須符合模型在原始請求期間產生的輸出;您無法重新排列或修改這些區塊的序列。
Claude 4 模型中的擴展思考與工具使用支持交錯思考,這使 Claude 能夠在工具調用之間進行思考,並在接收工具結果後進行更複雜的推理。
通過交錯思考,Claude 可以:
要啟用交錯思考,請將測試版標頭 interleaved-thinking-2025-05-14 添加到您的 API 請求中。
以下是交錯思考的一些重要考慮事項:
budget_tokens 可以超過 max_tokens 參數,因為它代表一個助手轉向內所有思考塊的總預算。interleaved-thinking-2025-05-14。interleaved-thinking-2025-05-14,無任何效果。interleaved-thinking-2025-05-14 傳遞給除 Claude Opus 4.5、Claude Opus 4.1、Opus 4 或 Sonnet 4 之外的任何模型,您的請求將失敗。提示詞快取與思考有幾個重要的考慮事項:
擴展思考任務通常需要超過 5 分鐘才能完成。考慮使用1 小時快取持續時間來在較長的思考會話和多步工作流中維持快取命中。
思考塊上下文移除
快取失效模式
使用擴展思考與工具使用時,思考塊表現出特定的快取行為,影響令牌計數:
工作原理:
詳細示例流程:
請求 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]對於 Claude Opus 4.5 及更高版本,默認情況下保留所有先前的思考塊。對於較舊的模型,因為包含了非工具結果用戶塊,所有先前的思考塊都被忽略。此請求將按以下方式處理:
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]關鍵要點:
cache_control 標記在較舊的 Claude 模型中(Claude Sonnet 3.7 之前),如果提示令牌和 max_tokens 的總和超過模型的上下文窗口,系統會自動調整 max_tokens 以適應上下文限制。這意味著您可以設置一個大的 max_tokens 值,系統會根據需要自動減少它。
使用 Claude 3.7 和 4 模型,max_tokens(啟用思考時包括您的思考預算)被強制執行為嚴格限制。如果提示令牌 + max_tokens 超過上下文窗口大小,系統現在將返回驗證錯誤。
您可以閱讀我們的上下文窗口指南以進行更深入的探討。
使用啟用思考的上下文窗口計算時,有一些需要注意的考慮事項:
max_tokens 限制下圖演示了啟用擴展思考時的專門令牌管理:
有效的上下文窗口計算為:
context window =
(current input tokens - previous thinking tokens) +
(thinking tokens + encrypted thinking tokens + text output tokens)我們建議使用令牌計數 API為您的特定用例獲得準確的令牌計數,特別是在使用包含思考的多轉對話時。
使用擴展思考與工具使用時,思考塊必須明確保留並與工具結果一起返回。
使用擴展思考和工具使用的有效上下文窗口計算變為:
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 值進行此更改是為了提供更可預測和透明的行為,特別是隨著最大令牌限制的顯著增加。
完整的思考內容被加密並在 signature 字段中返回。此字段用於驗證思考塊是由 Claude 生成的,當傳遞回 API 時。
只有在使用帶有擴展思考的工具時,才嚴格需要發送回思考塊。否則,您可以省略先前轉向的思考塊,或讓 API 在您傳遞它們時為您移除它們。
如果發送回思考塊,我們建議按照您接收的方式傳遞所有內容以保持一致性並避免潛在問題。
以下是關於思考加密的一些重要考慮事項:
content_block_delta 事件內的 signature_delta 添加,就在 content_block_stop 事件之前。signature 值在 Claude 4 模型中的長度明顯長於先前的模型。signature 字段是一個不透明字段,不應被解釋或解析 - 它僅用於驗證目的。signature 值在平台之間兼容(Claude API、Amazon Bedrock 和 Vertex AI)。在一個平台上生成的值將與另一個平台兼容。偶爾 Claude 的內部推理會被我們的安全系統標記。當這種情況發生時,我們會加密 thinking 區塊的部分或全部內容,並將其作為 redacted_thinking 區塊返回給您。redacted_thinking 區塊在傳回 API 時會被解密,允許 Claude 繼續其回應而不會失去上下文。
在構建使用擴展思考的面向客戶的應用程式時:
以下是顯示正常和 redacted thinking 區塊的範例:
{
"content": [
{
"type": "thinking",
"thinking": "Let me analyze this step by step...",
"signature": "WaUjzkypQ2mUEVM36O2TxuC06KN8xyfbJwyem2dw3URve/op91XWHOEBLLqIOMfFG/UvLEczmEsUjavL...."
},
{
"type": "redacted_thinking",
"data": "EmwKAhgBEgy3va3pzix/LafPsn4aDFIT2Xlxh0L5L8rLVyIwxtE3rAFBa8cr3qpPkNRj2YfWXGmKDxH4mPnZ5sQ7vB9URj2pLmN3kF8/dW5hR7xJ0aP1oLs9yTcMnKVf2wRpEGjH9XZaBt4UvDcPrQ..."
},
{
"type": "text",
"text": "Based on my analysis..."
}
]
}在您的輸出中看到 redacted thinking 區塊是預期的行為。該模型仍然可以使用此 redacted 推理來通知其回應,同時維持安全護欄。
如果您需要在應用程式中測試 redacted thinking 處理,可以使用此特殊測試字串作為您的提示: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 模型(Opus 4.5 之前) | Claude Opus 4.5 及更新版本 |
|---|---|---|---|
| 思考輸出 | 返回完整思考輸出 | 返回摘要思考 | 返回摘要思考 |
| 交錯思考 | 不支援 | 支援 interleaved-thinking-2025-05-14 beta 標頭 | 支援 interleaved-thinking-2025-05-14 beta 標頭 |
| 思考區塊保留 | 不在回合間保留 | 不在回合間保留 | 預設保留(啟用快取最佳化、節省代幣) |
Claude Opus 4.5 引入了新的預設行為:來自先前助手回合的思考區塊預設在模型上下文中保留。這與早期模型不同,早期模型會移除先前回合的思考區塊。
思考區塊保留的優點:
重要考慮事項:
對於早期模型(Claude Sonnet 4.5、Opus 4.1 等),來自先前回合的思考區塊繼續從上下文中移除。使用提示快取的擴展思考部分中描述的現有行為適用於這些模型。
如需完整的定價資訊,包括基本費率、快取寫入、快取命中和輸出代幣,請參閱定價頁面。
思考過程產生的費用包括:
啟用擴展思考時,會自動包含專門的系統提示以支援此功能。
使用摘要思考時:
計費的輸出代幣計數將不與回應中的可見代幣計數相符。您需要為完整的思考過程付費,而不是您看到的摘要。
max_tokens 大於 21,333 時,需要串流。串流時,請準備好在思考和文字內容區塊到達時處理它們。temperature 或 top_k 修改以及強制工具使用不相容。top_p 設定為 1 到 0.95 之間的值。