プロンプトキャッシングは、プロンプト内の特定のプレフィックスから再開できるようにすることで、APIの使用を最適化します。これにより、繰り返しタスクや一貫した要素を持つプロンプトの処理時間とコストが大幅に削減されます。
This feature qualifies for Zero Data Retention (ZDR) with limited technical retention. See the Data retention section for details on what is retained and why.
プロンプトキャッシングを有効にする方法は2つあります:
cache_controlフィールドを追加します。システムは最後のキャッシュ可能なブロックにキャッシュブレークポイントを自動的に適用し、会話が成長するにつれて前進させます。会話履歴が自動的にキャッシュされるべきマルチターン会話に最適です。cache_controlを配置して、キャッシュされる内容を細かく制御します。最も簡単な開始方法は自動キャッシングです:
curl https://api.anthropic.com/v1/messages \
-H "content-type: application/json" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-opus-4-6",
"max_tokens": 1024,
"cache_control": {"type": "ephemeral"},
"system": "You are an AI assistant tasked with analyzing literary works. Your goal is to provide insightful commentary on themes, characters, and writing style.",
"messages": [
{
"role": "user",
"content": "Analyze the major themes in Pride and Prejudice."
}
]
}'自動キャッシングでは、システムは最後のキャッシュ可能なブロックまでのすべてのコンテンツをキャッシュします。同じプレフィックスを持つ後続のリクエストでは、キャッシュされたコンテンツが自動的に再利用されます。
プロンプトキャッシングを有効にしてリクエストを送信すると:
これは特に以下の場合に役立ちます:
デフォルトでは、キャッシュの有効期間は5分です。キャッシュされたコンテンツが使用されるたびに、追加コストなしでキャッシュが更新されます。
5分では短すぎる場合、Anthropicは追加コストで1時間のキャッシュ期間も提供しています。
詳細については、1時間のキャッシュ期間を参照してください。
プロンプトキャッシングはフルプレフィックスをキャッシュします
プロンプトキャッシングは、cache_controlで指定されたブロックまでを含む、tools、system、messages(この順序で)のプロンプト全体を参照します。
プロンプトキャッシングは新しい料金体系を導入します。以下の表は、サポートされている各モデルの100万トークンあたりの価格を示しています:
| Model | Base Input Tokens | 5m Cache Writes | 1h Cache Writes | Cache Hits & Refreshes | Output Tokens |
|---|---|---|---|---|---|
| Claude Opus 4.6 | $5 / MTok | $6.25 / MTok | $10 / MTok | $0.50 / MTok | $25 / MTok |
| Claude Opus 4.5 | $5 / MTok | $6.25 / MTok | $10 / MTok | $0.50 / MTok | $25 / MTok |
| 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.6 | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
| Claude Sonnet 4.5 | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
| Claude Sonnet 4 | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
| Claude Sonnet 3.7 (deprecated) | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
| Claude Haiku 4.5 | $1 / MTok | $1.25 / MTok | $2 / MTok | $0.10 / MTok | $5 / 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 |
上記の表は、プロンプトキャッシングの以下の料金乗数を反映しています:
これらの乗数は、Batch APIの割引、長いコンテキストの料金、データレジデンシーなど、他の料金修飾子と組み合わせて適用されます。詳細については料金を参照してください。
プロンプトキャッシング(自動および明示的の両方)は現在以下でサポートされています:
自動キャッシングはプロンプトキャッシングを有効にする最も簡単な方法です。個々のコンテンツブロックにcache_controlを配置する代わりに、リクエストボディのトップレベルに単一のcache_controlフィールドを追加します。システムは最後のキャッシュ可能なブロックにキャッシュブレークポイントを自動的に適用します。
curl https://api.anthropic.com/v1/messages \
-H "content-type: application/json" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-opus-4-6",
"max_tokens": 1024,
"cache_control": {"type": "ephemeral"},
"system": "You are a helpful assistant that remembers our conversation.",
"messages": [
{"role": "user", "content": "My name is Alex. I work on machine learning."},
{"role": "assistant", "content": "Nice to meet you, Alex! How can I help with your ML work today?"},
{"role": "user", "content": "What did I say I work on?"}
]
}'自動キャッシングでは、会話が成長するにつれてキャッシュポイントが自動的に前進します。各新しいリクエストは最後のキャッシュ可能なブロックまでのすべてをキャッシュし、以前のコンテンツはキャッシュから読み取られます。
| リクエスト | コンテンツ | キャッシュの動作 |
|---|---|---|
| リクエスト1 | System + User(1) + Asst(1) + User(2) ◀ キャッシュ | すべてがキャッシュに書き込まれる |
| リクエスト2 | System + User(1) + Asst(1) + User(2) + Asst(2) + User(3) ◀ キャッシュ | SystemからUser(2)までキャッシュから読み取り; Asst(2) + User(3)がキャッシュに書き込まれる |
| リクエスト3 | System + User(1) + Asst(1) + User(2) + Asst(2) + User(3) + Asst(3) + User(4) ◀ キャッシュ | SystemからUser(3)までキャッシュから読み取り; Asst(3) + User(4)がキャッシュに書き込まれる |
キャッシュブレークポイントは各リクエストの最後のキャッシュ可能なブロックに自動的に移動するため、会話が成長してもcache_controlマーカーを更新する必要はありません。
デフォルトでは、自動キャッシングは5分のTTLを使用します。基本入力トークン価格の2倍で1時間のTTLを指定できます:
"cache_control": {"type": "ephemeral", "ttl": "1h"}自動キャッシングは明示的なキャッシュブレークポイントと互換性があります。一緒に使用する場合、自動キャッシュブレークポイントは利用可能な4つのブレークポイントスロットのうちの1つを使用します。
これにより、両方のアプローチを組み合わせることができます。例えば、明示的なブレークポイントを使用してシステムプロンプトとツールを独立してキャッシュしながら、自動キャッシングで会話を処理します:
{
"model": "claude-opus-4-6",
"max_tokens": 1024,
"cache_control": {"type": "ephemeral"},
"system": [
{
"type": "text",
"text": "You are a helpful assistant.",
"cache_control": {"type": "ephemeral"}
}
],
"messages": [...]
}自動キャッシングは同じ基盤となるキャッシングインフラストラクチャを使用します。料金、最小トークンしきい値、コンテキスト順序要件、および20ブロックのルックバックウィンドウはすべて、明示的なブレークポイントと同様に適用されます。
cache_controlがある場合、自動キャッシングは何もしません。cache_controlがある場合、APIは400エラーを返します。自動キャッシングはClaude APIとAzure AI Foundry(プレビュー)で利用可能です。Amazon BedrockとGoogle Vertex AIのサポートは後日提供予定です。
キャッシングをより細かく制御するために、個々のコンテンツブロックに直接cache_controlを配置できます。これは、異なる頻度で変化するセクションをキャッシュする必要がある場合や、キャッシュされる内容を細かく制御する必要がある場合に役立ちます。
静的コンテンツ(ツール定義、システム指示、コンテキスト、例)をプロンプトの先頭に配置します。cache_controlパラメータを使用して、再利用可能なコンテンツの終わりをキャッシング用にマークします。
キャッシュプレフィックスは次の順序で作成されます:tools、system、次にmessages。この順序は、各レベルが前のレベルの上に構築される階層を形成します。
静的コンテンツの末尾に1つのキャッシュブレークポイントを使用するだけで、システムはキャッシュされたブロックの最長一致シーケンスを自動的に見つけます。これがどのように機能するかを理解することで、キャッシング戦略を最適化できます。
3つのコア原則:
キャッシュキーは累積的:cache_controlでブロックを明示的にキャッシュする場合、キャッシュハッシュキーは会話内のすべての前のブロックを順番にハッシュすることで生成されます。これは、各ブロックのキャッシュがその前に来たすべてのコンテンツに依存することを意味します。
後方順次チェック:システムは明示的なブレークポイントから後方に向かって作業し、各前のブロックを逆順にチェックすることでキャッシュヒットを確認します。これにより、可能な限り長いキャッシュヒットが得られます。
20ブロックのルックバックウィンドウ:システムは各明示的なcache_controlブレークポイントの前の最大20ブロックのみをチェックします。一致なしで20ブロックをチェックした後、チェックを停止し、次の明示的なブレークポイント(存在する場合)に移動します。
例:ルックバックウィンドウの理解
30のコンテンツブロックを持つ会話で、ブロック30にのみcache_controlを設定した場合を考えます:
前のブロックに変更なしでブロック31を送信する場合:システムはブロック30をチェックします(一致!)。ブロック30でキャッシュヒットが得られ、ブロック31のみ処理が必要です。
ブロック25を変更してブロック31を送信する場合:システムはブロック30 → 29 → 28... → 25(一致なし)→ 24(一致!)と後方にチェックします。ブロック24は変更されていないため、ブロック24でキャッシュヒットが得られ、ブロック25〜30のみ再処理が必要です。
ブロック5を変更してブロック31を送信する場合:システムはブロック30 → 29 → 28... → 11(チェック#20)と後方にチェックします。一致なしで20回チェックした後、チェックを停止します。ブロック5は20ブロックウィンドウを超えているため、キャッシュヒットは発生せず、すべてのブロックを再処理する必要があります。ただし、ブロック5に明示的なcache_controlブレークポイントを設定していた場合、システムはそのブレークポイントからチェックを続けます:ブロック5(一致なし)→ ブロック4(一致!)。これにより、ブロック4でキャッシュヒットが可能になり、編集可能なコンテンツの前にブレークポイントを配置すべき理由を示しています。
重要なポイント:キャッシュヒットの可能性を最大化するために、常に会話の末尾に明示的なキャッシュブレークポイントを設定してください。また、編集可能なコンテンツブロックの直前にブレークポイントを設定して、それらのセクションを独立してキャッシュできるようにしてください。
以下の場合に最大4つのキャッシュブレークポイントを定義できます:
重要な制限:キャッシュブレークポイントの前に20以上のコンテンツブロックがあり、それらの20ブロックより前のコンテンツを変更した場合、そのコンテンツの近くに追加の明示的なブレークポイントを追加しない限り、キャッシュヒットは得られません。
キャッシュブレークポイント自体は追加コストを発生させません。 課金されるのは以下のみです:
cache_controlブレークポイントを追加してもコストは増加しません。実際にキャッシュされ読み取られたコンテンツに基づいて同じ金額を支払います。ブレークポイントは、どのセクションを独立してキャッシュできるかを制御するだけです。
キャッシュ可能な最小プロンプト長は:
短いプロンプトはcache_controlでマークされていてもキャッシュできません。この数より少ないトークンをキャッシュするリクエストはキャッシングなしで処理されます。プロンプトがキャッシュされたかどうかを確認するには、レスポンスの使用状況フィールドを参照してください。
並行リクエストの場合、キャッシュエントリは最初のレスポンスが開始された後にのみ利用可能になることに注意してください。並行リクエストのキャッシュヒットが必要な場合は、後続のリクエストを送信する前に最初のレスポンスを待ってください。
現在、「ephemeral」がサポートされている唯一のキャッシュタイプであり、デフォルトで5分の有効期間があります。
リクエスト内のほとんどのブロックをキャッシュできます。これには以下が含まれます:
tools配列内のツール定義system配列内のコンテンツブロックmessages.content配列内のコンテンツブロックmessages.content配列内のコンテンツブロックmessages.content配列内のコンテンツブロックこれらの各要素は、自動的にまたはcache_controlでマークすることでキャッシュできます。
ほとんどのリクエストブロックはキャッシュできますが、いくつかの例外があります:
Thinkingブロックはcache_controlで直接キャッシュできません。ただし、thinkingブロックは以前のアシスタントターンに表示される場合、他のコンテンツと一緒にキャッシュできます。この方法でキャッシュされた場合、キャッシュから読み取られると入力トークンとしてカウントされます。
サブコンテンツブロック(引用など)自体は直接キャッシュできません。代わりに、トップレベルのブロックをキャッシュしてください。
引用の場合、引用のソース素材として機能するトップレベルのドキュメントコンテンツブロックをキャッシュできます。これにより、引用が参照するドキュメントをキャッシュすることで、引用と一緒にプロンプトキャッシングを効果的に使用できます。
空のテキストブロックはキャッシュできません。
キャッシュされたコンテンツへの変更は、キャッシュの一部またはすべてを無効にする可能性があります。
プロンプトの構造化で説明したように、キャッシュは階層に従います:tools → system → messages。各レベルでの変更は、そのレベルとそれ以降のすべてのレベルを無効にします。
以下の表は、異なる種類の変更によってキャッシュのどの部分が無効になるかを示しています。✘はキャッシュが無効になることを示し、✓はキャッシュが有効のままであることを示します。
| 変更内容 | ツールキャッシュ | システムキャッシュ | メッセージキャッシュ | 影響 |
|---|---|---|---|---|
| ツール定義 | ✘ | ✘ | ✘ | ツール定義(名前、説明、パラメータ)の変更はキャッシュ全体を無効にします |
| ウェブ検索の切り替え | ✓ | ✘ | ✘ | ウェブ検索の有効化/無効化はシステムプロンプトを変更します |
| 引用の切り替え | ✓ | ✘ | ✘ | 引用の有効化/無効化はシステムプロンプトを変更します |
| 速度設定 | ✓ | ✘ | ✘ | speed: "fast"と標準速度の切り替えはシステムとメッセージキャッシュを無効にします |
| ツール選択 | ✓ | ✓ | ✘ | tool_choiceパラメータへの変更はメッセージブロックにのみ影響します |
| 画像 | ✓ | ✓ | ✘ | プロンプト内のどこかで画像を追加/削除するとメッセージブロックに影響します |
| Thinkingパラメータ | ✓ | ✓ | ✘ | 拡張thinking設定(有効化/無効化、バジェット)への変更はメッセージブロックに影響します |
| 拡張thinkingリクエストに渡される非ツール結果 | ✓ | ✓ | ✘ | 拡張thinkingが有効な状態でリクエストに非ツール結果が渡される場合、以前にキャッシュされたすべてのthinkingブロックがコンテキストから削除され、それらのthinkingブロックに続くコンテキスト内のメッセージはキャッシュから削除されます。詳細については、thinkingブロックを使用したキャッシングを参照してください。 |
レスポンスのusage内(またはストリーミングの場合はmessage_startイベント内)のこれらのAPIレスポンスフィールドを使用してキャッシュパフォーマンスを監視します:
cache_creation_input_tokens:新しいエントリを作成する際にキャッシュに書き込まれたトークン数。cache_read_input_tokens:このリクエストのためにキャッシュから取得されたトークン数。input_tokens:キャッシュから読み取られたり、キャッシュの作成に使用されたりしなかった入力トークン数(つまり、最後のキャッシュブレークポイント以降のトークン)。トークンの内訳を理解する
input_tokensフィールドは、リクエスト内の最後のキャッシュブレークポイントの後に来るトークンのみを表します。送信したすべての入力トークンではありません。
合計入力トークンを計算するには:
total_input_tokens = cache_read_input_tokens + cache_creation_input_tokens + input_tokens空間的な説明:
cache_read_input_tokens = ブレークポイント前のすでにキャッシュされたトークン(読み取り)cache_creation_input_tokens = ブレークポイント前の現在キャッシュされているトークン(書き込み)input_tokens = 最後のブレークポイント以降のトークン(キャッシュ対象外)例: 100,000トークンのキャッシュされたコンテンツ(キャッシュから読み取り)、新しくキャッシュされるコンテンツ0トークン、ユーザーメッセージ50トークン(キャッシュブレークポイント以降)のリクエストがある場合:
cache_read_input_tokens:100,000cache_creation_input_tokens:0input_tokens:50これは、input_tokensがキャッシングを効果的に使用している場合の合計入力よりも通常はるかに小さくなるため、コストとレート制限の両方を理解するために重要です。
拡張thinkingをプロンプトキャッシングと一緒に使用する場合、thinkingブロックには特別な動作があります:
他のコンテンツと一緒の自動キャッシング:thinkingブロックはcache_controlで明示的にマークできませんが、ツール結果を渡して会話を続ける後続のAPI呼び出しを行う際に、リクエストコンテンツの一部としてキャッシュされます。これは、thinkingブロックを渡して会話を続けるツール使用中によく発生します。
入力トークンのカウント:thinkingブロックがキャッシュから読み取られると、使用状況メトリクスで入力トークンとしてカウントされます。これはコスト計算とトークンバジェットに重要です。
キャッシュ無効化パターン:
cache_controlマーカーなしでも発生しますキャッシュ無効化の詳細については、キャッシュを無効にするものを参照してください。
ツール使用の例:
リクエスト1: ユーザー: "パリの天気は?"
レスポンス: [thinking_block_1] + [tool_use block 1]
リクエスト2:
ユーザー: ["パリの天気は?"],
アシスタント: [thinking_block_1] + [tool_use block 1],
ユーザー: [tool_result_1, cache=True]
レスポンス: [thinking_block_2] + [text block 2]
# リクエスト2はそのリクエストコンテンツをキャッシュします(レスポンスではない)
# キャッシュには:ユーザーメッセージ、thinking_block_1、tool_use block 1、tool_result_1が含まれます
リクエスト3:
ユーザー: ["パリの天気は?"],
アシスタント: [thinking_block_1] + [tool_use block 1],
ユーザー: [tool_result_1, cache=True],
アシスタント: [thinking_block_2] + [text block 2],
ユーザー: [テキストレスポンス, cache=True]
# 非ツール結果のユーザーブロックにより、すべてのthinkingブロックが無視されます
# このリクエストはthinkingブロックが存在しなかったかのように処理されます非ツール結果のユーザーブロックが含まれると、新しいアシスタントループが指定され、以前のすべてのthinkingブロックがコンテキストから削除されます。
詳細については、拡張thinkingドキュメントを参照してください。
2026年2月5日から、プロンプトキャッシングは組織レベルの分離ではなくワークスペースレベルの分離を使用します。キャッシュはワークスペースごとに分離され、同じ組織内のワークスペース間のデータ分離が確保されます。この変更はClaude APIとAzure AI Foundry(プレビュー)に適用されます。Amazon BedrockとGoogle Vertex AIは組織レベルのキャッシュ分離を維持します。複数のワークスペースを使用している場合は、この変更を考慮してキャッシング戦略を見直してください。
組織の分離:キャッシュは組織間で分離されています。異なる組織は、同一のプロンプトを使用していても、キャッシュを共有しません。
完全一致:キャッシュヒットには、キャッシュコントロールでマークされたブロックまでのすべてのテキストと画像を含む、100%同一のプロンプトセグメントが必要です。
出力トークン生成:プロンプトキャッシングは出力トークン生成に影響しません。受け取るレスポンスは、プロンプトキャッシングを使用しない場合と同一です。
プロンプトキャッシングのパフォーマンスを最適化するには:
シナリオに合わせてプロンプトキャッシング戦略を調整してください:
予期しない動作が発生した場合:
cache_controlマーカーが同じ場所にあることを確認してくださいtool_choiceと画像の使用が呼び出し間で一貫していることを確認してくださいcache_controlパラメータが必要になる場合がありますtool_useコンテンツブロックのキーが安定した順序を持っていることを確認してください。一部の言語(例えば、Swift、Go)はJSON変換中にキーの順序をランダム化し、キャッシュを壊しますプロンプト内のどこかでのtool_choiceの変更や画像の存在/不在は、キャッシュを無効にし、新しいキャッシュエントリを作成する必要があります。キャッシュ無効化の詳細については、キャッシュを無効にするものを参照してください。
5分では短すぎる場合、Anthropicは追加コストで1時間のキャッシュ期間も提供しています。
拡張キャッシュを使用するには、次のようにcache_control定義にttlを含めます:
"cache_control": {
"type": "ephemeral",
"ttl": "1h"
}レスポンスには次のような詳細なキャッシュ情報が含まれます:
{
"usage": {
"input_tokens": 2048,
"cache_read_input_tokens": 1800,
"cache_creation_input_tokens": 248,
"output_tokens": 503,
"cache_creation": {
"ephemeral_5m_input_tokens": 456,
"ephemeral_1h_input_tokens": 100
}
}
}現在のcache_creation_input_tokensフィールドはcache_creationオブジェクト内の値の合計と等しいことに注意してください。
定期的なペースで使用されるプロンプト(つまり、5分ごとより頻繁に使用されるシステムプロンプト)がある場合は、引き続き5分キャッシュを使用してください。追加料金なしで更新され続けます。
1時間キャッシュは以下のシナリオで最も効果的です:
5分キャッシュと1時間キャッシュはレイテンシに関して同じように動作します。長いドキュメントでは一般的に最初のトークンまでの時間が改善されます。
同じリクエストで1時間と5分のキャッシュコントロールの両方を使用できますが、重要な制約があります:TTLが長いキャッシュエントリは短いTTLの前に表示される必要があります(つまり、1時間のキャッシュエントリは5分のキャッシュエントリの前に表示される必要があります)。
TTLを混在させる場合、プロンプト内の3つの請求位置を決定します:
A:最高のキャッシュヒットのトークン数(ヒットがない場合は0)。B:Aの後の最高の1時間cache_controlブロックのトークン数(存在しない場合はAと等しい)。C:最後のcache_controlブロックのトークン数。Bおよび/またはCがAより大きい場合、Aが最高のキャッシュヒットであるため、必然的にキャッシュミスになります。
以下の料金が課金されます:
Aのキャッシュ読み取りトークン。(B - A)の1時間キャッシュ書き込みトークン。(C - B)の5分キャッシュ書き込みトークン。以下は3つの例です。これは3つのリクエストの入力トークンを示しており、それぞれ異なるキャッシュヒットとキャッシュミスがあります。それぞれ異なる計算された料金があり、結果として色付きのボックスに示されています。
プロンプトキャッシングを始めるにあたり、詳細な例とベストプラクティスを含むプロンプトキャッシングクックブックを用意しています。
以下に、様々なプロンプトキャッシングパターンを示すコードスニペットをいくつか掲載しています。これらの例は、異なるシナリオでキャッシングを実装する方法を示しており、この機能の実用的な応用を理解するのに役立ちます。
プロンプトキャッシングは、キャッシュされたコンテンツのKV(キーバリュー)キャッシュ表現と暗号ハッシュを保存しますが、プロンプトや応答の生テキストは保存しません。キャッシュエントリの最小有効期間は5分(標準)または60分(拡張)です。キャッシュエントリは組織間で分離されています。Anthropicは生のプロンプトや応答テキストを保存しないため、この機能はZDR型のデータ保持コミットメントを必要とするお客様に適している場合があります。
すべての機能にわたるZDR適格性については、APIとデータ保持をご覧ください。
Was this page helpful?