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

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

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

プロンプトキャッシングはベータ版です

プロンプトキャッシングがパブリックベータ版として利用可能になりました!この機能にアクセスするには、APIリクエストにanthropic-beta: prompt-caching-2024-07-31ヘッダーを含める必要があります。

今後数週間でこのオープンベータを改良していく予定ですので、皆様のフィードバックをお待ちしています。アイデアや提案はこのフォームを使用して共有してください。


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

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

  1. システムは最近のクエリからプロンプトのプレフィックスが既にキャッシュされているかチェックします。
  2. 見つかった場合、キャッシュされたバージョンを使用し、処理時間とコストを削減します。
  3. 見つからない場合、完全なプロンプトを処理し、将来の使用のためにプレフィックスをキャッシュします。

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

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

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

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

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


価格設定

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

モデル基本入力トークンキャッシュ書き込みキャッシュヒット出力トークン
Claude 3.5 Sonnet$3 / MTok$3.75 / MTok$0.30 / MTok$15 / MTok
Claude 3.5 Haiku$1 / MTok$1.25 / MTok$0.10 / MTok$5 / MTok
Claude 3 Haiku$0.25 / MTok$0.30 / MTok$0.03 / MTok$1.25 / MTok
Claude 3 Opus$15 / MTok$18.75 / MTok$1.50 / MTok$75 / MTok

注意:

  • キャッシュ書き込みトークンは基本入力トークンより25%高価
  • キャッシュ読み取りトークンは基本入力トークンより90%安価
  • 通常の入力および出力トークンは標準レートで価格設定

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

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

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

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

プロンプトの構造化

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

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

cache_controlパラメータを使用して、最大4つのキャッシュブレークポイントを定義でき、異なる再利用可能なセクションを個別にキャッシュできます。

キャッシュの制限

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

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

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

キャッシュは5分間のTTL(Time to Live)を持ちます。現在、“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と画像の使用が一貫していることを確認します
  • 最小トークン数以上をキャッシュしていることを確認します

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


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

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

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

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


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

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

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


FAQ