# ADKの便利で実践的な使い方
同じシステムプロンプトやツール定義を何度も送信していませんか?Context Cachingで繰り返しのトークンコストを大幅に削減しましょう💰
📌 **タイトル**: Context Caching
🔗 **URL**:
## 🧩 概要
Context Cachingは、LLMに送信するコンテキスト(システムインストラクションやツール定義など)の静的な部分をキャッシュし、繰り返しのトークンコストを削減する機能です。
`ContextCacheConfig` を設定することで、毎回のリクエストで同じプレフィックストークンを再送信する代わりに、キャッシュされたコンテキストを参照するようになります。
特にマルチユーザー環境で同じエージェント(同じプロンプト・ツール定義)を多くのユーザーが利用する場合、コスト最適化の効果が顕著です。
## 🛠 使い方
`google.adk` から `Agent` を、`google.adk.agents` から `ContextCacheConfig` をインポートします。`ContextCacheConfig(max_entries=100, ttl_seconds=3600)` でキャッシュエントリの上限と有効期間(秒)を設定します。この `cache_config` を `Agent` の `context_cache_config` パラメータに渡すことで、`instruction` に記述した長いシステムプロンプトや `tools` に指定したツール定義(`search_kb`、`create_ticket`、`escalate` など)の静的部分がキャッシュされ、繰り返しのトークンコストが削減されます。
## 🏗 実践的な使い方
**大規模カスタマーサポートの最適化:**
カスタマーサポートエージェントでは、以下の要素が全ユーザーで共通です。
- システムインストラクション(対応ガイドライン、トーン、禁止事項)
- ツール定義(ナレッジベース検索、チケット作成、エスカレーション)
- Few-shotの例示
これらの静的なコンテキストは毎リクエストで数千トークンになることがあります。1日1万リクエストのサポートボットなら、Context Cachingにより膨大なトークン削減が見込めます。
**RAGパイプラインでの活用:**
ツール定義にナレッジベースのスキーマや検索パラメータの説明が含まれる場合、これらをキャッシュすることで各クエリのコストを最適化できます。
**マルチテナントSaaS:**
同一のエージェント定義を複数テナントで共有する場合、テナント固有の情報のみが動的部分となり、共通のプロンプトとツール定義はキャッシュで共有されます。
## 💡 ユースケース
- 💰 コスト削減: 長いシステムプロンプトの繰り返し送信コストを削減
- 🚀 レイテンシ改善: キャッシュヒット時のプリフィル処理が高速化
- 👥 マルチユーザー最適化: 同じプロンプトを使う複数ユーザーでキャッシュを共有
- 🏢 マルチテナント: テナント共通部分のコンテキストを効率的にキャッシュ
- 📚 大規模ツール定義: 多数のツールを持つエージェントのツール定義コストを最適化
## ⚠️ 注意点
- Context Cachingはモデルプロバイダーのサポートに依存します。利用可能なモデルを事前に確認してください
- キャッシュのTTL(有効期限)が短すぎるとヒット率が下がり、長すぎるとメモリを消費します。アクセスパターンに応じて調整してください
- システムプロンプトやツール定義を頻繁に変更する場合、キャッシュの恩恵は限定的です
- キャッシュのコスト自体も発生する場合があります。プロバイダーの料金体系を確認し、トータルコストで判断してください
- 動的なコンテキスト(ユーザー固有の情報など)はキャッシュ対象外です。静的部分と動的部分を明確に分離して設計しましょう
✨ Context Cachingは「同じことを何度も言わない」をインフラレベルで実現します。マルチユーザー環境でのコスト最適化に大きな効果を発揮します!
#
ADK# #
AIAgent#