# ADKの便利で実践的な使い方
## 🧠 長いセッションでもコストを抑える!ADKのContext Compaction機能
エージェントとの長い対話、コンテキストが膨らんでコストもレイテンシも増加していませんか?ADKの **Context Compaction** を使えば、古いイベントを自動要約して常にスリムなコンテキストを維持できます!🎯
## 📌 タイトル
Context Compaction(コンテキスト圧縮)
## 🔗 URL
## 🧩 概要
Context Compactionは、セッション中に蓄積されるワークフローイベントデータを自動的に要約し、処理オーバーヘッドを削減する機能です。スライディングウィンドウ方式で、最新のイベントはそのまま保持しつつ、古いイベントを圧縮することで、コストとレイテンシを最適化します。
`EventsCompactionConfig` を使って、圧縮間隔(`compaction_interval`)とオーバーラップサイズ(`overlap_size`)を設定するだけで有効になります。
## 🛠 使い方
Appレベルで `EventsCompactionConfig` を設定します。
` から `App` と `EventsCompactionConfig` をインポートします。`App` の `events_compaction_config` パラメータに `EventsCompactionConfig(compaction_interval=3, overlap_size=1)` を渡すことで、3イベントごとに圧縮が実行され、前回の圧縮から1イベント分を重複保持する設定になります。
TypeScriptでは `TokenBasedContextCompactor` でトークン閾値ベースの圧縮も可能です。
```typescript
const agent = new LlmAgent({
name: 'my-agent',
model: 'gemini-flash-latest',
contextCompactors: [
new TokenBasedContextCompactor({
tokenThreshold: 1000,
eventRetentionSize: 1,
summarizer: new LlmSummarizer({
llm: new Gemini({model: 'gemini-flash-latest'})
})
})
]
});
```
## 🏗 実践的な使い方
**カスタマーサポートボットでの活用例:**
長時間の問い合わせ対応では、対話履歴が数十ターンに達することがあります。Context Compactionを導入することで:
1. **コスト削減**:古い対話内容を自動要約し、毎回のLLM呼び出しで送信するトークン数を大幅に削減
2. **レスポンス改善**:コンテキストが小さくなることで、LLMの応答速度が向上
3. **精度維持**:直近のやり取りはそのまま保持するため、文脈を失わずに対話を継続
`compaction_interval=5, overlap_size=2` のような設定で、5ターンごとに圧縮しつつ、直前2ターン分の文脈を次の圧縮に引き継げます。
**カスタムサマライザーの活用:**
デフォルトの要約モデルではなく、ドメイン特化の要約プロンプトを使うことで、業務固有の重要情報(注文番号、顧客IDなど)を確実に保持できます。
## 💡 ユースケース
- 📞 **カスタマーサポート**:長時間の問い合わせ対話でコンテキスト爆発を防止
- 📝 **ドキュメント作成支援**:長い執筆セッションで過去の議論を要約しつつ最新の方針を保持
- 🔍 **データ分析エージェント**:多段階の分析プロセスで中間結果を圧縮
- 🎮 **ゲームNPC**:長時間のプレイセッションで過去のイベントを要約して記憶
## ⚠️ 注意点
- 圧縮は不可逆です。要約された情報の細部は失われる可能性があります
- `overlap_size` が小さすぎると文脈の断絶が起きやすくなります
- カスタムサマライザーを使う場合、要約モデル自体のコストも考慮が必要です
- 圧縮間隔が短すぎると、頻繁な要約処理でオーバーヘッドが増加します
## ✨ まとめ
Context Compactionは「長いセッション=高コスト」という常識を覆す機能です。設定一つで古いイベントを自動要約し、最新の文脈を保ちながらコストとレイテンシを最適化できます。長時間対話が発生するエージェントには、ぜひ導入を検討してみてください!
#
ADK# #
AIAgent#