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

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

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


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

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

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

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

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

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

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

プロンプトキャッシングは、プロンプト全体 - toolssystemmessages(この順序で)を、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でマークされていてもキャッシュできません。このトークン数未満をキャッシュしようとするリクエストは、キャッシュなしで処理されます。プロンプトがキャッシュされたかどうかを確認するには、レスポンスの使用状況フィールドを参照してください。

キャッシュのTTL(Time to Live)は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と画像の使用が呼び出し間で一貫していることを確認します
  • 最小トークン数以上をキャッシュしていることを確認します

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


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

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

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

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


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

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

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


FAQ