拡張思考による構築
拡張思考は、Claude 3.7 Sonnetに複雑なタスクのための強化された推論能力を提供し、最終的な回答を提供する前の段階的な思考プロセスの透明性も確保します。
拡張思考の仕組み
拡張思考が有効になると、Claudeは内部の推論を出力するthinking
コンテンツブロックを作成します。Claudeは最終的な応答を作成する前に、この推論からの洞察を組み込みます。
APIレスポンスにはthinking
とtext
の両方のコンテンツブロックが含まれます。
複数ターンの会話では、ツール使用セッションまたは最後のメッセージ位置にあるassistant
ターンに関連する思考ブロックのみがClaudeに表示され、入力トークンとして課金されます。以前のassistant
メッセージに関連する思考ブロックはサンプリング中にClaudeには表示されず、入力トークンとして課金されません。
拡張思考の実装
APIリクエストにthinking
パラメータと、拡張思考に使用する指定されたトークン予算を追加します。
budget_tokens
パラメータは、Claudeが内部推論プロセスに使用できる最大トークン数を決定します。より大きな予算を設定することで、複雑な問題に対してより徹底的な分析を可能にし、応答の品質を向上させることができます。ただし、32K以上の範囲では、Claudeが割り当てられた予算全体を使用しない場合があります。
budget_tokens
は、常に指定されたmax_tokens
より小さくなければなりません。
APIレスポンスには思考とテキストの両方のコンテンツブロックが含まれます:
思考ブロックについて
思考ブロックはClaudeの内部思考プロセスを表します。Claudeが最小限の内部制限で問題に取り組めるようにしながら、安全基準とステートレスAPIを維持するために、以下のように実装されています:
-
思考ブロックには
signature
フィールドが含まれています。このフィールドには、思考ブロックがClaudeによって生成されたことを検証する暗号化トークンが含まれており、思考ブロックがAPIに戻されたときに検証されます。レスポンスをストリーミングする場合、署名はcontent_block_stop
イベントの直前にcontent_block_delta
イベント内のsignature_delta
として追加されます。拡張思考を使用したツール使用の場合にのみ、思考ブロックを送り返す必要があります。それ以外の場合は、以前のターンからの思考ブロックを省略するか、APIに送り返してもAPIが自動的に削除します。 -
時々、Claudeの内部推論が安全システムによってフラグが立てられることがあります。この場合、
thinking
ブロックの一部または全部が暗号化され、redacted_thinking
ブロックとして返されます。これらの編集された思考ブロックはAPIに戻されたときに復号化され、Claudeはコンテキストを失うことなく応答を継続できます。
以下は、通常の思考ブロックと編集された思考ブロックの両方を示す例です:
出力に編集された思考ブロックが表示されるのは想定された動作です。モデルは安全性の保護を維持しながら、この編集された推論を使用して応答を行うことができます。
アプリケーションで編集された思考の処理をテストする必要がある場合は、このプロンプトの特別なテスト文字列を使用できます:ANTHROPIC_MAGIC_STRING_TRIGGER_REDACTED_THINKING_46C9A13E193C177646C7398A98432ECCCE4C1253D5E2D82641AC0E52CC2876CB
複数ターンの会話でthinking
およびredacted_thinking
ブロックをAPIに戻す場合、最後のアシスタントターンの完全な未変更ブロックを含める必要があります。
これはモデルの推論の流れを維持するために重要です。すべての思考ブロックを常にAPIに戻すことをお勧めします。詳細については、思考ブロックの保持セクションを参照してください。
本番環境での編集された思考の処理に関する提案
拡張思考を使用するカスタマー向けアプリケーションを構築する場合:
- 編集された思考ブロックには人間が読めない暗号化されたコンテンツが含まれていることを認識してください
- 「Claudeの内部推論の一部が安全上の理由で自動的に暗号化されています。これは応答の品質には影響しません。」のような簡単な説明を提供することを検討してください
- ユーザーに思考ブロックを表示する場合、編集されたブロックをフィルタリングしながら通常の思考ブロックを保持できます
- 拡張思考機能の使用により、推論の一部が暗号化される可能性があることを透明に伝えてください
- UIを壊さずに編集された思考を適切に処理するエラー処理を実装してください
拡張思考のストリーミング
ストリーミングが有効な場合、thinking_delta
イベントを通じて思考コンテンツを受信します。以下は、思考を含むストリーミングの処理方法です:
ストリーミング出力の例:
思考を含むストリーミングの動作について
思考が有効な状態でストリーミングを使用する場合、テキストが時々大きなチャンクで到着し、小さなトークン単位の配信と交互に行われることがあります。これは特に思考コンテンツについて、予想される動作です。
ストリーミングシステムは最適なパフォーマンスのためにコンテンツをバッチで処理する必要があり、この「チャンキー」な配信パターンになることがあります。私たちは思考コンテンツがよりスムーズにストリーミングされるように、この体験を継続的に改善しています。
redacted_thinking
ブロックにはデルタは関連付けられず、単一のイベントとして送信されます。
拡張思考を使用する際の重要な考慮事項
思考予算の扱い方: 最小予算は1,024トークンです。最小値から始めて、ユースケースに対してClaudeが良好なパフォーマンスを発揮する最適な範囲を見つけるために、思考予算を段階的に増やすことをお勧めします。より高いトークン数を設定することで、より包括的で微妙な推論を実現できる可能性がありますが、タスクによっては収穫逓減の可能性もあります。
- 思考予算は厳密な制限ではなく目標値です - 実際のトークン使用量はタスクに応じて異なる場合があります。
- 推論プロセスに必要な追加処理により、応答時間が長くなる可能性があることを考慮してください。
max_tokens
が21,333を超える場合、ストリーミングが必要です。
32Kを超える思考予算について: 思考予算を32K以上に設定するワークロードについては、ネットワークの問題を避けるためにバッチ処理を使用することをお勧めします。モデルに32Kトークンを超える思考を要求すると、システムのタイムアウトやオープン接続制限に抵触する可能性のある長時間実行リクエストが発生します。
他の機能との思考の互換性:
- 思考は
temperature
、top_p
、top_k
の変更および強制ツール使用と互換性がありません。 - 思考が有効な場合、応答を事前に入力することはできません。
- 思考予算の変更により、メッセージを含むキャッシュされたプロンプトプレフィックスは無効になります。ただし、キャッシュされたシステムプロンプトとツール定義は、思考パラメータが変更されても引き続き機能します。
拡張思考の価格設定とトークン使用量
拡張思考トークンはコンテキストウィンドウにカウントされ、出力トークンとして課金されます。思考トークンは通常の出力トークンとして扱われるため、レート制限にもカウントされます。APIの使用を計画する際は、このトークン使用量の増加を考慮してください。
Claude 3.7 Sonnetの価格は以下の通りです:
トークンの使用 | コスト |
---|---|
入力トークン | $3 / MTok |
出力トークン(思考トークンを含む) | $15 / MTok |
プロンプトキャッシュの書き込み | $3.75 / MTok |
プロンプトキャッシュの読み取り | $0.30 / MTok |
拡張思考のバッチ処理はこれらの価格の50%オフで利用可能で、多くの場合1時間未満で完了します。
すべての拡張思考トークン(編集された思考トークンを含む)は出力トークンとして課金され、レート制限にカウントされます。
複数ターンの会話では、以前のアシスタントメッセージに関連する思考ブロックは入力トークンとして課金されません。
拡張思考が有効な場合、この機能をサポートするために28または29トークンの特殊なシステムプロンプトが自動的に含まれます。
拡張出力機能(ベータ版)
Claude 3.7 Sonnetは、最大128K出力トークン(ベータ版)をサポートし、他のClaudeモデルの15倍以上の長さの応答を生成できます。この拡張機能は、複雑な推論、豊富なコード生成、包括的なコンテンツ作成を含む拡張思考のユースケースに特に効果的です。
この機能は、anthropic-beta
ヘッダーにoutput-128k-2025-02-19
を渡すことで有効にできます。
より長い出力で拡張思考を使用する場合、より徹底的な推論をサポートするために大きな思考予算を割り当てながら、最終応答のために十分なトークンを確保できます。
この拡張出力機能では、ストリーミングまたはバッチモードの使用をお勧めします。詳細については、長時間のリクエストに関するネットワーク信頼性の考慮事項のガイダンスを参照してください。
プロンプトキャッシングと拡張思考の使用
思考を含むプロンプトキャッシングには、いくつかの重要な考慮事項があります:
キャッシュされたプロンプトへの思考ブロックの含め方
- 思考はアシスタントターンの生成時にのみ含まれ、キャッシュされることを意図していません。
- 以前のターンの思考ブロックは無視されます。
- 思考が無効になった場合、APIに渡された思考コンテンツは単に無視されます。
キャッシュ無効化のルール
- 思考パラメータの変更(有効化/無効化または予算の変更)により、メッセージで設定されたキャッシュブレークポイントは無効になります。
- システムプロンプトとツールは、思考パラメータが変更されてもキャッシュを維持します。
拡張思考を使用したプロンプトキャッシングの例
拡張思考を使用した最大トークンとコンテキストウィンドウサイズ
古いClaudeモデル(Claude 3.7 Sonnet以前)では、プロンプトトークンとmax_tokens
の合計がモデルのコンテキストウィンドウを超えた場合、システムは自動的にmax_tokens
を調整してコンテキスト制限内に収めていました。これは、大きなmax_tokens
値を設定すると、システムが必要に応じて自動的に削減することを意味していました。
Claude 3.7 Sonnetでは、max_tokens
(思考が有効な場合は思考予算を含む)は厳密な制限として適用されます。プロンプトトークン + max_tokens
がコンテキストウィンドウサイズを超える場合、システムは検証エラーを返すようになりました。
拡張思考を使用したコンテキストウィンドウの計算方法
思考が有効な場合のコンテキストウィンドウの計算には、いくつかの考慮事項があります:
- 以前のターンからの思考ブロックは削除され、コンテキストウィンドウにはカウントされません
- 現在のターンの思考は、そのターンの
max_tokens
制限にカウントされます
以下の図は、拡張思考が有効な場合の特殊なトークン管理を示しています:
有効なコンテキストウィンドウは以下のように計算されます:
特に思考を含む複数ターンの会話を扱う場合は、トークンカウントAPIを使用して、特定のユースケースの正確なトークン数を取得することをお勧めします。
より詳しい説明については、コンテキストウィンドウに関するガイドをご覧ください。
拡張思考を使用したトークンの管理
Claude 3.7 Sonnetのような拡張思考モデルでの新しいコンテキストウィンドウとmax_tokens
の動作を考慮すると、以下が必要になる場合があります:
- トークン使用量をより積極的に監視および管理する
- プロンプトの長さが変更されたときに
max_tokens
の値を調整する - トークンカウントエンドポイントをより頻繁に使用する可能性がある
- 以前の思考ブロックがコンテキストウィンドウに蓄積されないことを認識する
この変更は、特に最大トークン制限が大幅に増加したことを考慮して、より予測可能で透明性のある動作を提供するために行われました。
ツール使用と拡張思考
ツール使用と拡張思考を組み合わせる場合、以下の動作パターンに注意してください:
-
最初のアシスタントターン:最初のユーザーメッセージを送信すると、アシスタントの応答には思考ブロックとツール使用リクエストが含まれます。
-
ツール結果ターン:ツール結果ブロックを含むユーザーメッセージを渡すと、後続のアシスタントメッセージには追加の思考ブロックは含まれません。
ここで詳しく説明すると、思考を含むツール使用の会話の通常の順序は以下のステップに従います:
- ユーザーが最初のメッセージを送信
- アシスタントが思考ブロックとツールリクエストで応答
- ユーザーがツール結果を含むメッセージを送信
- アシスタントが追加のツール呼び出しまたはテキストのみで応答(この応答には思考ブロックは含まれない)
- さらにツールが要求された場合、会話が完了するまでステップ3-4を繰り返す
この設計により、Claudeはツールリクエストを行う前に推論プロセスを表示できますが、ツール結果を受信した後は思考プロセスを繰り返しません。Claudeは、次の非tool_result
のuser
ターンの後まで、別の思考ブロックを出力しません。
以下の図は、拡張思考とツール使用を組み合わせた場合のコンテキストウィンドウトークン管理を示しています:
思考ブロックの保持
ツール使用中は、thinking
およびredacted_thinking
ブロックをAPIに戻す必要があり、完全な未変更ブロックをAPIに含める必要があります。これはモデルの推論の流れと会話の整合性を維持するために重要です。
以前のassistant
ロールターンからのthinking
およびredacted_thinking
ブロックを省略できますが、複数ターンの会話ではすべての思考ブロックを常にAPIに戻すことをお勧めします。APIは:
- 提供された思考ブロックを自動的にフィルタリング
- モデルの推論を保持するために必要な関連する思考ブロックを使用
- Claudeに表示されるブロックの入力トークンのみを課金
思考ブロックを保持する必要がある理由
Claudeがツールを呼び出すとき、外部情報を待つために応答の構築を一時停止します。ツール結果が返されると、Claudeはその既存の応答の構築を継続します。これにより、以下の理由でツール使用中に思考ブロックを保持する必要があります:
-
推論の継続性:思考ブロックは、ツールリクエストにつながったClaudeの段階的な推論を捉えています。ツール結果を投稿するとき、元の思考を含めることで、Claudeは中断した場所から推論を継続できます。
-
コンテキストの維持:ツール結果はAPI構造ではユーザーメッセージとして表示されますが、これらは連続的な推論の流れの一部です。思考ブロックを保持することで、複数のAPI呼び出しにわたってこの概念的な流れを維持します。
重要:thinking
またはredacted_thinking
ブロックを提供する場合、連続するthinking
またはredacted_thinking
ブロックの全シーケンスは、元のリクエスト中にモデルが生成した出力と一致する必要があります。これらのブロックのシーケンスを並べ替えたり変更したりすることはできません。
拡張思考モードを最大限活用するためのヒント
拡張思考を最大限活用するために:
-
適切な予算を設定する:複雑なタスクには大きな思考予算(16,000以上のトークン)から始めて、必要に応じて調整します。
-
思考トークン予算を実験する:モデルは異なる最大思考予算設定で異なるパフォーマンスを示す可能性があります。最大思考予算を増やすと、レイテンシーが増加する代わりにモデルがより良く/より深く考えることができます。重要なタスクでは、品質とパフォーマンスの最適なバランスを見つけるために、異なる予算設定をテストすることを検討してください。
-
以前の思考ブロックを自分で削除する必要はありません:Anthropic APIは以前のターンからの思考ブロックを自動的に無視し、コンテキスト使用量の計算に含めません。
-
トークン使用量を監視する:コストとパフォーマンスを最適化するために、思考トークンの使用量を追跡します。
-
特に複雑なタスクに拡張思考を使用する:数学、コーディング、分析など、段階的な推論が有益なタスクに思考を有効にします。
-
応答時間の延長を考慮する:思考ブロックの生成により全体の応答時間が増加する可能性があることを考慮します。
-
ストリーミングを適切に処理する:ストリーミング時は、思考とテキストの両方のコンテンツブロックを到着時に処理できるように準備します。
-
プロンプトエンジニアリング:Claudeの思考能力を最大限に活用したい場合は、拡張思考のプロンプトのヒントを確認してください。