プロンプトキャッシュは、プロンプト内の特定のプレフィックスから再開することでAPIの使用を最適化する強力な機能です。
cache_control
ブロックを使用してMessages APIでプロンプトキャッシュを実装する方法の例です:
cache_control
パラメータを使用してキャッシュされています。これにより、この大きなテキストを毎回再処理することなく、複数のAPI呼び出しで再利用できます。ユーザーメッセージのみを変更することで、キャッシュされたコンテンツを活用しながら本について様々な質問をすることができ、より高速な応答と効率の向上につながります。
cache_control
で指定されたブロックまでの完全なプロンプト - tools
、system
、messages
(この順序で)を参照します。Model | Base Input Tokens | 5m Cache Writes | 1h Cache Writes | Cache Hits & Refreshes | Output Tokens |
---|---|---|---|---|---|
Claude Opus 4.1 | $15 / MTok | $18.75 / MTok | $30 / MTok | $1.50 / MTok | $75 / MTok |
Claude Opus 4 | $15 / MTok | $18.75 / MTok | $30 / MTok | $1.50 / MTok | $75 / MTok |
Claude Sonnet 4 | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
Claude Sonnet 3.7 | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
Claude Sonnet 3.5 (deprecated) | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
Claude Haiku 3.5 | $0.80 / MTok | $1 / MTok | $1.6 / MTok | $0.08 / MTok | $4 / MTok |
Claude Opus 3 (deprecated) | $15 / MTok | $18.75 / MTok | $30 / MTok | $1.50 / MTok | $75 / MTok |
Claude Haiku 3 | $0.25 / MTok | $0.30 / MTok | $0.50 / MTok | $0.03 / MTok | $1.25 / MTok |
cache_control
パラメータを使用して、キャッシュ用の再利用可能なコンテンツの終了をマークします。
キャッシュプレフィックスは次の順序で作成されます:tools
、system
、次にmessages
。この順序は、各レベルが前のレベルの上に構築される階層を形成します。
cache_control
ブレークポイントを追加すると、システムは自動的に以前のすべてのコンテンツブロック境界(明示的なブレークポイントから約20ブロック前まで)でキャッシュヒットをチェックしますcache_control
でマークされていてもキャッシュできません。この数より少ないトークンをキャッシュするリクエストは、キャッシュなしで処理されます。プロンプトがキャッシュされたかどうかを確認するには、応答使用量フィールドを参照してください。
並行リクエストの場合、キャッシュエントリは最初の応答が開始された後にのみ利用可能になることに注意してください。並列リクエストでキャッシュヒットが必要な場合は、最初の応答を待ってから後続のリクエストを送信してください。
現在、「ephemeral」が唯一サポートされているキャッシュタイプで、デフォルトで5分の有効期間があります。
cache_control
ブレークポイントを追加してもコストは増加しません - 実際にキャッシュされ読み取られるコンテンツに基づいて同じ金額を支払います。ブレークポイントは、どのセクションを独立してキャッシュできるかを制御するだけです。
cache_control
でキャッシュ用に指定できます。これには以下が含まれます:
tools
配列内のツール定義system
配列内のコンテンツブロックmessages.content
配列内のコンテンツブロックmessages.content
配列内のコンテンツブロックmessages.content
配列内のコンテンツブロックcache_control
でマークして、リクエストのその部分のキャッシュを有効にできます。
cache_control
で直接キャッシュできません。ただし、思考ブロックは以前のアシスタントターンに現れる場合、他のコンテンツと一緒にキャッシュできます。この方法でキャッシュされた場合、キャッシュから読み取られるときに入力トークンとしてカウントされます。
tools
→ system
→ messages
。各レベルでの変更は、そのレベルとそれ以降のすべてのレベルを無効にします。
以下の表は、異なるタイプの変更によってキャッシュのどの部分が無効になるかを示しています。✘はキャッシュが無効になることを示し、✓はキャッシュが有効のままであることを示します。
変更内容 | ツールキャッシュ | システムキャッシュ | メッセージキャッシュ | 影響 |
---|---|---|---|---|
ツール定義 | ✘ | ✘ | ✘ | ツール定義(名前、説明、パラメータ)の変更はキャッシュ全体を無効にします |
ウェブ検索の切り替え | ✓ | ✘ | ✘ | ウェブ検索の有効/無効はシステムプロンプトを変更します |
引用の切り替え | ✓ | ✘ | ✘ | 引用の有効/無効はシステムプロンプトを変更します |
ツール選択 | ✓ | ✓ | ✘ | tool_choice パラメータの変更はメッセージブロックのみに影響します |
画像 | ✓ | ✓ | ✘ | プロンプト内のどこかで画像を追加/削除するとメッセージブロックに影響します |
思考パラメータ | ✓ | ✓ | ✘ | 拡張思考設定(有効/無効、予算)の変更はメッセージブロックに影響します |
拡張思考リクエストに渡される非ツール結果 | ✓ | ✓ | ✘ | 拡張思考が有効な状態で非ツール結果がリクエストで渡されると、以前にキャッシュされたすべての思考ブロックがコンテキストから削除され、それらの思考ブロックに続くコンテキスト内のメッセージがキャッシュから削除されます。詳細については、思考ブロックでのキャッシュを参照してください。 |
usage
(またはストリーミングの場合はmessage_start
イベント)内の以下のAPIレスポンスフィールドを使用してキャッシュパフォーマンスを監視します:
cache_creation_input_tokens
: 新しいエントリを作成する際にキャッシュに書き込まれたトークン数。cache_read_input_tokens
: このリクエストでキャッシュから取得されたトークン数。input_tokens
: キャッシュから読み取られたり、キャッシュの作成に使用されたりしなかった入力トークン数。tool_choice
と画像の使用が呼び出し間で一貫していることを確認しますcache_control
パラメータが必要な場合がありますtool_choice
の変更やプロンプト内のどこかでの画像の存在/不在は、キャッシュを無効にし、新しいキャッシュエントリの作成を必要とします。キャッシュ無効化の詳細については、キャッシュを無効にするものを参照してください。cache_control
でマークできませんが、ツール結果で後続のAPI呼び出しを行う際にリクエストコンテンツの一部としてキャッシュされます。これは、思考ブロックを渡して会話を続ける際のツール使用中によく発生します。
入力トークンのカウント: 思考ブロックがキャッシュから読み取られる場合、使用量メトリクスで入力トークンとしてカウントされます。これはコスト計算とトークン予算にとって重要です。
キャッシュ無効化パターン:
cache_control
マーカーがなくても発生しますcache_control
定義にttl
を含めます:
cache_creation_input_tokens
フィールドは、cache_creation
オブジェクト内の値の合計と等しいことに注意してください。
A
:最高のキャッシュヒットでのトークン数(ヒットがない場合は0)。B
:A
の後の最高の1時間cache_control
ブロックでのトークン数(存在しない場合はA
と等しい)。C
:最後のcache_control
ブロックでのトークン数。B
および/またはC
がA
より大きい場合、A
が最高のキャッシュヒットであるため、必然的にキャッシュミスになります。A
のキャッシュ読み取りトークン。(B - A)
の1時間キャッシュ書き込みトークン。(C - B)
の5分キャッシュ書き込みトークン。大きなコンテキストキャッシュの例
input_tokens
: ユーザーメッセージのみのトークン数cache_creation_input_tokens
: 法的文書を含むシステムメッセージ全体のトークン数cache_read_input_tokens
: 0(最初のリクエストではキャッシュヒットなし)input_tokens
: ユーザーメッセージのみのトークン数cache_creation_input_tokens
: 0(新しいキャッシュ作成なし)cache_read_input_tokens
: キャッシュされたシステムメッセージ全体のトークン数ツール定義のキャッシュ
cache_control
パラメータは最後のツール(get_time
)に配置され、すべてのツールを静的プレフィックスの一部として指定しています。これは、get_weather
とget_time
より前に定義された他のツールを含むすべてのツール定義が、単一のプレフィックスとしてキャッシュされることを意味します。このアプローチは、毎回再処理することなく複数のリクエストで再利用したい一貫したツールセットがある場合に有用です。最初のリクエストの場合:input_tokens
: ユーザーメッセージのトークン数cache_creation_input_tokens
: すべてのツール定義とシステムプロンプトのトークン数cache_read_input_tokens
: 0(最初のリクエストではキャッシュヒットなし)input_tokens
: ユーザーメッセージのトークン数cache_creation_input_tokens
: 0(新しいキャッシュ作成なし)cache_read_input_tokens
: キャッシュされたすべてのツール定義とシステムプロンプトのトークン数マルチターン会話の継続
cache_control
でマークして、会話を段階的にキャッシュできるようにします。システムは自動的にフォローアップメッセージで最長の以前にキャッシュされたプレフィックスを検索して使用します。つまり、以前にcache_control
ブロックでマークされたブロックは、後でこれでマークされませんが、5分以内にヒットした場合はキャッシュヒット(およびキャッシュ更新!)と見なされます。さらに、cache_control
パラメータがシステムメッセージに配置されていることに注意してください。これは、これが(5分以上使用されずに)キャッシュから削除された場合、次のリクエストでキャッシュに再度追加されることを確実にするためです。このアプローチは、同じ情報を繰り返し処理することなく、進行中の会話でコンテキストを維持するのに有用です。これが適切に設定されている場合、各リクエストの使用量応答で以下が表示されるはずです:input_tokens
: 新しいユーザーメッセージのトークン数(最小限になります)cache_creation_input_tokens
: 新しいアシスタントとユーザーターンのトークン数cache_read_input_tokens
: 前のターンまでの会話のトークン数すべてをまとめる:複数のキャッシュブレークポイント
cache_control
パラメータは、すべてのツール定義をキャッシュします。
cache_control
でマークされ、会話が進行するにつれて段階的なキャッシュを可能にします。
input_tokens
: 最後のユーザーメッセージのトークンcache_creation_input_tokens
: すべてのキャッシュされたセグメント(ツール + 指示 + RAG文書 + 会話履歴)のトークンcache_read_input_tokens
: 0(キャッシュヒットなし)input_tokens
: 新しいユーザーメッセージのみのトークンcache_creation_input_tokens
: 会話履歴に追加された新しいトークンcache_read_input_tokens
: 以前にキャッシュされたすべてのトークン(ツール + 指示 + RAG文書 + 以前の会話)複数のキャッシュブレークポイントが必要ですか、それとも最後に1つあれば十分ですか?
キャッシュブレークポイントは追加コストがかかりますか?
キャッシュの有効期間はどのくらいですか?
いくつのキャッシュブレークポイントを使用できますか?
cache_control
パラメータを使用)を定義できます。プロンプトキャッシュはすべてのモデルで利用できますか?
プロンプトキャッシュは拡張思考とどのように機能しますか?
プロンプトキャッシュを有効にするにはどうすればよいですか?
cache_control
ブレークポイントを含めます。プロンプトキャッシュを他のAPI機能と一緒に使用できますか?
プロンプトキャッシュは料金にどのような影響を与えますか?
キャッシュを手動でクリアできますか?
キャッシュ戦略の効果をどのように追跡できますか?
cache_creation_input_tokens
とcache_read_input_tokens
フィールドを使用してキャッシュパフォーマンスを監視できます。キャッシュを破損させるものは何ですか?
プロンプトキャッシュはプライバシーとデータ分離をどのように処理しますか?
cache_control
を使用するのは安全です。コスト効率のためには、高度に可変な部分(例:ユーザーの任意の入力)をキャッシュから除外する方が良いです。
Batches APIでプロンプトキャッシュを使用できますか?
Pythonで「AttributeError: 'Beta' object has no attribute 'prompt_caching'」エラーが表示されるのはなぜですか?
「TypeError: Cannot read properties of undefined (reading 'messages')」が表示されるのはなぜですか?