# ADK 2.0の便利だけど知られていない機能
🌍 実行時にどのエージェントを呼び出すかを動的に切り替えられたら、柔軟で堅牢なシステムが作れると思いませんか?
ADK 2.0のエージェントルーティングは、router関数を使って実行時に動的にエージェントを選択する仕組みです。設定ベースのルーティング、エラー時のフォールバック、複雑度に応じた自動振り分けなど、多彩なパターンに対応できます。
📌 タイトル:エージェントルーティング
🔗 URL:
🧩 概要
エージェントルーティングでは、router関数がagents(利用可能なエージェントのリスト)、context(現在のコンテキスト)、errorContext(直前のエージェントがイベントをyieldする前に例外を投げた場合のエラー情報)を受け取り、次に実行するエージェントを返します。あるエージェントがイベントをyieldする前に失敗した場合、routerはerrorContextを受け取るため、別のエージェントへのフォールバックが可能です。これはRoutedLlm(モデルレベルのルーティング)とは異なり、エージェント全体を切り替える点が特徴です。
🛠 使い方
router関数を定義し、エージェントに設定します。
```python
from adk import Agent
def my_router(agents, context, error_context=None):
# エラー時はフォールバックエージェントを選択
if error_context:
return next(a for a in agents if == "fallback")
# コンテキストに応じて動的にエージェントを選択
complexity = context.session.state.get("task_complexity", "low")
if complexity == "high":
return next(a for a in agents if == "expert")
return next(a for a in agents if == "basic")
parent = Agent(
name="dispatcher",
sub_agents=[basic_agent, expert_agent, fallback_agent],
router=my_router
)
```
router関数の戻り値で次に実行されるエージェントが決まるため、任意のロジック(設定ファイル参照、外部API呼び出しなど)を組み込めます。
🏗 本番システムへの組み込み方
・設定ベースのルーティングでは、ルーティングルールを外部設定ファイルに切り出し、再デプロイなしで変更可能にする
・errorContextを活用したフォールバックチェーンを設計し、単一障害点を排除する
・ルーティング判定のログを構造化して出力し、どのエージェントが選ばれたか追跡可能にする
・複雑度の判定ロジック自体をテスト可能な純粋関数として分離する
💡 ユースケース
⚙️ 設定ファイルでルーティングルールを管理し、運用中に振り分け先を変更
🛡 プライマリエージェント失敗時に自動でフォールバックエージェントへ切り替え
🧠 タスクの複雑度を事前判定し、軽量/高機能エージェントを自動選択
📋 プランニングモードと実行モードでエージェントを切り替える段階的処理
⚠️ 注意点
router関数内での重い処理(外部API呼び出し等)はレイテンシに直結するため、最小限に抑えることを推奨します。また、RoutedLlm(モデルルーティング)との混同に注意してください。RoutedLlmはLLMモデル自体を切り替えるもので、エージェントルーティングはエージェント全体(プロンプト・ツール・サブエージェント含む)を切り替えるものです。errorContextはエージェントがイベントをyieldする前に失敗した場合のみ提供される点も理解しておく必要があります。
✨ 動的ルーティングにより、単一のワークフロー定義で多様な状況に対応できる柔軟なシステムを構築できます。まずはフォールバックパターンから導入してみてください。
#
ADK# #
AIAgent#