コンテンツに移動
AI & 機械学習

Google の ADK を使用してシンプルなマルチエージェント システムを構築する方法

2025年7月14日
Ashwini Kumar

Solution Acceleration Architect

Neeraj Agrawal

Solution Acceleration Architect

【Next Tokyo ’25】

【Next Tokyo】120 以上のセッションをアーカイブ公開中。話題の Gemini、生成 AI、AI エージェントなどの Google Cloud のアップデートや顧客事例をチェックしましょう。

視聴はこちら

※この投稿は米国時間 2025 年 7 月 3 日に、Google Cloud blog に投稿されたものの抄訳です。

エージェントの活用は企業にとって最優先事項となっていますが、多くの企業は、専門分野に特化した複数のエージェントを連携させるのではなく、あらゆる業務に対応できる単一の「スーパー」エージェントを構築しています。モノリシックなエージェントは、指示の過負荷、不正確な出力、スケールできない脆弱なシステムなどが原因で、自らの重みに耐えきれず崩壊することがよくあります。

おすすめの解決方法: それぞれの分野に精通した専門 AI エージェントのチームを編成すると、より高い忠実度、より優れた制御、真のスケーラビリティを実現できます。

課題: 堅牢なマルチエージェント ワークフローを構築するのは複雑な作業です。そこで重要となるのが、Google のエージェント開発キット(ADK)です。ADK は、Gemini の機能を活用することで、こうした高度なエージェント システムを設計、構築、オーケストレーションできるフレームワークを提供します。この投稿では、ADK を使用してマルチエージェント ワークフローを構築する方法をご紹介します。

ステップ 1: 専門エージェントを作成する

モノリシックなエージェントにすべてを任せて混乱を招いてしまう代わりに、問題を分解します。それぞれが単一のジョブに対する明確な指示を処理する、専門分野に特化したエージェントのチームを構築します。ここでは、旅行を例に説明します。

  • FlightAgent: フライトに関する情報のみを扱うエージェント。

  • HotelAgent: 宿泊施設のエキスパート。

  • SightseeingAgent: 専属のツアーガイド。
lang-py
読み込んでいます...

これらのスペシャリストを管理するために、コーディネーターのワークフローを構築します。次に、ユーザーのリクエストを理解し、適切なスペシャリストにルーティングすることだけを担う TripPlanner ルート エージェントを作成します。

lang-py
読み込んでいます...

https://storage.googleapis.com/gweb-cloudblog-publish/images/1_Fig1_et7jsZ5.max-1300x1300.png

これは単純なクエリでは問題なく機能しますが(例: 「パリ行きのフライトを探して」というリクエストはすぐに FlightAgent にディスパッチされる)、すぐに新たな問題が明らかになります。たとえば、「パリ行きのフライトを予約してからホテルを探して」と指示すると、コーディネーターは FlightAgent を呼び出した後に停止してしまいます。最初のリクエストをルーティングするという役割は果たしていますが、複数のステップのワークフローをオーケストレートすることができていません。このマネージャーは受付係としては優秀ですが、プロジェクト マネージャーには不適格ということです。

この制限は、システムによるサブエージェントの処理方法に起因しています。ルートエージェントがフライト エージェントをサブエージェントとして呼び出すと、ユーザーに回答する責任はフライト エージェントに完全に移行されます。そのため、ルート エージェントは事実上このプロセスから外れてしまいます。以降のユーザー入力は、すべてフライト エージェント単独で処理されます。これにより、最初の数ステップのリクエストの全体的なコンテキストが失われるため、多くの場合、回答が不完全または関連性が低いものになります。これは、こうしたシナリオでマネージャーが「プロジェクト マネージャー」として苦労する理由を端的に表しています。

ステップ 2: コーディネーターにツールを提供する

コーディネーターにはアップグレードが必要でした。単にリクエストを転送するだけでなく、専門家の力を活用してより大規模なプロジェクトを完了する能力が必要だったからです。このことが、エージェント ツールを備えたディスパッチャー エージェントという次の進化につながりました。

スペシャリストを目的地として扱うのではなく、ルート エージェントのツールボックス内のツールとして扱うようにしました。ルート エージェントは、複雑なクエリについて推論し、複数のツールを使用してジョブを完了する判断を下すことができます。

ここでは、ADK を使用して、専門エージェントを AgentTool に変換します。

lang-py
読み込んでいます...

https://storage.googleapis.com/gweb-cloudblog-publish/images/1_Fig2_SBLwlN8.max-1600x1600.png

これは画期的な機能です。「パリ行きのフライトを予約してからホテルを探して」という複雑なクエリを実行すると、ルート エージェントがそれを理解し、flight_tool をインテリジェントに呼び出して結果を取得し、その後 hotel_tool を呼び出します。また、Sightseeing_tool を使用して、おすすめの観光スポットを 2 か所提案することもできます。ルート エージェントと専門ツールとの間の双方向の通信により、真のマルチステップ ワークフローを実現できました。

しかし、システムが機能し始めると、非効率性が目立つようになりました。エージェントは、まずフライトを探し、その後でホテルを探しました。これら 2 つのタスクは別々に実行されます。なぜ同時に実行できないのでしょうか?

ステップ 3: 並列実行を実装する

システムはスマートになりましたが、もっと高速化できるはずです。互いに依存しないタスクは、同時に実行することで時間を節約できます。

ADK には、これを実現するための ParallelAgent が用意されています。ParallelAgent を使用して、フライトとホテルの詳細を同時に取得し、その後 SequentialAgent を使用してワークフロー全体をオーケストレートします。まず観光情報を取得し、フライトとホテルについては並列エージェントに「ファンアウト」し、最後に TripSummaryAgent ですべての結果を「収集」します。

lang-py
読み込んでいます...

これで、ワークフローが最適化されました。システムは複雑なクエリを処理できるだけでなく、効率的に実行できるようになりました。ゴールは目前ですが、最後の疑問が残っています。最終的な要約は適切でしょうか?厳格な品質ガイドラインを常に満たしているでしょうか?

ステップ 4: フィードバック ループを作成する

システムに自身の作業をレビューさせるには、フィードバック ループが必要です。

このアイデアは、シーケンスに以下の 2 つのエージェントを追加することで実現できます。

  1. TripSummaryReviewer: TripSummaryAgent によって生成された要約を評価することだけを担うエージェント。完全性と構造をチェックし、シンプルに「pass」または「fail」を出力します。

  2. ValidateTripSummaryAgent: レビューのステータスを確認し、最終的に、検証済みの出力またはエラー メッセージを提供するカスタム エージェント。

このパターンは、エージェントが共有状態を介して通信することで機能します。TripSummaryAgent は出力を trip_summary キーに書き込み、TripSummaryReviewer は同じキーから読み取ってレビューを行います。

読み込んでいます...

https://storage.googleapis.com/gweb-cloudblog-publish/images/3_Fig3.max-1300x1300.png

この最後のピースが加わったことで、この AI システムは、単独で処理しようとして混乱してしまう天才から、高度かつ効率的に機能し、自己調整できるスペシャリスト チームへと変わりました。複雑な複数ステップのクエリを処理できるほか、並列実行による高速化を実現し、品質保証のための最終レビュー プロセスを実施できるようになりました。

使ってみる

独自のマルチエージェント ワークフローを構築する準備はできましたか?ご利用方法は以下のとおりです。

ー ソリューション アクセラレーション アーキテクト、Ashwini Kumar

ー ソリューション アクセラレーション アーキテクト、Neeraj Agrawal

投稿先