[ADK] 1.16.0の新機能: LLMコンテキスト圧縮と呼び出しの停止・再開サポート
こんにちは、サントリーこと大橋です。
2025/10/10にAgent Development Kit(以降ADK) 1.16.0がリリースされました。
今回のリリースでは、プレフィックスキャッシュやセマンティックキャッシュの導入など、パフォーマンスに関する大きな機能追加があったわけではありませんが、いくつかの興味深い機能が追加されています。
この記事では、その中からいくつかのリリースについてピックアップして説明していきます。
対象
- ADKを触ったことがあるPythonユーザー
- AIエージェント向けのUIを作成したいと思っている開発者
なお本記事中ではADKのAgentを「Agent
」、それ以外のAIエージェントを「エージェント
」と表記します。
What's new in 1.16.0
まずは1.16.0のリリースノートを見てみましょう。
機能 (Features)
- [コア]
- [モデル]
- [ツール]
- BigQuery
execute_sql
ツールにdry_run
機能を追加 (960eda3)- BigQuery
analyze_contribution
ツールを追加 (4bb089d)- Spanner ADKツールセットがカスタマイズ可能なテンプレートSQLとパラメータ化SQLをサポート (da62700)
- Oauth2クライアント認証情報グラントタイプをサポート (5c6cdcd)
- ツールエラー時にエラーから学習し、異なる引数で再試行する
ReflectRetryToolPlugin
を追加 (e55b894)- 同一エージェント内で
VertexAiSearchTool
組み込みツールと他のツールの併用をサポート (4485379)- 同一エージェント内でGoogle検索組み込みツールと他のツールの併用をサポート (d3148da)
- [評価]
- [UI]
- カスタムロゴ用の
adk web
オプションを追加 (822efe0)- [可観測性]
- otel: CloudTraceSpanExporterをtelemetry.googleapis.comに切り替え (bd76b46)
今回はこの中で、以下の3つをピックアップして説明します。
- LLMコンテキスト圧縮の実装
- ADKでの呼び出しの停止と再開をサポート
- CloudTraceSpanExporterをtelemetry.googleapis.comに切り替え
LLMコンテキスト圧縮の実装
エージェントとの対話セッションが長くなると、過去のやり取りが積み重なり、LLMに渡すコンテキストが肥大化してパフォーマンスが劣化するという課題がありました。
この課題を解決するため、LLMコンテキストを効率的に圧縮する方法が提供されました。
ADKのApp
クラスに対してEventsCompactionConfig
を設定できるようになり、これによりコンテキストの圧縮タイミングや方法を細かく制御できます。
以前の記事([ADK] 1.15.0のContextFilterPluginで長大な会話履歴をフィルタリングしパフォーマンスを改善する https://zenn.dev/soundtricker/articles/3e9ea6f0617daa )で紹介したContextFilterPlugin
は単純に古い履歴を削除するだけでしたが、今回のEventsCompactionConfig
は履歴を要約・圧縮することで、情報を失わずにトークン量を削減することを目指すものです。
これにより開発者はLLMの応答・品質のパフォーマンスを維持しつつ、コンテキストを圧縮することができるようになります。
ADK RunnerはEventsCompactionConfig
で設定されたcompaction_interval
とoverlap_size
を使用して、圧縮を実行するタイミングと、圧縮するイベントを決定し、summarizer
(BaseEventsSummarizer)を利用してイベントの圧縮を行います。
-
compaction_interval
: 圧縮を実行するトリガーとなる、ユーザーが開始した新しい呼び出しの数。 -
overlap_size
: 連続する要約間のコンテキストを維持するため、前回の圧縮範囲の末尾から含める呼び出しの数。例えば、イベント[1, 2, 3, 4, 5]があった場合、[1, 2]と[3, 4]で要約すると文脈が途切れる可能性があります。そこで、[1, 2]、[2, 3]のようにオーバーラップ部分を作ることで、文脈の連続性を保ちます。
EventsSummarizer
の具体的な実装としてLlmEventSummarizer
が提供されており、EventsCompactionConfig
にsummarizer
が指定されていない場合は、このクラスがデフォルトで利用されます。LlmEventSummarizer
は、その名の通りLLMを利用して過去のコンテキストを要約・圧縮します。
実装例
import datetime
from google.adk.agents.llm_agent import Agent
from google.adk.apps import App
from google.adk.apps.app import EventsCompactionConfig
from google.adk.apps.llm_event_summarizer import LlmEventSummarizer
async def now_tool():
"""
Return the current date time.
"""
return datetime.datetime.now(tz=datetime.timezone.utc).isoformat()
root_agent = Agent(
model='gemini-2.5-flash',
name='root_agent',
description='The Clock Agent',
instruction="""
You are clock agent. Your task is return current time using `now_tool`.
[Output Format]
JSON Object
[出力スキーマ]
time: string iso 8601
Example: {"time": "2022-09-04T16:07:48.53+0000"}
""",
tools=[now_tool]
)
app = App(
name='time_app',
root_agent=root_agent,
events_compaction_config=EventsCompactionConfig(
compaction_interval=5,
overlap_size=1,
# 以下は指定しなくても良い 要約する際のモデルを変えたい場合や、要約するためのLLMへの指示を変更したい場合に指定する
summarizer=LlmEventSummarizer(llm=root_agent.canonical_model)
)
)
ADKでの呼び出しの停止と再開をサポート
App
に対してResumabilityConfig
を設定できるようになりました。
この設定には、呼び出しの再開(レジューム)が可能かどうかを示すis_resumable
フラグが含まれています。
app = App(
name='resumable_app',
root_agent=root_agent,
resumability_config=ResumabilityConfig(
is_resumable=True
)
)
ただ、サンプルコードなどを見ても、この設定を有効にすると具体的にどのような挙動になるのか、まだ著者が完全に把握できていません。Human-in-the-Loop(HIL)のような、一度処理を中断して外部からの入力を待つようなシナリオで活用されるものと推測されます。こちらについては、理解が深まり次第、また別の記事で詳しく解説したいと思います。
以下が対象のCommitや利用しているサンプルコードです。ご興味がある方は参照してみてください。
- https://github.com/google/adk-python/commit/f005414895a57befe880fd58c0d778e499a20d8e#diff-305d80077072de6a7698447a8b0a22ef3ef07faa25ddb3b3d166757d8decbc53
- https://github.com/google/adk-python/commit/fbf75761bb8d89a70b32c43bbd3fa2f48b81d67c
- https://github.com/google/adk-python/blob/main/contributing/samples/human_tool_confirmation/agent.py
telemetry.googleapis.com
)に切り替え
CloudTraceSpanExporterを OTLP(これまで、adk deploy
コマンドで--trace_to_cloud
オプションを指定すると、ADK Agent
のトレース情報がCloud Traceに送信されていました。
この際、内部的に利用されていたCloudTraceSpanExporter
はCloud Trace APIを利用していましたが、このAPIには送信可能なスパン(トレース情報の1単位)のサイズに制限がありました。そのため、LLMのように大量のテキストデータを扱うAgent
では、情報が途中で切り捨てられてしまうという課題がありました。
今回のアップデートで、トレース情報の送信先が、従来のCloud Trace APIエンドポイントから、OTLP (OpenTelemetry Protocol) に準拠したtelemetry.googleapis.com
エンドポイントに変更されました。
- 参考
これにより、サイズ制限が緩和され、ADK Agent
のより詳細な情報を欠損なくCloud Traceで確認できるようになりました。
まとめ
今回はADK 1.16.0で追加されたいくつかの機能について解説しました。
コンテキスト圧縮や停止・再開のサポートは、より複雑で長時間のタスクを実行するAgent
を構築するための重要な基盤となります。また、Observabilityの改善は、Agent
の挙動をより深く理解し、デバッグやパフォーマンスチューニングを行う上で大きな助けになりますね。
そして、ADK初となるCommunity Callが日本時間 2025/10/16(木) 1:30am にオンラインで開催されることになりました!
ADKのロードマップなどについて、開発者から直接説明が聞ける貴重な機会です。深夜帯なので日本の開発者には少し参加しづらい時間ですが、セッションはレコーディングされるとのことです。日本にも多くのADKユーザーがいることをアピールするためにも、ぜひ参加登録してみてはいかがでしょうか。
お知らせ/宣伝
ADK開発者が集う日本語のDiscordコミュニティがあります。ADKに関する情報交換や議論に興味がある方は、ぜひご参加ください!
また、ADKの最新のコミットログやリリースノートを分かりやすく解説するPodcastを、月・水・金に配信しています。ADKの動向を追いかけたい方は、ぜひ聴いてみてください。
Discussion