# ADKの便利で実践的な使い方
🔀 プロンプトだけでエージェントの実行フローを制御するのは不安定になりがちです。ADKのGraph Workflowsなら、ノードとエッジでワークフローを明示的に定義し、AIノードと関数ノードを自在に組み合わせられます!
📌 タイトル:Graph Workflows — ノードとエッジによる明示的なワークフロー定義
🔗 URL:
🧩 概要
Graph Workflowsは、`Workflow`クラスの`edges`パラメータでノードの接続関係を定義し、実行フローを構築する仕組みです。AIエージェントノード、関数ノード、ツールノード、ネストされたWorkflowを混在させることができます。ルーターノードが`Event(route=...)`を返すことで辞書ベースの条件分岐が可能になり、「プロンプトに頼らない予測可能な制御フロー」を実現します。
🛠 使い方
基本的なGraph Workflowの構成です。
`google.adk` から `Workflow` と `Event` をインポートします。ルーター関数 `process_message` は `node_input` の内容に応じて `Event(route="BUG")`、`Event(route="LOGISTICS")`、または `Event(route="CUSTOMER_SUPPORT")` を返します。各ルートに対応する関数(`response_bug`、`response_support`、`response_logistics`)はそれぞれ `Event(output=...)` で応答メッセージを返します。
`Workflow` の `name="support_router"` で、`edges` に2つのタプルを定義します。1つ目は `("START", process_message)` で開始ノードからルーターへ接続し、2つ目は `process_message` の出力を `{"BUG": response_bug, "CUSTOMER_SUPPORT": response_support, "LOGISTICS": response_logistics}` の辞書で各ハンドラーに振り分けます。
順次実行のシンプルなチェーンも定義できます。
`Workflow` の `edges` にタプル `("START", agent1, function1, agent2, function2)` を1つ渡すことで、ノードを順次接続するシンプルなチェーンを定義できます。
🏗 実践的な使い方
**AIフリー関数チェーン + AIノードの混在**: データの前処理や後処理はPython関数で行い、判断が必要な部分だけAIエージェントノードを使います。これによりLLMの呼び出し回数を最小限に抑え、コストと遅延を削減できます。
関数ノード `extract_data` は `json.loads(node_input)` でデータを解析し `Event(output=parsed["content"])` を返します(AI不要)。`LlmAgent` の `analyzer` がデータの分析と要約を行い、関数ノード `format_output` が `Event(output=f"## 分析結果\n{node_input}")` でフォーマットします(AI不要)。
`Workflow` の `name="hybrid_pipeline"` で `edges=[("START", extract_data, analysis_agent, format_output)]` と定義し、関数ノードとAIノードを混在させたハイブリッドパイプラインを構築します。
**カスタマーサポートの自動振り分け**: 問い合わせ内容をルーター関数で分類し、適切な対応エージェントに振り分けます。分類ロジックがコードで明示されているため、動作の予測と検証が容易です。
💡 ユースケース
📨 問い合わせの自動分類・振り分け(バグ/サポート/配送)
🔧 前処理(関数)→ 分析(AI)→ 後処理(関数)のハイブリッドパイプライン
🏭 ETLパイプラインのAI組み込み(抽出は関数、変換にAIを活用)
🔀 ルーティングロジックの明示化によるテスタビリティ向上
⚠️ 注意点
- ライブストリーミング機能はGraph Workflowsと互換性がありません。
- 一部のサードパーティ連携はGraph Workflowsをサポートしていない場合があります。
- ルーターの辞書にないrouteキーが返された場合のエラーハンドリングを考慮してください。
- ノードは1回の実行で1つの`Event.output`のみを出力できます。
✨ Graph Workflowsは、AIノードと関数ノードをノードとエッジで明示的に結合し、プロンプトだけに頼らない予測可能なエージェントパイプラインを構築します。コスト効率と信頼性を両立したい場面でぜひ活用してください!
#
ADK# #
AIAgent#