AIエージェントは、タスクを実行するたびに、これまでの全てのコンテキストをモデルに再送信する必要があります。これは、ツールの定義、指示、過去のツール呼び出し、そしてその結果を含みます。モデルはリクエスト間で内部メモリを持たないため、毎回同じ情報を読み直さなければならず、トークンコストが増大します。プロンプトキャッシュはこのサイクルを断ち切ります。サービスが入力プロンプトを保存し、次のリクエストでそれを再利用することで、入力コストを大幅に削減できます。
Amazon Bedrockは、暗黙的キャッシュと明示的キャッシュの両方をサポートしています。暗黙的キャッシュでは、Bedrockが会話の進行に応じて再利用可能なプレフィックスの終点を自動的に選択します。一方、明示的キャッシュでは、開発者がコード内で prompt_cache_breakpoint を指定して、キャッシュするプレフィックスの終点を明示的にマークします。両方を組み合わせることで、ツールや指示などの共有コンテンツをセッション間で再利用しつつ、会話の成長に合わせて自動的にキャッシュを管理できます。
まず、静的なコンテンツ(ツールと指示)をキャッシュする例を見てみましょう。これらはリクエスト間で変わらないため、明示的モードでキャッシュするのに適しています。再利用可能なプレフィックスは少なくとも1,024トークンに達する必要があります。以下のコードは、prompt_cache_key を使用してキャッシュを共有するリクエストを識別し、prompt_cache_breakpoint で指示ブロックの終点を指定する方法を示しています。この例では、約4,000トークンのツールと指示のプレフィックスが、最初のリクエストで4,120トークンを書き込み、以降のリクエストでその4,120トークンを読み取ります。
会話履歴とツール結果をキャッシュするには、暗黙的キャッシュを利用します。エージェントがツールを呼び出すたびに、モデルの出力とツール結果を履歴に追加し、その履歴を再送信します。暗黙的モードでは、Bedrockが変更されていないプレフィックスを再利用し、最後のツール結果までの追加コンテンツをキャッシュします。これにより、各ターンで全ての履歴を再処理する必要がなくなります。
さらに、明示的なローリングブレークポイントを使用すると、各ターンでそれ以前の全てのコンテンツを読み取り、自身のツール結果のみを書き込むことができます。この方法では、各ツール結果バッチの最後にブレークポイントをマークし、以前のマーカーを履歴に保持します。GPT-6 Astraを使用した6ターンのワークロードテストでは、暗黙的キャッシュが入力コストを約62%削減し、明示的ローリングブレークポイントが約61%節約しました。ただし、これらの数値はワークロードに依存するため、自身のエージェントで節約量を測定することをお勧めします。
注意点として、静的なブレークポイントのみを明示的モードで使用すると、ツールと指示はキャッシュされますが、成長する履歴は毎ターン再処理されます。また、単一のブレークポイントを移動するとキャッシュの再利用が妨げられ、繰り返し書き込みが発生する可能性があります。プロンプトキャッシュを効果的に活用するには、コンテンツの変更頻度に応じて適切なキャッシュ戦略を選択することが重要です。