拡張思考は、Claudeに複雑なタスクに対する強化された推論能力を提供し、最終的な回答を提供する前のステップバイステップの思考プロセスに対してさまざまなレベルの透明性を提供します。
Claude Opus 4.6では、このページで説明されている手動思考モードの代わりに、アダプティブ思考(thinking: {type: "adaptive"})とeffortパラメータの使用を推奨します。手動のthinking: {type: "enabled", budget_tokens: N}設定はOpus 4.6では非推奨であり、将来のモデルリリースで削除される予定です。
拡張思考は以下のモデルでサポートされています:
claude-opus-4-6)— アダプティブ思考を推奨;手動モード(type: "enabled")は非推奨claude-opus-4-5-20251101)claude-opus-4-1-20250805)claude-opus-4-20250514)claude-sonnet-4-5-20250929)claude-sonnet-4-20250514)claude-3-7-sonnet-20250219)(非推奨)claude-haiku-4-5-20251001)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で拡張思考を使用する例を以下に示します:
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?"
}
]
}'拡張思考をオンにするには、thinkingオブジェクトを追加し、typeパラメータをenabledに設定し、budget_tokensを拡張思考用の指定トークン予算に設定します。Claude Opus 4.6では、代わりにtype: "adaptive"の使用を推奨します — 詳細はアダプティブ思考を参照してください。type: "enabled"とbudget_tokensはOpus 4.6でまだサポートされていますが、非推奨であり将来のリリースで削除される予定です。
budget_tokensパラメータは、Claudeが内部推論プロセスに使用できるトークンの最大数を決定します。Claude 4以降のモデルでは、この制限は完全な思考トークンに適用され、要約された出力には適用されません。より大きな予算は、複雑な問題に対するより徹底的な分析を可能にすることで応答品質を向上させることができますが、特に32kを超える範囲では、Claudeが割り当てられた予算全体を使用しない場合があります。
budget_tokensはClaude Opus 4.6では非推奨であり、将来のモデルリリースで削除される予定です。代わりにアダプティブ思考とeffortパラメータを使用して思考の深さを制御することを推奨します。
Claude Opus 4.6は最大128K出力トークンをサポートしています。以前のモデルは最大64K出力トークンをサポートしています。
budget_tokensはmax_tokensより小さい値に設定する必要があります。ただし、ツールとのインターリーブ思考を使用する場合、トークン制限がコンテキストウィンドウ全体(200kトークン)になるため、この制限を超えることができます。
With extended thinking enabled, the Messages API for Claude 4 models returns a summary of Claude's full thinking process. Summarized thinking provides the full intelligence benefits of extended thinking, while preventing misuse.
Here are some important considerations for summarized thinking:
Claude Sonnet 3.7 continues to return full thinking output.
In rare cases where you need access to full thinking output for Claude 4 models, contact our sales team.
サーバー送信イベント(SSE)を使用して拡張思考レスポンスをストリーミングできます。
拡張思考でストリーミングが有効になっている場合、thinking_deltaイベントを通じて思考コンテンツを受信します。
Messages 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": "What is the greatest common divisor of 1071 and 462?"
}
]
}'ストリーミング出力の例:
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": "I need to find the GCD of 1071 and 462 using the Euclidean algorithm.\n\n1071 = 2 × 462 + 147"}}
event: content_block_delta
data: {"type": "content_block_delta", "index": 0, "delta": {"type": "thinking_delta", "thinking": "\n462 = 3 × 147 + 21\n147 = 7 × 21 + 0\n\nSo GCD(1071, 462) = 21"}}
// 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": "The greatest common divisor of 1071 and 462 is **21**."}}
// 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つの連続したアシスタント応答の一部です。
ターン途中の思考の競合が発生した場合(ツール使用ループ中に思考のオン/オフを切り替えるなど)、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)思考を切り替える前にアシスタントターンを完了することで、新しいリクエストで思考が実際に有効になることを確認できます。
思考モードの切り替えは、メッセージ履歴のプロンプトキャッシュも無効にします。詳細については、プロンプトキャッシュとの拡張思考セクションを参照してください。
ツール使用中は、thinkingブロックをAPIに渡す必要があり、完全な未変更のブロックをAPIに含める必要があります。これはモデルの推論フローと会話の整合性を維持するために重要です。
以前のassistantロールのターンからthinkingブロックを省略することはできますが、マルチターン会話では常にすべての思考ブロックをAPIに渡すことをお勧めします。APIは以下を行います:
会話中に思考モードを切り替える場合、ツール使用ループを含むアシスタントターン全体が単一の思考モードで動作する必要があることを覚えておいてください。詳細については、会話中の思考モードの切り替えを参照してください。
Claudeがツールを呼び出す際、外部情報を待つために応答の構築を一時停止しています。ツール結果が返されると、Claudeはその既存の応答の構築を続けます。これにより、ツール使用中に思考ブロックを保持する必要があります。理由はいくつかあります:
推論の継続性: 思考ブロックは、ツールリクエストに至ったClaudeのステップバイステップの推論をキャプチャします。ツール結果を投稿する際に、元の思考を含めることで、Claudeが中断したところから推論を続けることができます。
コンテキストの維持: ツール結果はAPI構造ではユーザーメッセージとして表示されますが、連続した推論フローの一部です。思考ブロックを保持することで、複数のAPI呼び出しにわたってこの概念的なフローが維持されます。コンテキスト管理の詳細については、コンテキストウィンドウに関するガイドを参照してください。
重要: thinkingブロックを提供する場合、連続するthinkingブロックのシーケンス全体が、元のリクエスト中にモデルが生成した出力と一致する必要があります。これらのブロックのシーケンスを並べ替えたり変更したりすることはできません。
Claude 4モデルでのツール使用を伴う拡張思考はインターリーブ思考をサポートしており、Claudeがツール呼び出し間で思考し、ツール結果を受信した後により洗練された推論を行うことができます。
インターリーブ思考により、Claudeは以下が可能になります:
Claude Opus 4.6では、アダプティブ思考を使用する際にインターリーブ思考が自動的に有効になります — ベータヘッダーは不要です。
Claude 4モデルでは、APIリクエストにベータヘッダー interleaved-thinking-2025-05-14を追加してインターリーブ思考を有効にします。
インターリーブ思考に関する重要な考慮事項を以下に示します:
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以降(Claude Opus 4.6を含む)では、以前のすべての思考ブロックがデフォルトで保持されます。古いモデルでは、ツール結果以外のユーザーブロックが含まれているため、以前のすべての思考ブロックは無視されます。このリクエストは以下と同じように処理されます:
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 の値を調整するこの変更は、特に最大トークン制限が大幅に増加したことに伴い、より予測可能で透明性の高い動作を提供するために行われました。
Full thinking content is encrypted and returned in the signature field. This field is used to verify that thinking blocks were generated by Claude when passed back to the API.
It is only strictly necessary to send back thinking blocks when using tools with extended thinking. Otherwise you can omit thinking blocks from previous turns, or let the API strip them for you if you pass them back.
If sending back thinking blocks, we recommend passing everything back as you received it for consistency and to avoid potential issues.
Here are some important considerations on thinking encryption:
signature_delta inside a content_block_delta event just before the content_block_stop event.signature values are significantly longer in Claude 4 models than in previous models.signature field is an opaque field and should not be interpreted or parsed - it exists solely for verification purposes.signature values are compatible across platforms (Claude APIs, Amazon Bedrock, and Vertex AI). Values generated on one platform will be compatible with another.Occasionally Claude's internal reasoning will be flagged by our safety systems. When this occurs, we encrypt some or all of the thinking block and return it to you as a redacted_thinking block. redacted_thinking blocks are decrypted when passed back to the API, allowing Claude to continue its response without losing context.
When building customer-facing applications that use extended thinking:
Here's an example showing both normal and redacted thinking blocks:
{
"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..."
}
]
}Seeing redacted thinking blocks in your output is expected behavior. The model can still use this redacted reasoning to inform its responses while maintaining safety guardrails.
If you need to test redacted thinking handling in your application, you can use this special test string as your prompt: ANTHROPIC_MAGIC_STRING_TRIGGER_REDACTED_THINKING_46C9A13E193C177646C7398A98432ECCCE4C1253D5E2D82641AC0E52CC2876CB
When passing thinking and redacted_thinking blocks back to the API in a multi-turn conversation, you must include the complete unmodified block back to the API for the last assistant turn. This is critical for maintaining the model's reasoning flow. We suggest always passing back all thinking blocks to the API. For more details, see the Preserving thinking blocks section.
Messages APIは、Claude Sonnet 3.7とClaude 4モデル間で思考の処理が異なり、主に墨消しと要約の動作に違いがあります。
以下の表で簡潔な比較をご覧ください:
| 機能 | Claude Sonnet 3.7 | Claude 4モデル(Opus 4.5より前) | Claude Opus 4.5 | Claude Opus 4.6(アダプティブ思考) |
|---|---|---|---|---|
| 思考出力 | 完全な思考出力を返す | 要約された思考を返す | 要約された思考を返す | 要約された思考を返す |
| インターリーブ思考 | サポートなし | interleaved-thinking-2025-05-14 ベータヘッダーでサポート | interleaved-thinking-2025-05-14 ベータヘッダーでサポート | アダプティブ思考で自動(ベータヘッダー不要) |
| 思考ブロックの保持 | ターン間で保持されない | ターン間で保持されない | デフォルトで保持 | デフォルトで保持 |
Claude Opus 4.5以降(Claude Opus 4.6を含む)では、以前のアシスタントターンの思考ブロックがデフォルトでモデルコンテキストに保持されます。これは、以前のターンの思考ブロックを削除する古いモデルとは異なります。
思考ブロック保持の利点:
重要な考慮事項:
古いモデル(Claude Sonnet 4.5、Opus 4.1など)では、以前のターンの思考ブロックは引き続きコンテキストから削除されます。プロンプトキャッシュを使用した拡張思考セクションで説明されている既存の動作がこれらのモデルに適用されます。
For complete pricing information including base rates, cache writes, cache hits, and output tokens, see the pricing page.
The thinking process incurs charges for:
When extended thinking is enabled, a specialized system prompt is automatically included to support this feature.
When using summarized thinking:
The billed output token count will not match the visible token count in the response. You are billed for the full thinking process, not the summary you see.
max_tokens が21,333を超える場合にストリーミングを必要とします。これはクライアント側のバリデーションであり、APIの制限ではありません。イベントを段階的に処理する必要がない場合は、.stream() と .get_final_message()(Python)または .finalMessage()(TypeScript)を使用して、個々のイベントを処理せずに完全な Message オブジェクトを取得できます—詳細はストリーミングメッセージをご覧ください。ストリーミング時は、思考コンテンツブロックとテキストコンテンツブロックの両方が到着するのを処理する準備をしてください。temperature や top_k の変更、および強制ツール使用とは互換性がありません。top_p を1から0.95の間の値に設定できます。Was this page helpful?