Loading...
  • ビルド
  • 管理
  • モデルと料金
  • クライアントSDK
  • APIリファレンス
Search...
⌘K
Log in
プロンプトキャッシュ
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Solutions

  • AI agents
  • Code modernization
  • Coding
  • Customer support
  • Education
  • Financial services
  • Government
  • Life sciences

Partners

  • Amazon Bedrock
  • Google Cloud's Vertex AI

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Company

  • Anthropic
  • Careers
  • Economic Futures
  • Research
  • News
  • Responsible Scaling Policy
  • Security and compliance
  • Transparency

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Help and security

  • Availability
  • Status
  • Support
  • Discord

Terms and policies

  • Privacy policy
  • Responsible disclosure policy
  • Terms of service: Commercial
  • Terms of service: Consumer
  • Usage policy
ビルド/コンテキスト管理

プロンプトキャッシング

プロンプトキャッシングを使用してAPIの使用を最適化し、処理時間とコストを削減します

プロンプトキャッシングは、プロンプト内の特定のプレフィックスから再開することを可能にすることで、APIの使用を最適化します。これにより、反復的なタスクや一貫した要素を持つプロンプトの処理時間とコストが大幅に削減されます。

This feature is eligible for Zero Data Retention (ZDR). When your organization has a ZDR arrangement, data sent through this feature is not stored after the API response is returned.

プロンプトキャッシングを有効にする方法は2つあります。

  • 自動キャッシング: リクエストのトップレベルに単一のcache_controlフィールドを追加します。システムは自動的にキャッシュブレークポイントを最後のキャッシュ可能なブロックに適用し、会話が成長するにつれて前に移動します。会話履歴の成長を自動的にキャッシュする必要があるマルチターン会話に最適です。
  • 明示的なキャッシュブレークポイント: 個別のコンテンツブロックに直接cache_controlを配置して、キャッシュされる内容を細かく制御します。

最も簡単に始める方法は自動キャッシングです。

client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-opus-4-7",
    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'.",
        }
    ],
)
print(response.usage.model_dump_json())

自動キャッシングを使用すると、システムは最後のキャッシュ可能なブロックまでのすべてのコンテンツをキャッシュします。同じプレフィックスを持つ後続のリクエストでは、キャッシュされたコンテンツが自動的に再利用されます。


プロンプトキャッシングの仕組み

プロンプトキャッシングを有効にしてリクエストを送信すると:

  1. システムは、指定されたキャッシュブレークポイントまでのプロンプトプレフィックスが最近のクエリからキャッシュされているかどうかを確認します。
  2. 見つかった場合は、キャッシュされたバージョンを使用して、処理時間とコストを削減します。
  3. それ以外の場合は、完全なプロンプトを処理し、応答が開始されたらプレフィックスをキャッシュします。

これは特に以下の場合に役立ちます。

  • 多くの例を含むプロンプト
  • 大量のコンテキストまたは背景情報
  • 一貫した指示を持つ反復的なタスク
  • 長いマルチターン会話

デフォルトでは、キャッシュの有効期限は5分です。キャッシュされたコンテンツが使用されるたびに、キャッシュは追加コストなしで更新されます。

5分が短すぎる場合、Anthropicは追加コストで1時間のキャッシュ期間も提供しています。

詳細については、1時間のキャッシュ期間を参照してください。

プロンプトキャッシングは完全なプレフィックスをキャッシュします

プロンプトキャッシングは、cache_controlで指定されたブロックまでの、その順序でtools、system、およびmessagesを含む完全なプロンプトを参照します。


価格

プロンプトキャッシングは新しい価格体系を導入しています。以下の表は、サポートされている各モデルのトークンあたりの価格を示しています。

ModelBase Input Tokens5m Cache Writes1h Cache WritesCache Hits & RefreshesOutput Tokens
Claude Opus 4.7$5 / MTok$6.25 / MTok$10 / MTok$0.50 / MTok$25 / MTok
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

上記の表は、プロンプトキャッシングの以下の価格乗数を反映しています。

  • 5分キャッシュ書き込みトークンは基本入力トークン価格の1.25倍
  • 1時間キャッシュ書き込みトークンは基本入力トークン価格の2倍
  • キャッシュ読み取りトークンは基本入力トークン価格の0.1倍

これらの乗数は、Batch APIの割引やデータレジデンシーなどの他の価格修飾子と組み合わさります。詳細については、価格を参照してください。


サポートされているモデル

プロンプトキャッシング(自動と明示的の両方)は、すべてのアクティブなClaudeモデルでサポートされています。


自動キャッシング

自動キャッシングは、プロンプトキャッシングを有効にする最も簡単な方法です。個別のコンテンツブロックにcache_controlを配置する代わりに、リクエストボディのトップレベルに単一のcache_controlフィールドを追加します。システムは自動的にキャッシュブレークポイントを最後のキャッシュ可能なブロックに適用します。

client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-opus-4-7",
    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?"},
    ],
)
print(response.usage.model_dump_json())

マルチターン会話での自動キャッシングの仕組み

自動キャッシングを使用すると、会話が成長するにつれてキャッシュポイントが自動的に前に移動します。各新しいリクエストは最後のキャッシュ可能なブロックまでのすべてをキャッシュし、以前のコンテンツはキャッシュから読み取られます。

リクエストコンテンツキャッシュ動作
リクエスト1システム
+ ユーザー(1) + アシスタント(1)
+ ユーザー(2) ◀ キャッシュ
すべてキャッシュに書き込み
リクエスト2システム
+ ユーザー(1) + アシスタント(1)
+ ユーザー(2) + アシスタント(2)
+ ユーザー(3) ◀ キャッシュ
システムからユーザー(2)までキャッシュから読み取り;
アシスタント(2) + ユーザー(3)をキャッシュに書き込み
リクエスト3システム
+ ユーザー(1) + アシスタント(1)
+ ユーザー(2) + アシスタント(2)
+ ユーザー(3) + アシスタント(3)
+ ユーザー(4) ◀ キャッシュ
システムからユーザー(3)までキャッシュから読み取り;
アシスタント(3) + ユーザー(4)をキャッシュに書き込み

キャッシュブレークポイントは各リクエストの最後のキャッシュ可能なブロックに自動的に移動するため、会話が成長するにつれてcache_controlマーカーを更新する必要はありません。

TTLサポート

デフォルトでは、自動キャッシングは5分のTTLを使用します。基本入力トークン価格の2倍で1時間のTTLを指定できます。

{ "cache_control": { "type": "ephemeral", "ttl": "1h" } }

ブロックレベルのキャッシングとの組み合わせ

自動キャッシングは明示的なキャッシュブレークポイントと互換性があります。一緒に使用する場合、自動キャッシュブレークポイントは4つの利用可能なブレークポイントスロットの1つを使用します。

これにより、両方のアプローチを組み合わせることができます。たとえば、明示的なブレークポイントを使用してシステムプロンプトとツールを独立してキャッシュしながら、自動キャッシングが会話を処理します。

{
  "model": "claude-opus-4-7",
  "max_tokens": 1024,
  "cache_control": { "type": "ephemeral" },
  "system": [
    {
      "type": "text",
      "text": "You are a helpful assistant.",
      "cache_control": { "type": "ephemeral" }
    }
  ],
  "messages": [{ "role": "user", "content": "What are the key terms?" }]
}

変わらないもの

自動キャッシングは同じ基盤となるキャッシングインフラストラクチャを使用します。価格、最小トークン閾値、コンテキスト順序要件、および20ブロックのルックバックウィンドウはすべて、明示的なブレークポイントと同じように適用されます。

エッジケース

  • 最後のブロックが既に同じTTLで明示的なcache_controlを持っている場合、自動キャッシングは何もしません。
  • 最後のブロックが異なるTTLで明示的なcache_controlを持っている場合、APIは400エラーを返します。
  • 4つの明示的なブロックレベルのブレークポイントが既に存在する場合、APIは400エラーを返します(自動キャッシング用のスロットがありません)。
  • 最後のブロックが自動キャッシュブレークポイントターゲットとして適格でない場合、システムは静かに後ろに歩いて最も近い適格なブロックを見つけます。見つからない場合、キャッシングはスキップされます。

自動キャッシングはClaude APIおよびAzure AI Foundry(プレビュー)で利用可能です。Amazon BedrockおよびGoogle Vertex AIのサポートは後で提供される予定です。


明示的なキャッシュブレークポイント

キャッシングをより細かく制御するために、個別のコンテンツブロックに直接cache_controlを配置できます。これは、異なる頻度で変わるセクションをキャッシュする必要がある場合、または何がキャッシュされるかについて細かく制御する必要がある場合に役立ちます。

プロンプトの構造化

静的コンテンツ(ツール定義、システム指示、コンテキスト、例)をプロンプトの最初に配置します。cache_controlパラメータを使用して、キャッシング用の再利用可能なコンテンツの終わりをマークします。

キャッシュプレフィックスは次の順序で作成されます。tools、system、その後messages。この順序は、各レベルが前のレベルの上に構築される階層を形成します。

自動プレフィックスチェックの仕組み

最後の静的コンテンツの終わりに1つのキャッシュブレークポイントを使用でき、システムは自動的に前のリクエストが既にキャッシュに書き込んだ最長のプレフィックスを見つけます。これがどのように機能するかを理解することは、キャッシング戦略を最適化するのに役立ちます。

3つの核となる原則:

  1. キャッシュ書き込みはブレークポイントでのみ発生します。 ブロックをcache_controlでマークすると、正確に1つのキャッシュエントリが書き込まれます。そのブロックで終わるプレフィックスのハッシュです。システムは以前の位置のエントリを書き込みません。ハッシュは累積的で、ブレークポイントまでのすべてをカバーするため、ブレークポイント以前のブロックを変更すると、次のリクエストで異なるハッシュが生成されます。

  2. キャッシュ読み取りは前のリクエストが書き込んだエントリを後ろに探します。 各リクエストで、システムはブレークポイントでプレフィックスハッシュを計算し、一致するキャッシュエントリを確認します。存在しない場合、1ブロックずつ後ろに歩いて、各以前の位置でプレフィックスハッシュが既にキャッシュに存在するものと一致するかどうかを確認します。安定したコンテンツではなく、前のリクエストが書き込んだエントリを探しています。

  3. ルックバックウィンドウは20ブロックです。 システムはブレークポイントあたり最大20の位置をチェックし、ブレークポイント自体を最初としてカウントします。そのウィンドウ内で一致するエントリが見つからない場合、チェックは停止します(または、別の明示的なブレークポイントがある場合は、そこから再開します)。

例:成長する会話でのルックバック

各ターンで新しいブロックを追加し、各リクエストの最後のブロックにcache_controlを設定します。

  • ターン1: 10ブロック、ブロック10にブレークポイント。以前のキャッシュエントリは存在しません。システムはブロック10にエントリを書き込みます。
  • ターン2: 15ブロック、ブロック15にブレークポイント。ブロック15にはエントリがないため、システムはブロック10に戻ってターン1のエントリを見つけます。ブロック10でキャッシュヒット。システムはブロック11~15のみを新規に処理し、ブロック15に新しいエントリを書き込みます。
  • ターン3: 35ブロック、ブロック35にブレークポイント。システムは20の位置(ブロック35~16)をチェックして何も見つかりません。ターン2のエントリはブロック15にあり、ウィンドウの外側に1つの位置があるため、キャッシュヒットはありません。ブロック15に2番目のブレークポイントを追加すると、そこで2番目のルックバックウィンドウが開始され、ターン2のエントリが見つかります。

一般的な間違い:毎回変わるコンテンツのブレークポイント

プロンプトに大きな静的システムコンテキスト(ブロック1~5)と、タイムスタンプとユーザーメッセージを含むリクエストごとのブロック(ブロック6)があります。ブロック6にcache_controlを設定します。

  • リクエスト1: ブロック6でキャッシュ書き込み。ハッシュにはタイムスタンプが含まれます。
  • リクエスト2: タイムスタンプが異なるため、ブロック6でのプレフィックスハッシュが異なります。ルックバックはブロック5、4、3、2、1を通過しますが、システムはこれらの位置のいずれにもエントリを書き込みませんでした。キャッシュヒットなし。毎回新しいキャッシュ書き込みに対して支払い、読み取りは得られません。

ルックバックはブレークポイントの後ろの安定したコンテンツを見つけてキャッシュしません。前のリクエストが既に書き込んだエントリを見つけ、書き込みはブレークポイントでのみ発生します。cache_controlをブロック5(リクエスト全体で同じままのブロック)に移動すると、その後のすべてのリクエストがキャッシュされたプレフィックスを読み取ります。自動キャッシングは同じ罠に陥ります。ブレークポイントを最後のキャッシュ可能なブロックに配置しますが、この構造ではリクエストごとに変わるものなので、代わりにブロック5に明示的なブレークポイントを使用します。

重要なポイント: cache_controlを、共有したいリクエスト全体でプレフィックスが同じ最後のブロックに配置します。成長する会話では、各ターンが20ブロック未満を追加する限り、最後のブロックは機能します。以前のコンテンツは変わらないため、次のリクエストのルックバックは前の書き込みを見つけます。タイムスタンプ、リクエストごとのコンテキスト、受信メッセージを含む変わるサフィックスを持つプロンプトの場合、ブレークポイントを変わるブロックではなく、静的プレフィックスの終わりに配置します。

複数のブレークポイントを使用する場合

以下の場合に最大4つのキャッシュブレークポイントを定義できます。

  • 異なる頻度で変わるセクションをキャッシュする(たとえば、ツールはめったに変わりませんが、コンテキストは毎日更新されます)
  • 何がキャッシュされるかについてより細かく制御する
  • 成長する会話がブレークポイントを最後のキャッシュ書き込みから20ブロック以上前に押し出すときにキャッシュヒットを確保する

重要な制限: ルックバックは、以前のリクエストが既に書き込んだエントリのみを見つけることができます。成長する会話がブレークポイントを最後の書き込みから20ブロック以上前に押し出す場合、ルックバックウィンドウはそれを逃します。その位置に近い2番目のブレークポイントを最初から追加して、必要になる前にそこに書き込みが蓄積されるようにします。

キャッシュブレークポイントコストの理解

キャッシュブレークポイント自体はコストを追加しません。 以下の場合にのみ請求されます。

  • キャッシュ書き込み: 新しいコンテンツがキャッシュに書き込まれるとき(5分TTLの場合、基本入力トークンより25%多い)
  • キャッシュ読み取り: キャッシュされたコンテンツが使用されるとき(基本入力トークン価格の10%)
  • 通常の入力トークン: キャッシュされていないコンテンツの場合

より多くのcache_controlブレークポイントを追加してもコストは増加しません。実際にキャッシュされて読み取られるコンテンツに基づいて同じ金額を支払います。ブレークポイントは、どのセクションを独立してキャッシュできるかについて制御を与えるだけです。


キャッシング戦略と考慮事項

キャッシュの制限

最小キャッシュ可能なプロンプト長は以下の通りです。

  • Claude Mythos Preview、Claude Opus 4.7、Claude Opus 4.6、Claude Opus 4.5の場合は4096トークン
  • Claude Sonnet 4.6の場合は2048トークン
  • Claude Sonnet 4.5、Claude Opus 4.1、Claude Opus 4、Claude Sonnet 4、Claude Sonnet 3.7(非推奨)の場合は1024トークン
  • Claude Haiku 4.5の場合は4096トークン
  • Claude Haiku 3.5(非推奨)およびClaude Haiku 3の場合は2048トークン

より短いプロンプトは、cache_controlでマークされていても、キャッシュできません。このトークン数より少ないキャッシュをするリクエストは、キャッシングなしで処理され、エラーは返されません。プロンプトがキャッシュされたかどうかを確認するには、応答の使用フィールドを確認します。cache_creation_input_tokensとcache_read_input_tokensの両方が0の場合、プロンプトはキャッシュされませんでした(おそらく最小長要件を満たさなかったため)。

プロンプトが使用しているモデルの最小値をわずかに下回る場合、キャッシュされたコンテンツを拡張して閾値に達することは、しばしば価値があります。キャッシュ読み取りはキャッシュされていない入力トークンよりもはるかに安いため、最小値に達することは、頻繁に再利用されるプロンプトのコストを削減できます。

並行リクエストの場合、キャッシュエントリは最初の応答が開始された後にのみ利用可能になることに注意してください。並行リクエストのキャッシュヒットが必要な場合は、最初の応答を待ってから後続のリクエストを送信してください。

現在、「ephemeral」は唯一のサポートされているキャッシュタイプで、デフォルトでは5分の有効期限があります。

キャッシュできるもの

リクエスト内のほとんどのブロックをキャッシュできます。これには以下が含まれます。

  • ツール:tools配列内のツール定義
  • システムメッセージ:system配列内のコンテンツブロック
  • テキストメッセージ:messages.content配列内のコンテンツブロック(ユーザーターンとアシスタントターンの両方)
  • 画像とドキュメント:ユーザーターンのmessages.content配列内のコンテンツブロック
  • ツール使用とツール結果:messages.content配列内のコンテンツブロック(ユーザーターンとアシスタントターンの両方)

これらの各要素は、自動的に、またはcache_controlでマークすることでキャッシュできます。

キャッシュできないもの

ほとんどのリクエストブロックはキャッシュできますが、いくつかの例外があります。

  • シンキングブロックはcache_controlで直接キャッシュできません。ただし、シンキングブロックは、以前のアシスタントターンに表示される場合、他のコンテンツと一緒にキャッシュできます。この方法でキャッシュされると、キャッシュから読み取られるときに入力トークンとしてカウントされます。

  • サブコンテンツブロック(引用など)自体はcache_controlで直接キャッシュできません。代わりに、トップレベルのブロックをキャッシュします。

    引用の場合、引用のソース資料として機能するトップレベルのドキュメントコンテンツブロックをキャッシュできます。これにより、引用をキャッシュする文書をキャッシュすることで、プロンプトキャッシングを引用で効果的に使用できます。

  • 空のテキストブロックはキャッシュできません。

キャッシュを無効にするもの

キャッシュされたコンテンツへの変更は、キャッシュの一部またはすべてを無効にする可能性があります。

プロンプトの構造化で説明されているように、キャッシュは階層に従います。tools → system → messages。各レベルでの変更は、そのレベルとそれ以降のすべてのレベルを無効にします。

次の表は、異なるタイプの変更によってキャッシュのどの部分が無効化されるかを示しています。✘はキャッシュが無効化されることを示し、✓はキャッシュが有効なままであることを示します。

変わるものツールキャッシュシステムキャッシュメッセージキャッシュ影響
ツール定義✘✘✘ツール定義(名前、説明、パラメータ)を変更すると、キャッシュ全体が無効化されます
ウェブ検索トグル✓✘✘ウェブ検索を有効/無効にするとシステムプロンプトが変更されます
引用トグル✓✘✘引用を有効/無効にするとシステムプロンプトが変更されます
速度設定✓✘✘speed: "fast"と標準速度の間で切り替えるとシステムとメッセージキャッシュが無効化されます
ツール選択✓✓✘tool_choiceパラメータへの変更はメッセージブロックのみに影響します
画像✓✓✘プロンプト内の任意の場所で画像を追加/削除するとメッセージブロックに影響します
シンキングパラメータ✓✓✘拡張シンキング設定(有効/無効、予算)への変更はメッセージブロックに影響します
拡張シンキングリクエストに渡される非ツール結果✓✓✘拡張シンキングが有効な場合、非ツール結果がリクエストで渡されると、以前にキャッシュされたすべてのシンキングブロックがコンテキストから削除され、それらのシンキングブロックに続くコンテキスト内のメッセージはキャッシュから削除されます。詳細については、シンキングブロックでのキャッシングを参照してください。

キャッシュパフォーマンスの追跡

これらのAPIレスポンスフィールドを使用してキャッシュパフォーマンスを監視します。レスポンス内のusage内(またはストリーミングの場合はmessage_startイベント):

  • 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,000
  • cache_creation_input_tokens:0
  • input_tokens:50
  • 処理された総入力トークン:100,050トークン

これは、キャッシングを効果的に使用する場合、コストとレート制限の両方を理解するために重要です。input_tokensは通常、キャッシングを効果的に使用する場合、総入力よりもはるかに小さくなります。

シンキングブロックを使用したキャッシング

拡張シンキングをプロンプトキャッシングと一緒に使用する場合、シンキングブロックには特別な動作があります:

他のコンテンツと一緒に自動キャッシング: シンキングブロックはcache_controlで明示的にマークすることはできませんが、ツール結果を含む後続のAPI呼び出しを行う際に、リクエストコンテンツの一部としてキャッシュされます。これは通常、シンキングブロックを会話に戻して続行するツール使用時に発生します。

入力トークンカウント: シンキングブロックがキャッシュから読み込まれる場合、使用メトリクスの入力トークンとしてカウントされます。これはコスト計算とトークン予算に重要です。

キャッシュ無効化パターン:

  • ツール結果のみがユーザーメッセージとして提供される場合、キャッシュは有効なままです
  • ツール結果以外のユーザーコンテンツが追加されるとキャッシュが無効化され、以前のすべてのシンキングブロックが削除されます
  • このキャッシング動作は明示的な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]
# ツール結果以外のユーザーブロックはすべてのシンキングブロックを無視するように指定します
# このリクエストはシンキングブロックが存在しなかったかのように処理されます

ツール結果以外のユーザーブロックが含まれる場合、それは新しいアシスタントループを指定し、以前のすべてのシンキングブロックはコンテキストから削除されます。

詳細については、拡張シンキングドキュメントを参照してください。

キャッシュストレージと共有

2026年2月5日から、プロンプトキャッシングは組織レベルの分離ではなくワークスペースレベルの分離を使用します。キャッシュはワークスペースごとに分離され、同じ組織内のワークスペース間でのデータ分離を確保します。この変更はClaude APIとAzure AI Foundry(プレビュー)に適用されます。Amazon BedrockとGoogle Vertex AIは組織レベルのキャッシュ分離を維持します。複数のワークスペースを使用する場合は、この変更を考慮してキャッシング戦略を確認してください。

  • 組織の分離: キャッシュは組織間で分離されます。異なる組織は、同じプロンプトを使用していても、キャッシュを共有することはありません。

  • 完全一致: キャッシュヒットには、キャッシュコントロールでマークされたブロックを含む、すべてのテキストと画像を含む100%同一のプロンプトセグメントが必要です。

  • 出力トークン生成: プロンプトキャッシングは出力トークン生成に影響を与えません。受け取るレスポンスは、プロンプトキャッシングが使用されていない場合に得られるものと同じになります。

効果的なキャッシングのベストプラクティス

プロンプトキャッシングのパフォーマンスを最適化するには:

  • マルチターン会話には自動キャッシングから始めてください。ブレークポイント管理を自動的に処理します。
  • 異なるセクションを異なる変更頻度でキャッシュする必要がある場合は、明示的なブロックレベルのブレークポイントを使用してください。
  • システム指示、背景情報、大規模なコンテキスト、または頻繁なツール定義など、安定した再利用可能なコンテンツをキャッシュしてください。
  • キャッシュされたコンテンツをプロンプトの最初に配置して、最高のパフォーマンスを得てください。
  • キャッシュブレークポイントを戦略的に使用して、異なるキャッシュ可能なプレフィックスセクションを分離してください。
  • ブレークポイントを、リクエスト全体で同じままのラストブロックに配置してください。静的なプレフィックスと変動するサフィックス(タイムスタンプ、リクエストごとのコンテキスト、受信メッセージ)を持つプロンプトの場合、それはプレフィックスの終わりであり、変動するブロックではありません。
  • キャッシュヒット率を定期的に分析し、必要に応じて戦略を調整してください。

異なるユースケースの最適化

シナリオに合わせてプロンプトキャッシング戦略をカスタマイズしてください:

  • 会話型エージェント: 長い指示またはアップロードされたドキュメントを含む拡張会話のコストと遅延を削減します。
  • コーディングアシスタント: 関連セクションまたはコードベースの要約版をプロンプトに保持することで、オートコンプリートとコードベースQ&Aを改善します。
  • 大規模ドキュメント処理: 画像を含む完全な長文資料をプロンプトに組み込み、レスポンス遅延を増加させません。
  • 詳細な指示セット: 広範な指示、手順、および例のリストを共有して、Claudeのレスポンスを微調整します。開発者は通常、プロンプトに1つか2つの例を含めますが、プロンプトキャッシングを使用すると、高品質な回答の20以上の多様な例を含めることで、さらに優れたパフォーマンスを得ることができます。
  • エージェンティックツール使用: 複数のツール呼び出しと反復的なコード変更を含むシナリオのパフォーマンスを強化します。各ステップは通常、新しいAPI呼び出しが必要です。
  • 書籍、論文、ドキュメント、ポッドキャストトランスクリプト、およびその他の長文コンテンツとの対話: ドキュメント全体をプロンプトに埋め込み、ユーザーに質問させることで、任意のナレッジベースを活性化します。

一般的な問題のトラブルシューティング

予期しない動作が発生している場合:

  • キャッシュされたセクションが呼び出し全体で同一であることを確認してください。明示的なブレークポイントの場合、cache_controlマーカーが同じ場所にあることを確認してください
  • 呼び出しがキャッシュライフタイム内(デフォルトでは5分)で行われていることを確認してください
  • tool_choiceと画像の使用が呼び出し間で一貫していることを確認してください
  • 使用しているモデルの最小トークン数以上をキャッシュしていることを確認してください(キャッシュの制限を参照)。長さベースのキャッシング失敗はサイレントです: リクエストは成功しますが、cache_creation_input_tokensとcache_read_input_tokensの両方が0になります
  • ブレークポイントがリクエスト全体で同じままのブロック上にあることを確認してください。キャッシュ書き込みはブレークポイントでのみ発生し、そのブロックが変更される場合(タイムスタンプ、リクエストごとのコンテキスト、受信メッセージ)、プレフィックスハッシュは一致しません。ルックバックはブレークポイントの背後にある安定したコンテンツを見つけません。それは以前のリクエストが独自のブレークポイントで書き込んだエントリのみを見つけます
  • tool_useコンテンツブロック内のキーが安定した順序を持つことを確認してください。一部の言語(例えば、Swift、Go)はJSON変換中にキー順をランダム化し、キャッシュを破壊します

tool_choiceへの変更またはプロンプト内のどこかの画像の有無の変更は、キャッシュを無効化し、新しいキャッシュエントリを作成する必要があります。キャッシュ無効化の詳細については、キャッシュを無効化するものを参照してください。


1時間のキャッシュ期間

5分が短すぎる場合、Anthropicは追加費用で1時間のキャッシュ期間も提供しています。

拡張キャッシュを使用するには、cache_control定義にttlを含めてください:

"cache_control": {
  "type": "ephemeral",
  "ttl": "1h"
}

レスポンスには以下のような詳細なキャッシュ情報が含まれます:

Output
{
  "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オブジェクト内の値の合計に等しいことに注意してください。

1時間キャッシュを使用する場合

5分ごとより頻繁に使用されるシステムプロンプトなど、定期的なケイデンスで使用されるプロンプトがある場合は、5分キャッシュを引き続き使用してください。これは追加料金なしで引き続き更新されるためです。

1時間キャッシュは以下のシナリオで最適に使用されます:

  • 5分ごとより頻繁に使用される可能性があるが、1時間ごとより頻繁に使用されるプロンプトがある場合。例えば、エージェンティックサイドエージェントが5分以上かかる場合、またはユーザーとの長いチャット会話を保存し、一般的にそのユーザーが次の5分以内に応答しない可能性がある場合。
  • レイテンシが重要で、フォローアップのプロンプトが5分を超えて送信される可能性がある場合。
  • レート制限の利用を改善したい場合。キャッシュヒットはレート制限に対して差し引かれません。

5分および1時間キャッシュはレイテンシに関して同じように動作します。通常、長いドキュメントの初回トークンまでの時間が改善されます。

異なるTTLの混合

同じリクエスト内で1時間と5分のキャッシュコントロールの両方を使用できますが、重要な制約があります: より長いTTLを持つキャッシュエントリは、より短いTTLより前に表示される必要があります(つまり、1時間のキャッシュエントリは5分のキャッシュエントリより前に表示される必要があります)。

TTLを混合する場合、APIはプロンプト内の3つの請求位置を決定します:

  1. 位置A: 最高のキャッシュヒット(またはヒットがない場合は0)でのトークンカウント。
  2. 位置B: Aの後の最高の1時間cache_controlブロックでのトークンカウント(存在しない場合はAに等しい)。
  3. 位置C: 最後のcache_controlブロックでのトークンカウント。

Bおよび/またはCがAより大きい場合、Aが最高のキャッシュヒットであるため、必ずキャッシュミスになります。

請求対象:

  1. Aのキャッシュ読み込みトークン。
  2. (B - A)の1時間キャッシュ書き込みトークン。
  3. (C - B)の5分キャッシュ書き込みトークン。

以下は3つの例です。これは3つのリクエストの入力トークンを示しており、各リクエストは異なるキャッシュヒットとキャッシュミスを持っています。各リクエストは異なる計算された価格を持ち、色付きボックスで示されています。 TTLの混合図


プロンプトキャッシングの例

プロンプトキャッシングを始めるのに役立つように、プロンプトキャッシングクックブックには詳細な例とベストプラクティスが記載されています。

以下のコードスニペットは、様々なプロンプトキャッシングパターンを紹介しています。これらの例は、異なるシナリオでキャッシングを実装する方法を示し、この機能の実用的な応用を理解するのに役立ちます。

データ保持

プロンプトキャッシング(自動と明示的の両方)はZDR対象です。AnthropicはプロンプトまたはClaudeの応答の生テキストを保存しません。

KV(キー値)キャッシュ表現とキャッシュされたコンテンツの暗号化ハッシュはメモリ内にのみ保持され、保存時には保存されません。キャッシュエントリの最小ライフタイムは5分(標準)または60分(拡張)で、その後は迅速に(ただし即座ではなく)削除されます。キャッシュエントリは組織間で分離されます。

すべての機能のZDR適格性については、API とデータ保持を参照してください。


FAQ

Was this page helpful?

  • TTLサポート
  • 1時間のキャッシュ期間
  • 1時間キャッシュを使用する場合
  • 異なるTTLの混合
  • FAQ