# ADK 2.0の便利だけど知られていない機能
🌍 リクエストの内容に応じてLLMモデルを動的に切り替えられたら、コストと品質の最適なバランスが取れると思いませんか?
ADK 2.0のモデルルーティングは、RoutedLlmクラスとLlmRouter関数を使って、リクエストごとに使用するモデルを動的に選択する機能です。
📌 タイトル:モデルルーティング
🔗 URL:
🧩 概要
RoutedLlmクラスは、複数のLLMモデルの中からリクエストごとに最適なモデルを動的に選択する仕組みです。LlmRouter関数がモデルのマップ、リクエスト内容、エラーコンテキストを受け取り、使用するモデルのキーを返します。モデルが出力を開始する前にエラーが発生した場合、ルーターがエラー情報とともに再度呼び出され、別のモデルにフォールバックできます。ただし、`connect()`でストリーミング中のモデル切り替えはできません。
🛠 使い方
LlmRouter関数を定義し、RoutedLlmに渡してエージェントに設定します。
```typescript
import { BaseLlm, Gemini, LlmRequest, LlmAgent, RoutedLlm } from '
@google/adk';
const myRouter = (
models: Readonly
>,
request: LlmRequest,
errorContext?: { failedKeys: ReadonlySet; lastError: unknown },
) => {
if (!errorContext) {
return 'primary'; // まずは高性能モデル
}
if (errorContext.failedKeys.has('primary')) {
return 'fallback'; // 失敗したら軽量モデルにフォールバック
}
return undefined; // 候補がなければエラーをそのまま伝播
};
const agent = new LlmAgent({
name: 'smart_agent',
model: new RoutedLlm({
models: {
primary: new Gemini({ model: 'gemini-pro-latest' }),
fallback: new Gemini({ model: 'gemini-flash-latest' }),
},
router: myRouter,
}),
instruction: 'タスクを処理してください',
});
```
エージェントルーティング(エージェント自体の切り替え)とは異なり、モデルルーティングではエージェントのロジックはそのまま、使用するモデルのみが変わります。
🏗 本番システムへの組み込み方
・プライマリモデルの障害時にフォールバックモデルへ自動切り替えする構成にする
・リクエストの複雑さに基づいて高性能/軽量モデルを使い分け、コストを最適化する
・A/Bテスト用のルーターを実装し、モデル性能の比較検証を行う
・ルーターのモデル選択ログを記録し、コスト分析やパフォーマンス改善に活用する
💡 ユースケース
🔄 プライマリモデル障害時の自動フォールバック
💰 リクエストの複雑さに基づくコスト最適化ルーティング
🧪 新旧モデルのA/Bテストによる性能比較
🌍 リクエスト言語やリージョンに基づくモデル選択
⚠️ 注意点
モデルルーティングは実験的機能で、ADK TypeScript v1.0.0以降で利用できます。`connect()`によるストリーミング開始後にモデルを切り替えることはできません。ルーターのロジックが複雑になりすぎると、デバッグやメンテナンスが困難になるため、シンプルな判定基準を心がけてください。また、フォールバック先のモデルが元のモデルと同じ機能をサポートしているか事前に確認することが重要です。
✨ モデルルーティングを活用することで、可用性・コスト・品質のバランスを動的に制御でき、本番環境でのエージェント運用がより柔軟になります。
#ADK# #AIAgent#