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

以下は、cache_controlブロックを使用してMessages APIでプロンプトキャッシングを実装する例です:

JSON
{"cache_creation_input_tokens":188086,"cache_read_input_tokens":0,"input_tokens":21,"output_tokens":393}
{"cache_creation_input_tokens":0,"cache_read_input_tokens":188086,"input_tokens":21,"output_tokens":393}

この例では、「高慢と偏見」の全文がcache_controlパラメータを使用してキャッシュされています。これにより、この大きなテキストを複数のAPI呼び出しで再利用でき、毎回処理し直す必要がありません。ユーザーメッセージのみを変更することで、キャッシュされたコンテンツを利用しながら本に関する様々な質問をすることができ、より速いレスポンスと効率性の向上につながります。


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

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

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

これは特に以下の場合に有用です:

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

キャッシュは最低5分間の有効期間を持ち、キャッシュされたコンテンツが使用されるたびに更新されます。

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

プロンプトキャッシングは、プロンプト全体(toolssystemmessagesの順)を、cache_controlで指定されたブロックまで含めて参照します。


価格設定

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

ModelBase Input TokensCache WritesCache HitsOutput Tokens
Claude 3.7 Sonnet$3 / MTok$3.75 / MTok$0.30 / MTok$15 / MTok
Claude 3.5 Sonnet$3 / MTok$3.75 / MTok$0.30 / MTok$15 / MTok
Claude 3.5 Haiku$0.80 / MTok$1 / MTok$0.08 / MTok$4 / MTok
Claude 3 Opus$15 / MTok$18.75 / MTok$1.50 / MTok$75 / MTok
Claude 3 Haiku$0.25 / MTok$0.30 / MTok$0.03 / MTok$1.25 / MTok

注意:

  • キャッシュ書き込みトークンは基本入力トークンより25%高価です
  • キャッシュ読み取りトークンは基本入力トークンより90%安価です
  • 通常の入力トークンと出力トークンは標準料金で価格設定されています

プロンプトキャッシングの実装方法

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

プロンプトキャッシングは現在、以下のモデルでサポートされています:

  • Claude 3.7 Sonnet
  • Claude 3.5 Sonnet
  • Claude 3.5 Haiku
  • Claude 3 Haiku
  • Claude 3 Opus

プロンプトの構造化

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

キャッシュプレフィックスは以下の順序で作成されます:toolssystem、そしてmessages

cache_controlパラメータを使用して、最大4つのキャッシュブレークポイントを定義でき、異なる再利用可能なセクションを個別にキャッシュすることができます。各ブレークポイントに対して、システムは自動的に前の位置でのキャッシュヒットを確認し、見つかった場合は最も長い一致するプレフィックスを使用します。

キャッシュの制限

キャッシュ可能な最小プロンプト長は:

  • Claude 3.7 Sonnet、Claude 3.5 Sonnet、Claude 3 Opusの場合は1024トークン
  • Claude 3.5 HaikuとClaude 3 Haikuの場合は2048トークン

これより短いプロンプトは、cache_controlでマークされていてもキャッシュできません。このトークン数未満のキャッシュリクエストは、キャッシングなしで処理されます。プロンプトがキャッシュされたかどうかを確認するには、レスポンスの使用状況フィールドを参照してください。

並行リクエストの場合、キャッシュエントリは最初のレスポンスが開始された後にのみ利用可能になります。並行リクエストでキャッシュヒットが必要な場合は、最初のレスポンスを待ってから後続のリクエストを送信してください。

キャッシュの最小有効期間(TTL)は5分です。現在、“ephemeral”は唯一サポートされているキャッシュタイプで、この最小5分間の有効期間に対応しています。

キャッシュ可能なもの

リクエスト内のほとんどのブロックはcache_controlでキャッシング指定が可能です。これには以下が含まれます:

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

これらの要素それぞれにcache_controlをマークして、リクエストのその部分のキャッシングを有効にできます。

キャッシュできないもの

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

  • 思考ブロックはキャッシュできません。これらは除去され、入力トークンとしてカウントされないためです。
  • 引用などのサブコンテンツブロックはキャッシュできません。代わりに、トップレベルのブロックをキャッシュしてください。
  • 空のテキストブロックはキャッシュできません。

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

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

  • cache_creation_input_tokens:新しいエントリをキャッシュに書き込む際のトークン数。
  • cache_read_input_tokens:このリクエストでキャッシュから取得したトークン数。
  • input_tokens:キャッシュから読み取られなかった、またはキャッシュの作成に使用されなかった入力トークン数。

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

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

  • システム指示、背景情報、大きなコンテキスト、または頻繁なツール定義など、安定して再利用可能なコンテンツをキャッシュします。
  • 最高のパフォーマンスを得るため、キャッシュされるコンテンツをプロンプトの先頭に配置します。
  • キャッシュブレークポイントを戦略的に使用して、異なるキャッシュ可能なプレフィックスセクションを分離します。
  • キャッシュヒット率を定期的に分析し、必要に応じて戦略を調整します。

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

シナリオに応じてプロンプトキャッシング戦略を調整します:

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

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

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

  • キャッシュされたセクションが同一で、呼び出し間で同じ位置にcache_controlでマークされていることを確認します
  • 呼び出しが5分のキャッシュ有効期間内に行われていることを確認します
  • tool_choiceと画像の使用が呼び出し間で一貫していることを確認します
  • 最小トークン数以上をキャッシュしていることを確認します
  • システムは以前にキャッシュされたコンテンツをキャッシュブレークポイント前の位置で使用しようとしますが、非常に長いコンテンツブロックのリストを持つクエリの場合、プロンプトの前の部分でのキャッシュルックアップを保証するために追加のcache_controlパラメータを使用することができます

tool_choiceの変更やプロンプトのどこかでの画像の有無の変更は、キャッシュを無効にし、新しいキャッシュエントリの作成が必要になることに注意してください。


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

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

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

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


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

プロンプトキャッシングを始めるのに役立つように、詳細な例とベストプラクティスを含むプロンプトキャッシングクックブックを用意しました。

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


FAQ