拡張思考により、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": "Let me analyze this step by step...",
"signature": "WaUjzkypQ2mUEVM36O2TxuC06KN8xyfbJwyem2dw3URve/op91XWHOEBLLqIOMfFG/UvLEczmEsUjavL...."
},
{
"type": "text",
"text": "Based on my analysis..."
}
]
}拡張思考のレスポンス形式の詳細については、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の完全な思考プロセスの要約を返します。要約された思考は、拡張思考の完全な知能上の利点を提供しながら、悪用を防ぎます。
要約された思考に関する重要な考慮事項を以下に示します:
Claude Sonnet 3.7は引き続き完全な思考出力を返します。
Claude 4モデルの完全な思考出力へのアクセスが必要な稀なケースでは、営業チームにお問い合わせください。
サーバー送信イベント(SSE)を使用して拡張思考レスポンスをストリーミングできます。
拡張思考でストリーミングが有効になると、thinking_deltaイベントを介して思考コンテンツを受け取ります。
Messages APIを介したストリーミングの詳細については、ストリーミングメッセージを参照してください。
思考を使用したストリーミングの処理方法を以下に示します:
ストリーミング出力の例:
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": "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"}思考を有効にしてストリーミングを使用する場合、テキストが時々大きなチャンクで到着し、小さなトークンごとの配信と交互になることに気付くかもしれません。これは予想される動作です。特に思考コンテンツの場合です。
ストリーミングシステムは最適なパフォーマンスのためにコンテンツをバッチで処理する必要があり、この「チャンキー」な配信パターンが生じる可能性があり、ストリーミングイベント間に遅延が生じる可能性があります。私たちは継続的にこのエクスペリエンスを改善するために取り組んでおり、将来の更新は思考コンテンツをより滑らかにストリーミングすることに焦点を当てています。
拡張思考はツール使用と一緒に使用でき、Claudeがツール選択と結果処理を通じて推論することができます。
ツール使用を伴う拡張思考を使用する場合、以下の制限に注意してください:
ツール選択の制限:思考を伴うツール使用はtool_choice: {"type": "auto"}(デフォルト)またはtool_choice: {"type": "none"}のみをサポートします。tool_choice: {"type": "any"}またはtool_choice: {"type": "tool", "name": "..."}を使用するとエラーが発生します。これらのオプションはツール使用を強制するため、拡張思考と互換性がありません。
思考ブロックの保持:ツール使用中に、最後のアシスタントメッセージのthinkingブロックをAPIに戻す必要があります。推論の連続性を維持するために、完全な未修正ブロックをAPIに戻してください。
アシスタントターンの途中(ツール使用ループ中を含む)で思考を切り替えることはできません。アシスタントターン全体は単一の思考モードで動作する必要があります:
モデルの観点から、ツール使用ループはアシスタントターンの一部です。アシスタントターンは、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メッセージがありますが、ツール使用ループは概念的には1つの継続的なアシスタント応答の一部です。
このエラーが発生する場合があります:
Expected `thinking` or `redacted_thinking`, but found `tool_use`.
When `thinking` is enabled, a final `assistant` message must start
with a thinking block (preceding the lastmost set of `tool_use` and
`tool_result` blocks).これは通常、以下の場合に発生します:
✗ 無効:ツール使用直後に思考を切り替える
User: "What's the weather?"
Assistant: [tool_use] (thinking disabled)
User: [tool_result]
// Cannot enable thinking here - still in the same assistant turn✓ 有効:最初にアシスタントターンを完了する
User: "What's the weather?"
Assistant: [tool_use] (thinking disabled)
User: [tool_result]
Assistant: [text: "It's sunny"]
User: "What about tomorrow?" (thinking disabled)
Assistant: [thinking] + [text: "..."] (thinking enabled - new turn)ベストプラクティス:ターン中に切り替えようとするのではなく、各ターンの開始時に思考戦略を計画してください。
会話中に思考モードを切り替えると、メッセージ履歴のプロンプトキャッシングも無効になります。詳細については、プロンプトキャッシングを伴う拡張思考セクションを参照してください。
ツール使用中に、thinkingブロックをAPIに戻す必要があり、完全な未修正ブロックをAPIに戻す必要があります。これはモデルの推論フローと会話の整合性を維持するために重要です。
以前のassistantロールターンからthinkingブロックを省略できますが、マルチターン会話ではすべての思考ブロックをAPIに戻すことをお勧めします。APIは以下を行います:
会話中に思考モードを切り替える場合、アシスタントターン全体(ツール使用ループを含む)は単一の思考モードで動作する必要があることに注意してください。詳細については、会話での思考モードの切り替えを参照してください。
Claudeがツールを呼び出すとき、それは外部情報を待つために応答の構築を一時停止しています。ツール結果が返されると、Claudeはその既存の応答の構築を続けます。これにより、ツール使用中に思考ブロックを保持する必要があります。理由は2つあります:
推論の連続性:思考ブロックはツール要求につながったClaudeのステップバイステップの推論をキャプチャします。ツール結果を投稿するとき、元の思考を含めることで、Claudeは中断したところから推論を続けることができます。
コンテキストの維持:ツール結果はAPI構造ではユーザーメッセージとして表示されますが、継続的な推論フローの一部です。思考ブロックを保持することで、複数のAPI呼び出しにわたってこの概念的なフローを維持します。コンテキスト管理の詳細については、コンテキストウィンドウに関するガイドを参照してください。
重要:thinkingブロックを提供する場合、連続したthinkingブロックのシーケンス全体は、元のリクエスト中にモデルによって生成された出力と一致する必要があります。ブロックのシーケンスを再配置または変更することはできません。
Claude 4モデルでのツール使用を伴う拡張思考は、インターリーブ思考をサポートしており、これによってClaudeはツール呼び出し間で思考し、ツール結果を受け取った後、より高度な推論を行うことができます。
インターリーブ思考により、Claudeは以下のことができます:
インターリーブ思考を有効にするには、ベータヘッダー interleaved-thinking-2025-05-14 をAPIリクエストに追加してください。
インターリーブ思考に関する重要な考慮事項は以下の通りです:
budget_tokens が max_tokens パラメータを超える可能性があります。これは1つのアシスタントターン内のすべての思考ブロック全体の予算を表しているためです。interleaved-thinking-2025-05-14 が必要です。interleaved-thinking-2025-05-14 をリクエストに渡すことができ、どのモデルでも効果はありません。interleaved-thinking-2025-05-14 を渡すと、リクエストは失敗します。プロンプトキャッシング と思考にはいくつかの重要な考慮事項があります:
拡張思考タスクは完了するのに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_stop イベントの直前に content_block_delta イベント内の signature_delta を介して追加されます。signature 値はClaude 4モデルでは前のモデルよりも大幅に長くなります。signature フィールドは不透明なフィールドであり、解釈または解析されるべきではありません。検証目的のためにのみ存在します。signature 値はプラットフォーム間で互換性があります(Claude API、Amazon Bedrock、および Vertex AI)。1つのプラットフォームで生成された値は別のプラットフォームと互換性があります。時々、Claudeの内部推論が当社のセーフティシステムによってフラグが立てられることがあります。これが発生した場合、thinkingブロックの一部またはすべてを暗号化し、redacted_thinkingブロックとして返します。redacted_thinkingブロックはAPIに渡されるときに復号化され、Claudeがコンテキストを失わずに応答を続けることができます。
拡張思考を使用する顧客向けアプリケーションを構築する場合:
以下は、通常の思考ブロックと編集された思考ブロックの両方を示す例です:
{
"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_thinkingハンドリングをテストする必要がある場合、プロンプトとしてこの特別なテスト文字列を使用できます:ANTHROPIC_MAGIC_STRING_TRIGGER_REDACTED_THINKING_46C9A13E193C177646C7398A98432ECCCE4C1253D5E2D82641AC0E52CC2876CB
マルチターン会話でAPIにthinkingおよびredacted_thinkingブロックを渡す場合、最後のアシスタントターンの完全な未修正ブロックを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ベータヘッダーでサポート | interleaved-thinking-2025-05-14ベータヘッダーでサポート |
| 思考ブロック保持 | ターン間で保持されない | ターン間で保持されない | デフォルトで保持(キャッシュ最適化、トークン節約を有効化) |
Claude Opus 4.5は新しいデフォルト動作を導入します:前のアシスタントターンからの思考ブロックはデフォルトでモデルコンテキストに保持されます。これは、前のターンから思考ブロックを削除する以前のモデルとは異なります。
思考ブロック保持の利点:
重要な考慮事項:
以前のモデル(Claude Sonnet 4.5、Opus 4.1など)の場合、前のターンからの思考ブロックはコンテキストから削除され続けます。プロンプトキャッシング付き拡張思考セクションで説明されている既存の動作がこれらのモデルに適用されます。
基本料金、キャッシュ書き込み、キャッシュヒット、出力トークンを含む完全な価格情報については、価格ページを参照してください。
思考プロセスは以下に対して料金が発生します:
拡張思考が有効になると、この機能をサポートするために特殊なシステムプロンプトが自動的に含まれます。
要約された思考を使用する場合:
請求される出力トークン数は、応答に表示される可視トークン数と一致しません。要約ではなく、完全な思考プロセスに対して請求されます。
max_tokensが21,333より大きい場合、ストリーミングが必要です。ストリーミング時は、思考とテキストコンテンツブロックの両方が到着するときに処理する準備をしてください。temperatureまたはtop_kの変更、および強制ツール使用と互換性がありません。top_pを1から0.95の間の値に設定できます。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": "Are there an infinite number of prime numbers such that n mod 4 == 3?"
}
]
}'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": "What is 27 * 453?"
}
]
}'クックブックで思考の実践的な例を探索してください。