# ADK 2.0の便利だけど知られていない機能
🌍 長い会話を続けていると、コンテキストウィンドウがいっぱいになってエージェントの品質が低下した経験はありませんか?
ADK 2.0のコンテキスト圧縮(コンパクション)機能は、古いイベントをスライディングウィンドウ方式で要約し、コンテキストウィンドウを効率的に管理する機能です。長時間の会話でもエージェントの応答品質を維持できます。
📌 タイトル:コンテキスト圧縮(コンパクション)
🔗 URL:
🧩 概要
コンテキスト圧縮は、会話が長くなった際に古いイベントを要約して圧縮する仕組みです。2つの主要パラメータで動作を制御します。compaction_intervalは圧縮を実行するイベント間隔、overlap_sizeは圧縮時に次のウィンドウに引き継ぐイベント数です。例えば、compaction_interval=3、overlap_size=1の場合、3イベントごとに圧縮が実行され、最後の1イベントは次のウィンドウにも含まれます。Pythonではアプリに設定し、TypeScriptではTokenBasedContextCompactorでトークンしきい値ベースの制御が可能です。カスタムサマライザーも実装できます。
🛠 使い方
PythonではEventsCompactionConfigをAppに設定します。
```python
from import App
from google.adk.context import EventsCompactionConfig
compaction_config = EventsCompactionConfig(
compaction_interval=5, # 5イベントごとに圧縮
overlap_size=2, # 直近2イベントを次のウィンドウに引き継ぎ
)
app = App(
agent=my_agent,
events_compaction_config=compaction_config,
)
```
TypeScriptではTokenBasedContextCompactorを使用します。
```typescript
import { TokenBasedContextCompactor } from '
@anthropic-ai/adk';
const compactor = new TokenBasedContextCompactor({
tokenThreshold: 4000,
});
```
カスタムサマライザーが必要な場合は、LlmEventSummarizerを拡張して独自の要約ロジックを実装できます。
🏗 本番システムへの組み込み方
・compaction_intervalを会話の平均長さに合わせて調整する
・overlap_sizeを大きくすると文脈の連続性が向上するが、圧縮効率は低下する
・カスタムサマライザーで業務ドメインに特化した要約を実装する
・圧縮前後のイベント数とトークン数をモニタリングし、パラメータを最適化する
💡 ユースケース
💬 カスタマーサポートの長時間チャットでコンテキスト品質を維持
📝 長期プロジェクト管理エージェントの会話履歴を効率的に圧縮
🎯 重要な情報を保持しながら不要な詳細を削減してコストを最適化
🔧 ドメイン固有のカスタムサマライザーで業務に最適な要約を実現
⚠️ 注意点
圧縮により古いイベントの詳細な情報は失われます。重要な情報はStateに保存するなど、圧縮されても失われない設計を心がけてください。また、overlap_sizeが小さすぎると文脈の断絶が生じ、エージェントの応答品質が低下する可能性があります。compaction_intervalとoverlap_sizeのバランスを実際のユースケースでテストすることをお勧めします。
✨ コンテキスト圧縮により、長時間の会話でもコンテキストウィンドウを効率的に活用できます。エージェントの応答品質とコスト効率の両立に大きく貢献する機能です。
#
ADK# #
AIAgent#