拡張思考を使った構築
拡張思考は、Claudeに複雑なタスクに対する強化された推論能力を提供し、最終的な回答を提供する前に、段階的な思考プロセスに対してさまざまなレベルの透明性を提供します。
サポートされているモデル
拡張思考は以下のモデルでサポートされています:
- Claude Opus 4 (
claude-opus-4-20250514
) - Claude Sonnet 4 (
claude-sonnet-4-20250514
) - Claude Sonnet 3.7 (
claude-3-7-sonnet-20250219
)
APIの動作はClaude 3.7とClaude 4モデル間で異なりますが、APIの形状は全く同じです。
詳細については、モデルバージョン間での思考の違いを参照してください。
拡張思考の仕組み
拡張思考がオンになると、Claudeは内部推論を出力するthinking
コンテンツブロックを作成します。Claudeは最終的な応答を作成する前に、この推論からの洞察を組み込みます。
API応答にはthinking
コンテンツブロックが含まれ、その後にtext
コンテンツブロックが続きます。
デフォルトの応答形式の例は以下の通りです:
拡張思考の応答形式の詳細については、Messages API Referenceを参照してください。
拡張思考の使用方法
Messages APIで拡張思考を使用する例は以下の通りです:
拡張思考をオンにするには、thinking
オブジェクトを追加し、type
パラメータをenabled
に設定し、budget_tokens
を拡張思考の指定されたトークン予算に設定します。
budget_tokens
パラメータは、Claudeが内部推論プロセスに使用することが許可されるトークンの最大数を決定します。Claude 4モデルでは、この制限は完全な思考トークンに適用され、要約された出力には適用されません。より大きな予算は、複雑な問題に対してより徹底的な分析を可能にすることで応答品質を向上させることができますが、Claudeは特に32k以上の範囲で、割り当てられた予算全体を使用しない場合があります。
budget_tokens
はmax_tokens
未満の値に設定する必要があります。ただし、インターリーブ思考とツールを使用する場合、トークン制限が全体のコンテキストウィンドウ(200kトークン)になるため、この制限を超えることができます。
要約された思考
拡張思考が有効になると、Claude 4モデルのMessages APIはClaudeの完全な思考プロセスの要約を返します。要約された思考は、誤用を防ぎながら拡張思考の完全な知能的利益を提供します。
要約された思考に関する重要な考慮事項は以下の通りです:
- 元のリクエストによって生成された完全な思考トークンに対して課金され、要約トークンに対してではありません。
- 請求される出力トークン数は、応答で見るトークン数と一致しません。
- 思考出力の最初の数行はより詳細で、プロンプトエンジニアリングの目的で特に役立つ詳細な推論を提供します。
- Anthropicが拡張思考機能の改善を求める中で、要約動作は変更される可能性があります。
- 要約は、最小限の追加レイテンシでClaudeの思考プロセスの主要なアイデアを保持し、ストリーミング可能なユーザーエクスペリエンスとClaude 3.7モデルからClaude 4モデルへの簡単な移行を可能にします。
- 要約は、リクエストでターゲットとするモデルとは異なるモデルによって処理されます。思考モデルは要約された出力を見ません。
Claude Sonnet 3.7は完全な思考出力を返し続けます。
Claude 4モデルの完全な思考出力へのアクセスが必要な稀なケースでは、営業チームにお問い合わせください。
思考のストリーミング
サーバー送信イベント(SSE)を使用して拡張思考応答をストリーミングできます。
拡張思考でストリーミングが有効になると、thinking_delta
イベントを介して思考コンテンツを受信します。
Messages APIを介したストリーミングの詳細については、Streaming Messagesを参照してください。
思考でストリーミングを処理する方法は以下の通りです:
ストリーミング出力の例:
思考が有効になっているストリーミングを使用する場合、テキストが小さなトークンごとの配信と交互に大きなチャンクで到着することがあります。これは、特に思考コンテンツにとって期待される動作です。
ストリーミングシステムは最適なパフォーマンスのためにコンテンツをバッチで処理する必要があり、これによりストリーミングイベント間で遅延が生じる可能性のある「チャンク状」の配信パターンが生じる可能性があります。私たちはこのエクスペリエンスの改善に継続的に取り組んでおり、将来のアップデートでは思考コンテンツがよりスムーズにストリーミングされることに焦点を当てています。
ツール使用での拡張思考
拡張思考はツール使用と併用でき、Claudeがツール選択と結果処理を推論できます。
拡張思考をツール使用と併用する場合、以下の制限に注意してください:
-
ツール選択の制限:思考を伴うツール使用は
tool_choice: {"type": "auto"}
(デフォルト)またはtool_choice: {"type": "none"}
のみをサポートします。tool_choice: {"type": "any"}
またはtool_choice: {"type": "tool", "name": "..."}
を使用すると、これらのオプションがツール使用を強制するため、拡張思考と互換性がないためエラーが発生します。 -
思考ブロックの保持:ツール使用中は、最後のアシスタントメッセージのために
thinking
ブロックをAPIに戻す必要があります。推論の継続性を維持するために、完全な未修正ブロックをAPIに含めてください。
思考ブロックの保持
ツール使用中は、thinking
ブロックをAPIに戻す必要があり、完全な未修正ブロックをAPIに含める必要があります。これは、モデルの推論フローと会話の整合性を維持するために重要です。
以前のassistant
ロールターンからthinking
ブロックを省略することはできますが、マルチターン会話では常にすべての思考ブロックをAPIに戻すことをお勧めします。APIは:
- 提供された思考ブロックを自動的にフィルタリングします
- モデルの推論を保持するために必要な関連する思考ブロックを使用します
- Claudeに表示されるブロックの入力トークンのみを請求します
Claudeがツールを呼び出すとき、外部情報を待つために応答の構築を一時停止しています。ツール結果が返されると、Claudeはその既存の応答の構築を続行します。これにより、いくつかの理由でツール使用中に思考ブロックを保持する必要があります:
-
推論の継続性:思考ブロックは、ツールリクエストにつながったClaudeの段階的推論をキャプチャします。ツール結果を投稿するとき、元の思考を含めることで、Claudeが中断したところから推論を続行できます。
-
コンテキストの維持:ツール結果はAPI構造ではユーザーメッセージとして表示されますが、継続的な推論フローの一部です。思考ブロックを保持することで、複数のAPI呼び出しにわたってこの概念的フローが維持されます。コンテキスト管理の詳細については、コンテキストウィンドウのガイドを参照してください。
重要:thinking
ブロックを提供する場合、連続するthinking
ブロックの全体のシーケンスは、元のリクエスト中にモデルによって生成された出力と一致する必要があります。これらのブロックのシーケンスを再配置または変更することはできません。
インターリーブ思考
Claude 4モデルでのツール使用を伴う拡張思考は、インターリーブ思考をサポートし、Claudeがツール呼び出し間で思考し、ツール結果を受信した後により洗練された推論を行うことを可能にします。
インターリーブ思考により、Claudeは以下のことができます:
- 次に何をするかを決定する前に、ツール呼び出しの結果について推論する
- 間に推論ステップを挟んで複数のツール呼び出しを連鎖させる
- 中間結果に基づいてより微妙な決定を行う
インターリーブ思考を有効にするには、APIリクエストにベータヘッダー interleaved-thinking-2025-05-14
を追加します。
インターリーブ思考に関する重要な考慮事項は以下の通りです:
- インターリーブ思考では、
budget_tokens
はmax_tokens
パラメータを超えることができます。これは、1つのアシスタントターン内のすべての思考ブロックにわたる総予算を表すためです。 - インターリーブ思考はMessages APIを介して使用されるツールでのみサポートされています。
- インターリーブ思考は、ベータヘッダー
interleaved-thinking-2025-05-14
を使用してClaude 4モデルでのみサポートされています。 - AnthropicのAPIへの直接呼び出しでは、任意のモデルへのリクエストで
interleaved-thinking-2025-05-14
を渡すことができ、効果はありません。 - サードパーティプラットフォーム(例:Amazon BedrockおよびVertex AI)では、Claude Opus 4またはSonnet 4以外のモデルに
interleaved-thinking-2025-05-14
を渡すと、リクエストが失敗します。
プロンプトキャッシュを伴う拡張思考
思考を伴うプロンプトキャッシュには、いくつかの重要な考慮事項があります:
拡張思考タスクは完了するのに5分以上かかることがよくあります。より長い思考セッションとマルチステップワークフローにわたってキャッシュヒットを維持するために、1時間キャッシュ期間の使用を検討してください。
思考ブロックコンテキストの削除
- 以前のターンからの思考ブロックはコンテキストから削除され、キャッシュブレークポイントに影響を与える可能性があります
- ツール使用で会話を続行する場合、思考ブロックはキャッシュされ、キャッシュから読み取られる際に入力トークンとしてカウントされます
- これによりトレードオフが生まれます:思考ブロックは視覚的にはコンテキストウィンドウスペースを消費しませんが、キャッシュされた場合は入力トークン使用量にカウントされます
- 思考が無効になった場合、現在のツール使用ターンで思考コンテンツを渡すとリクエストが失敗します。他のコンテキストでは、APIに渡された思考コンテンツは単に無視されます
キャッシュ無効化パターン
- 思考パラメータの変更(有効/無効または予算配分)はメッセージキャッシュブレークポイントを無効化します
- インターリーブ思考は、複数のツール呼び出し間で思考ブロックが発生する可能性があるため、キャッシュ無効化を増幅します
- システムプロンプトとツールは、思考パラメータの変更やブロックの削除にもかかわらずキャッシュされたままです
思考ブロックキャッシュ動作の理解
拡張思考をツール使用と併用する場合、思考ブロックはトークンカウントに影響する特定のキャッシュ動作を示します:
仕組み:
- キャッシュは、ツール結果を含む後続のリクエストを行う場合にのみ発生します
- 後続のリクエストが行われると、以前の会話履歴(思考ブロックを含む)がキャッシュされる可能性があります
- これらのキャッシュされた思考ブロックは、キャッシュから読み取られる際に使用量メトリクスで入力トークンとしてカウントされます
- ツール結果以外のユーザーブロックが含まれる場合、以前のすべての思考ブロックは無視され、コンテキストから削除されます
詳細な例のフロー:
リクエスト1:
応答1:
リクエスト2:
応答2:
リクエスト2は、リクエストコンテンツ(応答ではない)のキャッシュを書き込みます。キャッシュには、元のユーザーメッセージ、最初の思考ブロック、ツール使用ブロック、およびツール結果が含まれます。
リクエスト3:
ツール結果以外のユーザーブロックが含まれたため、以前のすべての思考ブロックは無視されます。このリクエストは以下と同じように処理されます:
重要なポイント:
- このキャッシュ動作は、明示的な
cache_control
マーカーなしでも自動的に発生します - この動作は、通常の思考またはインターリーブ思考を使用しているかどうかに関係なく一貫しています
拡張思考でのmax tokensとコンテキストウィンドウサイズ
古いClaudeモデル(Claude Sonnet 3.7以前)では、プロンプトトークンとmax_tokens
の合計がモデルのコンテキストウィンドウを超えた場合、システムは自動的にmax_tokens
をコンテキスト制限内に収まるように調整していました。これは、大きなmax_tokens
値を設定でき、システムが必要に応じてそれを静かに減らすことを意味していました。
Claude 3.7および4モデルでは、max_tokens
(思考が有効な場合は思考予算を含む)は厳格な制限として強制されます。プロンプトトークン + max_tokens
がコンテキストウィンドウサイズを超える場合、システムは検証エラーを返すようになりました。
より詳細な深掘りについては、コンテキストウィンドウのガイドをお読みください。
拡張思考でのコンテキストウィンドウ
拡張思考が有効な場合のコンテキストウィンドウ使用量を計算する際に、注意すべき考慮事項があります:
- 以前のターンからの思考ブロックは削除され、コンテキストウィンドウにカウントされません
- 現在のターンの思考は、そのターンの
max_tokens
制限にカウントされます
以下の図は、拡張思考が有効な場合の特殊なトークン管理を示しています:
有効なコンテキストウィンドウは以下のように計算されます:
特に思考を含むマルチターン会話を扱う場合、特定の使用ケースに対して正確なトークン数を取得するためにトークンカウントAPIを使用することをお勧めします。
ツール使用での拡張思考でのコンテキストウィンドウ
拡張思考をツール使用と併用する場合、思考ブロックは明示的に保持され、ツール結果と一緒に返される必要があります。
ツール使用での拡張思考の有効なコンテキストウィンドウ計算は以下のようになります:
以下の図は、ツール使用での拡張思考のトークン管理を示しています:
拡張思考でのトークン管理
拡張思考Claude 3.7および4モデルでのコンテキストウィンドウとmax_tokens
の動作を考慮すると、以下が必要になる場合があります:
- トークン使用量をより積極的に監視および管理する
- プロンプト長が変化するにつれて
max_tokens
値を調整する - トークンカウントエンドポイントをより頻繁に使用する可能性がある
- 以前の思考ブロックがコンテキストウィンドウに蓄積されないことを認識する
この変更は、特に最大トークン制限が大幅に増加したため、より予測可能で透明な動作を提供するために行われました。
思考の暗号化
完全な思考コンテンツは暗号化され、signature
フィールドで返されます。このフィールドは、APIに戻される際に思考ブロックがClaudeによって生成されたことを検証するために使用されます。
拡張思考でのツールを使用する場合にのみ、思考ブロックを送り返すことが厳密に必要です。それ以外の場合は、以前のターンから思考ブロックを省略するか、それらを戻した場合にAPIに削除させることができます。
思考ブロックを送り返す場合、一貫性を保ち、潜在的な問題を回避するために、受け取ったものをすべてそのまま戻すことをお勧めします。
思考の暗号化に関する重要な考慮事項は以下の通りです:
- 応答をストリーミングする場合、署名は
content_block_stop
イベントの直前にcontent_block_delta
内のsignature_delta
を介して追加されます。 signature
値は、Claude 4では以前のモデルよりも大幅に長くなります。signature
フィールドは不透明なフィールドであり、解釈や解析すべきではありません。検証目的のためだけに存在します。signature
値は、プラットフォーム間(Anthropic API、Amazon Bedrock、およびVertex AI)で互換性があります。1つのプラットフォームで生成された値は別のプラットフォームと互換性があります。
思考の編集
時折、Claudeの内部推論が私たちの安全システムによってフラグが立てられることがあります。これが発生すると、thinking
ブロックの一部またはすべてを暗号化し、redacted_thinking
ブロックとして返します。redacted_thinking
ブロックは、APIに戻される際に復号化され、Claudeがコンテキストを失うことなく応答を続行できます。
拡張思考を使用する顧客向けアプリケーションを構築する場合:
- 編集された思考ブロックには、人間が読めない暗号化されたコンテンツが含まれていることを認識してください
- 「Claudeの内部推論の一部が安全上の理由で自動的に暗号化されました。これは応答の品質には影響しません。」のような簡単な説明を提供することを検討してください
- 思考ブロックをユーザーに表示する場合、通常の思考ブロックを保持しながら編集されたブロックをフィルタリングできます
- 拡張思考機能を使用すると、時折一部の推論が暗号化される可能性があることを透明にしてください
- UIを壊すことなく編集された思考を適切に管理するための適切なエラーハンドリングを実装してください
通常の思考ブロックと編集された思考ブロックの両方を示す例は以下の通りです:
出力で編集された思考ブロックを見ることは期待される動作です。モデルは安全ガードレールを維持しながら、この編集された推論を使用して応答に情報を提供することができます。
アプリケーションで編集された思考処理をテストする必要がある場合、プロンプトとして次の特別なテスト文字列を使用できます: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モデル |
---|---|---|
思考出力 | 完全な思考出力を返す | 要約された思考を返す |
インターリーブ思考 | サポートされていない | interleaved-thinking-2025-05-14 ベータヘッダーでサポート |
価格設定
拡張思考は標準のトークン価格体系を使用します:
モデル | ベース入力トークン | キャッシュ書き込み | キャッシュヒット | 出力トークン |
---|---|---|---|---|
Claude Opus 4 | $15 / MTok | $18.75 / MTok | $1.50 / MTok | $75 / MTok |
Claude Sonnet 4 | $3 / MTok | $3.75 / MTok | $0.30 / MTok | $15 / MTok |
Claude Sonnet 3.7 | $3 / MTok | $3.75 / MTok | $0.30 / MTok | $15 / MTok |
思考プロセスでは以下に対して料金が発生します:
- 思考中に使用されるトークン(出力トークン)
- 後続のリクエストに含まれる最後のアシスタントターンからの思考ブロック(入力トークン)
- 標準のテキスト出力トークン
拡張思考が有効な場合、この機能をサポートするために特殊なシステムプロンプトが自動的に含まれます。
要約された思考を使用する場合:
- 入力トークン:元のリクエストのトークン(以前のターンからの思考トークンを除く)
- 出力トークン(請求):Claudeが内部的に生成した元の思考トークン
- 出力トークン(表示):応答で見る要約された思考トークン
- 料金なし:要約を生成するために使用されるトークン
請求される出力トークン数は、応答で表示されるトークン数と一致しません。表示される要約ではなく、完全な思考プロセスに対して請求されます。
拡張思考のベストプラクティスと考慮事項
思考予算の操作
- 予算の最適化: 最小予算は1,024トークンです。最小値から始めて、使用ケースに最適な範囲を見つけるために思考予算を段階的に増やすことをお勧めします。より高いトークン数は、タスクに応じて収穫逓減の関係でより包括的な推論を可能にします。予算を増やすことで、レイテンシの増加とのトレードオフで応答品質を向上させることができます。重要なタスクでは、最適なバランスを見つけるために異なる設定をテストしてください。思考予算は厳格な制限ではなく目標であることに注意してください。実際のトークン使用量はタスクによって異なる場合があります。
- 開始点: 複雑なタスクには大きな思考予算(16k+トークン)から始めて、ニーズに基づいて調整してください。
- 大きな予算: 32kを超える思考予算については、ネットワークの問題を回避するためにバッチ処理の使用をお勧めします。32kトークンを超えて思考するよう促すリクエストは、システムタイムアウトやオープン接続制限に達する可能性のある長時間実行リクエストを引き起こします。
- トークン使用量の追跡: コストとパフォーマンスを最適化するために思考トークンの使用量を監視してください。
パフォーマンスの考慮事項
- 応答時間: 推論プロセスに必要な追加処理により、応答時間が長くなる可能性があることに備えてください。思考ブロックの生成が全体的な応答時間を増加させる可能性があることを考慮してください。
- ストリーミング要件:
max_tokens
が21,333を超える場合、ストリーミングが必要です。ストリーミング時は、到着する思考とテキストコンテンツブロックの両方を処理する準備をしてください。
機能の互換性
- 思考は
temperature
やtop_k
の変更、および強制ツール使用と互換性がありません。 - 思考が有効な場合、
top_p
を1から0.95の間の値に設定できます。 - 思考が有効な場合、応答を事前入力することはできません。
- 思考予算の変更は、メッセージを含むキャッシュされたプロンプトプレフィックスを無効化します。ただし、キャッシュされたシステムプロンプトとツール定義は、思考パラメータが変更されても引き続き機能します。
使用ガイドライン
- タスクの選択: 数学、コーディング、分析などの段階的推論から恩恵を受ける特に複雑なタスクに拡張思考を使用してください。
- コンテキストの処理: 以前の思考ブロックを自分で削除する必要はありません。Anthropic APIは以前のターンからの思考ブロックを自動的に無視し、コンテキスト使用量を計算する際に含まれません。
- プロンプトエンジニアリング: Claudeの思考能力を最大化したい場合は、拡張思考プロンプティングのヒントをご確認ください。