一個單次回應的模型必須在第一次嘗試時就完全正確:沒有草稿、沒有檢查、無法在中途改變方向。對於證明題、棘手的錯誤或長時間的代理任務而言,第一個方法往往不是最好的方法。
思考功能消除了這個限制。當思考功能啟用時,Claude 會在回答之前用自己的話來處理問題:它會重述被問到的內容、嘗試不同方法、檢查中間結果,並放棄行不通的路徑。這些推理會以 thinking 內容區塊的形式出現在回應之前,Claude 會依據這些推理來產生最終答案。這就是為什麼思考功能能提升數學、程式設計、分析和長時間代理工作等複雜任務的表現,因為這些任務的答案品質取決於中間工作,而這些工作原本會被壓縮到回應本身中或被跳過。
思考是有成本的:Claude 用於推理的 token 會以輸出 token 計費,即使思考文字沒有回傳給您,這些 token 也會與回應文字一起計入 max_tokens。本頁面涵蓋思考在 API 介面上的行為:如何開啟、讀取其輸出,以及管理它與工具、串流、快取和上下文視窗的互動。
Claude 是否對特定請求進行思考,以及思考的深度,取決於您的思考設定和請求的複雜度。
以下是回應中思考的樣貌:一個或多個 thinking 內容區塊會在 text 區塊之前到達。思考區塊仍然是生成的內容,就像隨後的 text 區塊一樣,但它與正式回應是分開的。每個思考區塊還帶有一個 signature 欄位,這是完整推理的加密副本,您需要在多輪對話和工具使用對話中原封不動地傳回(請參閱思考加密):
{
"content": [
{
"type": "thinking",
"thinking": "Let me break this down. The question has two parts, so I'll start with the simpler one and use its result to constrain the second...",
"signature": "WaUjzkypQ2mUEVM36O2Txu...."
},
{
"type": "text",
"text": "Based on my analysis..."
}
]
}您不一定會看到這些文字,而且您看到的永遠不是原始的思維鏈:思考區塊中的文字是 Claude 推理的摘要。思考設定上的 display 欄位控制是否回傳該摘要:"summarized" 會回傳摘要,而 "omitted"(最新模型的預設值)會回傳 thinking 欄位為空的思考區塊。無論哪種方式,區塊的計費方式相同,在多輪對話中傳回的方式也相同。請參閱控制思考顯示以了解各模型的預設值和詳細資訊。
如果 Claude 使用工具,思考也可能出現在工具呼叫之間。請參閱思考與工具使用。有關完整的回應格式,請參閱 Messages API 參考文件。
在目前的模型上,思考預設為開啟,或只需一個參數即可開啟。每個模型接受的設定及其預設值,列於疑難排解頁面的各模型設定表中。
在 Claude Opus 5、Claude Sonnet 5、Claude Fable 5、Claude Mythos 5 和 Claude Mythos Preview 上,思考已經開啟:無需設定。大多數開發人員在這些模型上首先需要的是看到思考文字,因為這些模型的 display 預設為 "omitted"。使用 thinking: {"type": "adaptive", "display": "summarized"} 來選擇加入,這正是以下請求,只需替換模型字串即可。
在 Claude Opus 4.8、Claude Opus 4.7、Claude Opus 4.6 和 Claude Sonnet 4.6 上,思考是關閉的,直到您設定 thinking: {type: "adaptive"},這讓 Claude 根據請求決定何時以及多深入地思考。以下範例執行此操作,設定 display: "summarized" 以便看到思考文字,並使用寬裕的 max_tokens:
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=16000,
thinking={"type": "adaptive", "display": "summarized"},
messages=[
{
"role": "user",
"content": "What is the greatest common divisor of 1071 and 462?",
}
],
)
for block in response.content:
if block.type == "thinking":
print(f"\nThinking: {block.thinking}")
elif block.type == "text":
print(f"\nResponse: {block.text}")執行此範例會先印出摘要的思考內容,然後是答案:
Thinking: Use Euclidean algorithm.
1071 = 2*462 + 147
462 = 3*147 + 21
147 = 7*21 + 0
GCD = 21
Response: ## Finding GCD of 1071 and 462
I'll use the **Euclidean algorithm**, repeatedly dividing and taking remainders...思考 token 會計入 max_tokens,因此請將其設定得足夠高,以便為思考和回應文字都留出空間。請參閱調整頁面上的成本控制以及思考與上下文視窗。
在 Claude Sonnet 5 上,思考預設為開啟,您可以將其關閉:
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=4096,
thinking={"type": "disabled"},
messages=[{"role": "user", "content": "Summarize this article in one sentence."}],
)Claude Opus 5 的思考也預設為開啟,並在 effort 為 high 或以下時接受 thinking: {type: "disabled"}。在 xhigh 或 max effort 下,思考無法關閉:將 thinking: {type: "disabled"} 與這些 effort 等級結合的請求會回傳 400 錯誤。此限制適用於 Claude Opus 5 及更新的模型,並在每個請求上強制執行。停用思考時,Claude Opus 5 偶爾會將工具呼叫以純文字形式輸出,或在其可見輸出中包含內部 XML 標籤。請參閱在停用思考的情況下執行以了解提示緩解方法。
Claude Fable 5、Claude Mythos 5 和 Claude Mythos Preview 會拒絕 thinking: {type: "disabled"}:這些模型無法關閉思考。
如果您的模型僅支援擴展思考(請參閱各模型設定表),請改用 type: "enabled" 和 budget_tokens 值來設定。擴展思考頁面涵蓋該設定。如果任何思考設定回傳 400 錯誤,思考疑難排解會將每個錯誤訊息對應到其修正方法。
思考設定上的 display 欄位控制思考內容在 API 回應中的回傳方式。display 在兩種模式下都有效:可與 type: "adaptive" 或 type: "enabled" 一起設定。它接受兩個值:
"summarized":思考區塊包含摘要思考文字,這是 Claude 推理的可讀摘要。這是 Claude Opus 4.6、Claude Sonnet 4.6 及更早模型的預設值。"omitted":思考區塊回傳時 thinking 欄位為空。signature 欄位仍帶有加密的完整思考內容,以維持多輪對話的連續性(請參閱思考加密)。這是 Claude Fable 5、Claude Mythos 5、Claude Opus 5、Claude Sonnet 5、Claude Opus 4.8、Claude Opus 4.7 和 Claude Mythos Preview 的預設值。當您的應用程式不向使用者顯示思考內容時,請設定 display: "omitted"。主要好處是串流時更快獲得第一個文字 token:伺服器完全跳過串流思考 token,只傳遞簽章,因此最終文字回應會更快開始串流。
使用 display: "omitted" 時,回應包含 thinking 欄位為空的 thinking 區塊:
{
"content": [
{
"type": "thinking",
"thinking": "",
"signature": "EosnCkYICxIMMb3LzNrMu..."
},
{
"type": "text",
"text": "The answer is 12,231."
}
]
}使用省略思考時,請記住以下幾點:
signature 以重建原始思考內容來建構提示(請參閱保留思考區塊)。您放在往返省略區塊的 thinking 欄位中的任何文字都會被忽略。display 與 thinking.type: "disabled" 一起使用時無效(沒有內容可顯示)。thinking.type: "adaptive" 且模型對簡單請求跳過思考時,無論 display 為何,都不會產生思考區塊。display: "omitted" 進行串流時,不會發出 thinking_delta 事件。請參閱串流思考以了解事件序列。在 Ruby SDK 中,純雜湊(hash)使用 display:,如範例所示。型別化的 ThinkingConfigAdaptive 類別將參數命名為 display_(尾隨底線,以避免遮蔽 Ruby 的 Kernel#display)。無論哪種方式,傳輸欄位仍然是 display。
當 display 為 "summarized" 時,您收到的思考文字是 Claude 完整思考過程的摘要,而非原始的思維鏈。摘要思考提供思考的完整智慧優勢,同時防止濫用。沒有任何 display 設定會回傳原始的思維鏈。
使用摘要思考時,請記住以下幾點:
思考可與串流搭配使用。思考區塊以 content_block_delta 事件內的 thinking_delta 事件形式串流,隨後在區塊的 content_block_stop 之前有一個單一的 signature_delta 事件。文字區塊之後照常串流。
以下範例使用自適應思考串流回應,在思考和文字 delta 到達時印出:
client = anthropic.Anthropic()
with client.messages.stream(
model="claude-opus-4-8",
max_tokens=16000,
thinking={"type": "adaptive", "display": "summarized"},
messages=[
{
"role": "user",
"content": "What is the greatest common divisor of 1071 and 462?",
}
],
) as stream:
for event in stream:
if event.type == "content_block_start":
print(f"\nStarting {event.content_block.type} block...")
elif event.type == "content_block_delta":
if event.delta.type == "thinking_delta":
print(event.delta.thinking, end="", flush=True)
elif event.delta.type == "text_delta":
print(event.delta.text, end="", flush=True)若要在串流後重新組裝帶有簽章的完整思考區塊,請使用您的 SDK 的訊息累積輔助函式(如果有的話,例如 Python 中的 stream.get_final_message() 或 TypeScript 中的 stream.finalMessage()),而不是自行串接 delta。
設定 display: "omitted" 時,思考區塊開啟,單一 signature_delta 到達,區塊關閉而沒有任何 thinking_delta 事件。文字串流隨即開始:
event: content_block_start
data: {"type":"content_block_start","index":0,"content_block":{"type":"thinking","thinking":"","signature":""}}
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"signature_delta","signature":"EosnCkYICxIMMb3LzNrMu..."}}
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":""}}有關一般串流機制,請參閱串流訊息。
thinking 參數控制 Claude 是否在回答前於思考區塊中進行思考;effort 參數控制 Claude 在整個回應中投入多少工作量,在 adaptive 模式下,這包括思考的頻率和深度。請勿將 adaptive 作為 effort 的值傳入:adaptive 是一種思考模式,而不是一個工作量等級。
有關每個 effort 等級對思考行為的影響,請參閱調整思考頁面上的各等級思考行為表。Effort 頁面記錄了參數本身,包括每個模型支援的等級。在 Claude Opus 4.5(唯一支援 effort 的僅限擴展思考模型)上,effort 與 budget_tokens 組合使用。請參閱預算規則與調整。
將這兩個控制項分開後,請選擇符合您目標的控制項:
effort。它會縮減整個回應,包括思考。effort,或參閱調整頁面上的調整 Claude 思考頻率。thinking: {type: "disabled"}(請參閱各模型設定表)。max_tokens。Effort 是軟性指引。max_tokens 是嚴格限制。思考可與工具使用搭配使用,讓 Claude 推理工具選擇並處理工具結果。有兩個限制:
thinking: {type: "enabled"})的工具使用僅支援 tool_choice: {"type": "auto"}(預設值)或 tool_choice: {"type": "none"}。使用 tool_choice: {"type": "any"} 或 tool_choice: {"type": "tool", "name": "..."} 會導致錯誤,因為這些選項強制使用工具,這與手動擴展思考不相容。自適應思考(包括在思考預設為開啟的模型上)支援強制工具使用。**一個工具使用迴圈是一個助理輪次。**從模型的角度來看,助理輪次在 Claude 完成其完整回應之前不會結束,這可能包括多個工具呼叫和結果。整個序列是單一助理輪次:
User: "What's the weather in Paris?"
Assistant: [thinking] + [tool_use: get_weather]
User: [tool_result: "20°C, sunny"]
Assistant: [text: "The weather in Paris is 20°C and sunny"]整個輪次在單一思考模式下執行:您無法在輪次中途切換思考,包括在工具使用迴圈期間。在擴展(手動)模式下,API 還強制要求啟用思考的請求的最後一個助理輪次以思考區塊開始。自適應模式放寬了這一點:沒有任何助理輪次需要以思考區塊開始。
**輪次中途的衝突會優雅降級。**如果您在輪次中途切換思考(例如,在發送工具呼叫和回傳其結果之間),API 不會報錯。相反,它會靜默地為該請求停用思考。為了保持模型品質,API 可能會移除會造成無效輪次結構的思考區塊,或在對話歷史與啟用思考不相容時停用思考。若要確認思考是否處於啟用狀態,請檢查回應中是否存在 thinking 區塊。
**在輪次之間切換,而非在輪次內切換。**在每個輪次開始時規劃您的思考策略。完成助理輪次,然後為下一個輪次變更思考設定:
User: "What's the weather?"
Assistant: [tool_use] (thinking disabled)
User: [tool_result]
Assistant: [text: "It's sunny"]
User: "What about tomorrow?"
Assistant: [thinking] + [text: "..."] (thinking enabled - new turn)切換思考模式也會使提示快取失效。請參閱思考與提示快取。
當 Claude 呼叫工具時,它會暫停建構其回應以等待外部資訊。當您回傳工具結果時,Claude 會繼續建構同一個回應,因此其先前的推理必須仍然存在。將每個 thinking 區塊完整且未修改地傳回 API,連同其伴隨的 tool_use 區塊。這很重要,原因有二:
簡而言之:
您不需要自行修剪舊的思考內容。在多輪對話中傳回所有思考區塊,API 會自動過濾它們,保留維持模型推理所需的區塊,並僅對實際顯示給 Claude 的區塊計算輸入 token。保留哪些先前輪次的區塊因模型而異。請參閱各模型的思考區塊保留。若要覆寫預設值,請使用 clear_thinking_20251015 上下文編輯策略。
在最新的助理訊息中,連續 thinking 區塊的序列必須與模型在原始請求中生成的內容相符:您不能重新排列、編輯或部分刪除它們。這包括 redacted_thinking 區塊。
有關每個 SDK 中程式碼的完整兩輪逐步說明,請參閱工具和多輪工作流程中的思考。它定義了一個工具,接收思考加工具使用的回應,並將助理輪次連同工具結果一起回傳。
交錯思考讓 Claude 在工具呼叫之間思考,在對每個工具結果採取行動之前先進行推理。透過交錯思考,Claude 可以:
使用自適應思考時,交錯思考在每個支援自適應思考的模型上都是自動的。不需要 beta 標頭。在 Claude Fable 5、Claude Mythos 5、Claude Mythos Preview、Claude Opus 5、Claude Opus 4.8 和 Claude Opus 4.7 上,工具呼叫之間的推理始終出現在思考區塊中。Claude Haiku 4.5 不支援交錯思考。在使用手動擴展思考的模型上,交錯需要 beta 標頭,並改變思考預算的計算方式。手動模式下的交錯思考涵蓋各模型規則和平台特定的標頭行為。
使用交錯思考時,思考配額可以跨越整個助理輪次,而非單一回應。交錯思考僅支援透過 Messages API 使用的工具。
有關交錯思考在雙工具工作流程中改變了什麼的實際比較,請參閱交錯思考如何改變流程。
先前助理輪次的思考區塊是否預設保留在上下文中,取決於模型:
保留帶來兩個好處:
權衡是上下文使用量:在保留所有輪次的模型上,長對話會消耗更多上下文空間,因為保留的思考區塊像任何其他對話歷史一樣計為輸入(請參閱思考與上下文視窗)。在兩種機制下,行為都是自動的。不需要程式碼變更或 beta 標頭,您應該繼續如保留思考區塊中所述傳回完整、未修改的思考區塊。若要在任一方向覆寫預設值,請使用思考區塊清除。
**在對話中途切換模型。**當您在任何兩個模型之間切換時,例如在分類器拒絕後備之後,請從先前的助理輪次中移除 thinking 和 redacted_thinking 區塊。思考區塊與產生它們的模型綁定。其他模型會靜默忽略它們而非拒絕請求,但被忽略的區塊仍會增加輸入 token。
提示快取與思考以幾種特定方式互動。以下規則在兩種思考模式下都適用。
**設定變更會使快取失效。**思考設定和解析後的 effort 等級會被渲染到提示本身中,因此變更其中任何一項都會開始新的快取前綴。在 adaptive、enabled 和 disabled 之間切換、變更 budget_tokens 以及變更 effort 值都會使快取斷點失效:訊息層級的斷點始終未命中,而工具和系統提示斷點也可能未命中,取決於模型在何處渲染設定。將任何思考或 effort 變更視為重新開始快取。保持相同設定的連續請求會保留快取,而將參數明確設定為其預設值等同於省略它。調整思考頁面上有帶有使用量輸出的實際示範。
**思考區塊與工具結果一起快取。**在工具使用迴圈期間,當您發出包含工具結果的後續請求時會發生快取。此時,先前的對話歷史(包括其思考區塊)可以被快取,而這些快取的思考區塊在從快取讀取時會在您的使用量指標中計為輸入 token。這會自動發生,即使沒有明確的 cache_control 標記,對於一般和交錯思考的行為也相同。權衡是:您在回應中再也看不到的思考區塊在從快取讀取時仍會貢獻輸入 token 使用量。
先前區塊是否在上下文中因模型而異。保留預設值決定了這一點。在保留所有輪次的模型上,先前輪次的思考區塊保持快取並在上下文中。在僅保留最後輪次的模型上,一旦您發送非工具結果的使用者訊息,所有先前的思考區塊都會從上下文中移除。在這些模型上,像這樣的對話:
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]會被處理為好像思考區塊從未存在:
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]在保留所有輪次的模型上,相同的請求會將 thinking_block_1 和 thinking_block_2 保留在上下文和快取中。
**降級會從可快取的歷史中移除思考。**如果思考在輪次中途變為停用,而您在目前的工具使用輪次中傳遞思考內容,思考內容會被移除,且該請求的思考保持停用(請參閱優雅降級)。交錯思考會放大快取失效效應,因為思考區塊可能出現在多個工具呼叫之間。
max_tokens(包括 Claude 在目前輪次中生成的所有思考)作為嚴格限制強制執行。在 Claude 4.5 模型及更新版本上,如果輸入 token 加上 max_tokens 超過上下文視窗大小,API 會接受請求。如果生成隨後達到上下文視窗限制,它會以 stop_reason: "model_context_window_exceeded" 停止,而非回傳錯誤。在較早的模型上,API 會改為回傳驗證錯誤。請參閱處理停止原因。
思考如何計入視窗取決於它何時生成:
max_tokens,以輸出 token 計費,並佔用生成它的輪次的上下文視窗空間。實際上:
max_tokens,然後從視窗中移除。以下圖表說明僅保留最後輪次(移除)機制。第一個顯示多輪對話:每個輪次的思考區塊在輸出中生成,但不會帶入後續輪次的輸入。
第二個顯示相同機制與工具使用:思考在助理輪次期間與其工具結果一起保留在上下文中,然後在下一個使用者輪次時移除。
使用 token 計數 API 為您的特定使用案例取得準確計數,尤其是包含思考的多輪對話。
完整的思考內容會被加密並在每個思考區塊的 signature 欄位中回傳。當您傳回思考區塊時,API 使用簽章來驗證思考區塊是由 Claude 生成的。
使用簽章時,請記住以下幾點:
content_block_stop 事件之前以 content_block_delta 事件內的 signature_delta 形式到達。signature 值比先前的模型長得多。signature 欄位是不透明的:不要解釋或解析它。signature 值跨平台相容(Claude API、Amazon Bedrock 和 Google Cloud)。在一個平台上生成的值可在另一個平台上使用。除了一般的 thinking 區塊外,當 Claude 推理的部分內容因安全原因被遮蔽時,API 可能會回傳 redacted_thinking 區塊。redacted_thinking 區塊在 data 欄位中包含加密的思考內容,沒有可讀文字:
{
"type": "redacted_thinking",
"data": "..."
}data 欄位是不透明且加密的。與一般思考區塊上的 signature 欄位一樣,在使用工具繼續多輪對話時,請將 redacted_thinking 區塊原封不動地傳回 API。
在 Claude Fable 5 和 Claude Mythos 5 上,原始的思維鏈永遠不會回傳。您收到的區塊是一般的 thinking 區塊,而非 redacted_thinking,且 display 設定的運作方式與其他模型相同(摘要文字,或省略時為空的 thinking 欄位,這是此處的預設值)。有關思考區塊的回應格式,請參閱 Messages API 參考文件。
在同一模型上繼續對話時,請將每個思考區塊完全按照收到的內容傳回 API,包括 thinking 欄位為空的區塊。不要編輯或重建它們。讀取摘要文字以供顯示是可以的:API 拒絕的是回傳內容已被修改的區塊,而非您已讀取的區塊。放在空的省略 thinking 欄位中的文字會被忽略而非拒絕。
有關在對話中途切換模型時如何處理思考區塊,請參閱各模型的思考區塊保留。
兩個例外,涵蓋於後備額度中:
fallback 區塊保留在它們出現的位置。若要了解模型的推理,請讀取本頁面描述的 thinking 區塊,而非在回應文字中提示推理。在 Claude Fable 5 上,嘗試在回應文字中引出模型內部推理的請求可能會被拒絕,並回傳 stop_details.category: "reasoning_extraction"。請參閱拒絕類別以了解欄位參考和處理指引。
取樣參數。 在 Claude Fable 5、Claude Mythos 5、Claude Mythos Preview、Claude Opus 5、Claude Opus 4.8、Claude Opus 4.7 和 Claude Sonnet 5 上,非預設的 temperature、top_p 或 top_k 值會在每個請求上回傳 400 錯誤,無論是否使用思考功能。在較舊的模型上,此限制僅在思考功能開啟時適用:temperature 和 top_k 與思考功能不相容,而 top_p 允許設定為 0.95 到 1 之間的值。
回應預填與強制工具使用。 當思考功能開啟時,您無法預填助手回應。強制工具使用(tool_choice: {"type": "any"} 或 {"type": "tool", ...})與手動擴展思考不相容,但可與自適應思考搭配使用。請參閱搭配工具使用的思考。
輸出限制。 Claude Fable 5、Claude Mythos 5、Claude Mythos Preview、Claude Opus 5、Claude Opus 4.8、Claude Opus 4.7、Claude Sonnet 5、Claude Opus 4.6 和 Claude Sonnet 4.6 支援每個請求最多 128k 個輸出 token。Claude Haiku 4.5、Claude Sonnet 4.5 和 Claude Opus 4.5 支援最多 64k。在 Message Batches API 上,output-300k-2026-03-24 beta header 可將 Claude Opus 5、Claude Opus 4.8、Claude Opus 4.7、Claude Sonnet 5、Claude Opus 4.6 和 Claude Sonnet 4.6 的限制提高至 300k。有關舊版模型的限制,請參閱模型概覽。
長時間請求。 當 max_tokens 大於 21,333 時,SDK 會要求使用串流,以避免長時間執行的請求發生 HTTP 逾時。這是用戶端驗證,而非 API 限制。如果您不需要逐步處理事件,請使用 .stream() 搭配 .get_final_message()(Python)或 .finalMessage()(TypeScript)來取得完整的 Message 物件,而無需處理個別事件。請參閱串流訊息。當思考功能啟用時,預期回應時間會較長,因為生成思考區塊會增加處理時間。對於每個請求的思考量超過約 32k 個 token 的工作負載,請使用批次處理以避免網路問題:此類請求可能執行時間過長,以致觸及系統逾時和開放連線限制。
透過努力程度、系統提示指引和逐訊息引導來控制 Claude 思考的頻率與深度,並了解思考的成本與定價。
逐步完成一個完整的兩輪工具使用往返流程,正確保留思考區塊,並了解交錯思考如何改變流程。
診斷並修復最常見的思考功能失敗:設定 400 錯誤、空白或遺失的思考區塊、max_tokens 停止,以及快取未命中。
使用 effort 參數控制 Claude 回應時使用的 token 數量,在回應完整性與 token 效率之間取得平衡。
Was this page helpful?