エージェント開発キット: マルチエージェント アプリケーション開発を簡単に

2025年4月9日
Erwin Huizenga Machine Learning Lead
Bo Yang Software Engineer

AI の世界は単一目的モデルを超え、インテリジェントで自律的なマルチエージェント システムに急速に移行しています。しかし、こういったマルチエージェント システムの開発には新しい課題が伴います。そこで本日、Google Cloud NEXT 2025 で、エージェント開発キット(ADK)を紹介します。これは Google の新しいオープンソース フレームワークで、エージェントやマルチエージェント システムのフルスタック エンドツーエンド開発を簡単にするように設計されています。ADK を使えば、皆さんのようなデベロッパーが、高い柔軟性と正確な制御に対応できる本番環境向けエージェント型アプリケーションを開発できます。

ADK は、Agentspace や Google Customer Engagement Suite(CES)など、Google プロダクトのエージェントにも使われているフレームワークです。ADK をオープンソース化する目的は、強力で柔軟なツールをデベロッパーに提供し、急速に進化するエージェント環境で開発を行えるようにすることです。ADK は柔軟で、さまざまなモデルを利用できます。また、多様なデプロイ環境に対応する本番向けエージェントを開発できるように設計されています。


ADK の中核となる柱: ビルド、インタラクション、評価、デプロイ

ADK は、エージェント開発ライフサイクル全体にわたって、次のような機能を提供します。

  • マルチエージェント設計: 専門エージェントを階層的に構成することにより、モジュール式のスケーラブルなアプリケーションを作成できます。複雑な調整や委任も可能です。

  • 豊富なモデル エコシステム: ニーズに最適なモデルを選択できます。ADK は、Gemini でも、Vertex AI Model Garden からアクセスできるモデルでも、お好みのモデルを動作させることができます。このフレームワークでは、LiteLLM インテグレーションも利用でき、Anthropic、Meta、Mistral AI、AI21 Labs などのプロバイダが提供するさまざまなモデルを選択できます。

  • 豊富なツール エコシステム: エージェントに多様な機能を搭載できます。既成のツール(検索、コード実行)やモデル コンテキスト プロトコル(MCP)ツールを使ったり、サードパーティ製ライブラリ(LangChain、LlamaIndex)を組み込んだり、他のエージェントをツールとして利用(LangGraph、CrewAI など)したりできます。

  • ストリーミング対応: ADK 独自の双方向オーディオや動画ストリーミング機能で、人間のように会話してエージェントと対話できます。わずか数行のコードで自然なインタラクションを作成でき、エージェントとの共同作業を変革できます。テキストだけでなく、高度なマルチモーダル対話も実現できます。

  • 柔軟なオーケストレーション: ワークフロー エージェント(SequentialParallelLoop)でワークフローを定義して予測可能なパイプラインを実現するか、LLM 主導のダイナミック ルーティング(LlmAgent 転送)を活用して適応型動作を実現します。

  • デベロッパー エクスペリエンスの統合: 強力な CLI とビジュアルなウェブ UI が搭載されているので、ローカルで開発、テスト、デバッグを行うことができます。イベント、状態、エージェントの実行をステップバイステップで検査できます。

  • 評価機能対応: あらかじめ定義されたテストケースに対し、最終的な応答品質とステップバイステップの実行過程の両方を評価することで、エージェントのパフォーマンスを体系的に評価できます。

  • 簡単なデプロイ: エージェントをコンテナ化してどこにでもデプロイできます。


エージェント スタートガイド

ドキュメントのサンプルを確認することをお勧めしますが、核となるアイデアは Pythonic のシンプルさです。エージェントのロジック、利用できるツール、情報の処理方法を定義すれば、ADK が提供する構造で、状態を管理し、ツールの呼び出しをオーケストレーションして、ベースとなる LLM と対話することができます。次に基本的なエージェントの例を示します。

このコードはクイックスタート ガイドにあるものです。

from google.adk.agents import LlmAgent 
from google.adk.tools import google_Search
 
dice_agent = LlmAgent(
    model="gemini-2.0-flash-exp", # 必須: LLM を指定
    name="question_answer_agent", # 必須: 一意なエージェント名
    description="A helpful assistant agent that can answer questions.",
    instruction="""Respond to the query using google search""",
    tools=[google_search], # ツールのインスタンスを提供
)
 
# これを adk web で実行可能

このシンプルな例は、基本的な構造を示しています。ADK が真価を発揮するのは、制御を維持しながら、複数のエージェントや洗練されたツール、ダイナミックなオーケストレーションを利用する複雑なアプリケーションを開発する場合です。

ADK では、CLI、ウェブ UI、API サーバーと API(Python)などで、エージェントと柔軟にインタラクションできます。エージェントの定義(agent.py のコアロジック)は、エージェントとのインタラクション方法にかかわらず同じままです。違うのは、どのようにインタラクションを開始し、管理するかという点です。ADK ドキュメントの例をご覧ください。

ADK architecture

ADK によるマルチエージェント アプリケーションの開発

ADK が真価を発揮するのは、1 つのエージェントだけでなく、ツールを活用できる協調型マルチエージェント システムを開発するときです。一連の専門エージェントがあり、プライマリ エージェントが会話に基づいてタスクを委任できるようにすることを考えてみましょう。ADK では、階層構造とインテリジェント ルーティングによって、これを簡単に行えるようにしています。

例を使って説明しましょう。WeatherAgent は天気に関するクエリには応答できますが、挨拶は専用の GreetingAgent に委任します。


1. ツールを定義する:
エージェントはツールを使ってアクションを実行します。この例では、WeatherAgent に天気データ取得ツールが必要です。そこで Python 関数を定義します。ADK は docstring から、それをいつどのように使うかを理解します。

def get_weather(city: str) -> Dict:
 
    # ベスト プラクティス: デバッグしやすいようにツールの実行をログに記録する
    print(f"--- Tool: get_weather called for city: {city} ---")
    city_normalized = city.lower().replace(" ", "") # 基本的な入力の正規化
 
    # シンプルにするため、天気データをモックする(手順 1 の構造に一致させる)
    mock_weather_db = {
        "newyork": {"status": "success", "report": "The weather in New York is sunny with a temperature of 25°C."},
        "london": {"status": "success", "report": "It's cloudy in London with a temperature of 15°C."},
        "tokyo": {"status": "success", "report": "Tokyo is experiencing light rain and a temperature of 18°C."},
        "chicago": {"status": "success", "report": "The weather in Chicago is sunny with a temperature of 25°C."},
        "toronto": {"status": "success", "report": "It's partly cloudy in Toronto with a temperature of 30°C."},
        "chennai": {"status": "success", "report": "It's rainy in Chennai with a temperature of 15°C."},
 }
 
    # ベスト プラクティス: エラーが起きてもツールの中で対処する
    if city_normalized in mock_weather_db:
        return mock_weather_db[city_normalized]
    else:
        return {"status": "error", "error_message": f"Sorry, I don't have weather information for '{city}'."}

2. エージェントとその関係を定義する: LlmAgent でエージェントを作成します。指示(instruction)と説明(description)のフィールドには細心の注意を払ってください。LLM はこの 2 つの情報を使って役割を理解し、サブ エージェントへの自動委任に関する判断を行います。

greeting_agent = Agent(
         model=LiteLlm(model="anthropic/claude-3-sonnet-20240229"),
            name="greeting_agent",
            instruction="You are the Greeting Agent. Your ONLY task is to provide a friendly greeting to the user. " "Do not engage in any other conversation or tasks.",
            # 委任に不可欠: 機能を明確に説明する
            description="Handles simple greetings and hellos",
 
 )
 
farewell_agent = Agent(
          model=LiteLlm(model="anthropic/claude-3-sonnet-20240229"),
            name="farewell_agent",
            instruction="You are the Farewell Agent. Your ONLY task is to provide a polite goodbye message. "
                        "Do not perform any other actions.",
            # 委任に不可欠: 機能を明確に説明する
            description="Handles simple farewells and goodbyes",
 
 )
 
root_agent = Agent(
        name="weather_agent_v2", 
        model="gemini-2.0-flash-exp",
        description="You are the main Weather Agent, coordinating a team. - Your main task: Provide weather using the `get_weather` tool. Handle its 'status' response ('report' or 'error_message'). - Delegation Rules: - If the user gives a simple greeting (like 'Hi', 'Hello'), delegate to `greeting_agent`. - If the user gives a simple farewell (like 'Bye', 'See you'), delegate to `farewell_agent`. - Handle weather requests yourself using `get_weather`. - For other queries, state clearly if you cannot handle them.",
        tools=[get_weather], # ルート エージェントにはまだ天気ツールが必要
        sub_agents=[greeting_agent, farewell_agent]
)

委任の仕組み:

  • デフォルトのエージェントの動作では、委任が許可されます。

  • LLM は、クエリの内容、現在のエージェントの description フィールド、関連するエージェント(階層で定義された親とサブ エージェント)の description フィールドを考慮して、ユーザーのメッセージを処理します。

  • LLM が説明の内容から別のエージェントの方が適していると判断すると(ユーザーが「こんにちは」と言っており、それが GreetingAgent の説明と一致している場合など)、転送を開始します。

明確ではっきりした説明が不可欠です。LLM は、それを使ってタスクを効率的にルーティングします。

この設定では、ユーザーが「こんにちは」から始めた場合、WeatherAgent(入力を処理するルート エージェントである場合)はそれが天気クエリではないことを認識し、説明から GreetingAgent が適切であると判断して、制御を自動的に転送できます。ユーザーが「シカゴの天気は?」と尋ねた場合、WeatherAgentget_weather ツールを使って直接処理します。

この例が示すように、ADK の階層構造と説明による委任により、体系化された保守性の高い洗練されたマルチエージェント アプリケーションを開発できます。


ライフサイクルの終盤: 評価とデプロイメント

天気エージェントのようなインテリジェント エージェントの開発は基礎ですが、ユーザーがそれを確実に利用できるようにするには、厳密な評価とシームレスなデプロイが必要です。これが次の重要なステップになります。最も重要なのは、公開前にエージェントの動作が予測可能で正確であることを保証することです。ADK の統合評価ツールは、まさにそのために設計されています。これを使うことで、evaluation.test.jsontest.json など、あらかじめ定義されたデータセットに対して、実行パスや応答品質を体系的にテストできます。AgentEvaluator.evaluate() を使うと、こういったチェックをテストスイートからプログラムで実行できます。ADK の eval コマンドライン ツールやウェブ UI から直接評価することもできます。

ADK は本番環境に効率的に導入する明確なパスを提供しています。パフォーマンスに満足できたら、任意のコンテナ ランタイムにデプロイするか、Vertex AI Agent Engine に組み込むことができます。開発ライフサイクルの最後で、フルマネージドでスケーラブルなエンタープライズ グレードのランタイムを活用することで、洗練されたプロトタイプを安定した本番対応エージェント アプリケーションに移行できます。


フレームワークの選定: ADK か Genkit か?

ADK でマルチエージェント システムを開発する可能性を検討していると、Google のさまざまな生成 AI 開発ツールの中で ADK はどのような位置づけにあるのかという疑問が浮上してくるかもしれません。Genkit フレームワークなど、さまざまな SDK やフレームワークが利用できるので、ADK の重点ポイントを相対的に理解しておくとよいでしょう。簡単な比較は次のとおりです。


エージェント開発キット:

  • 複雑なエージェントやマルチエージェント システムに最適です。さまざまなモデルをサポートする LiteLLM と Vertex AI Model Garden を利用できるので、エージェント開発を高度に抽象化できます。

  • エージェントの動作とインタラクションの定義を重点的に扱います。

  • 双方向ストリーミングをサポートします。


Genkit:

  • 多種多様な AI エクスペリエンスを開発するための基本的なビルディング ブロックを提供します。

  • デベロッパー ツールが含まれており、AI 関連のインタラクションを反復、テスト、デバッグできます。

  • Google AI、Vertex AI、コミュニティ プラグインによるサードパーティ製モデルなど、さまざまな大規模言語モデルをサポートします。


適切なツールを選択する

最終的には、最適な選択肢はプロジェクトの具体的な目標次第です。明確に定義されたフレームワーク内で複雑な協調型エージェント システムを開発するなら、ADK が強力なソリューションとなります。柔軟性と幅広いモデルのサポートが必要となるその他多くの生成 AI プロジェクトには、Genkit が優れた選択肢となります。


ADK はどこでも動作し、Google Cloud に最適化されている

エージェント開発キット(ADK)は柔軟で、さまざまなツールと連携できますが、とりわけ Google Cloud エコシステム、具体的には Gemini モデルや Vertex AI とのシームレスな連携に最適化されています。このカスタム設計により、デベロッパーは、Gemini 2.5 Pro Experimental の強力な推論やツール利用といった Gemini の高度な機能をフル活用できます。エージェントを Vertex AI のフルマネージド エンタープライズグレード ランタイムにデプロイし、ネイティブで直接的にスケーラビリティを実現する方法も準備されています。

すばらしいことに、この密接な統合で幅広いエンタープライズ環境を対象にすることができます。ADK では 100 以上の既成コネクタを通し、エージェントがシステムやデータに直接接続できます。Application Integration で作成したワークフローを利用したり、重複データを持つことなく、AlloyDB、BigQuery、NetApp などのシステムに保存されているデータにアクセスしたりできます。

さらに、ADK で開発したエージェントは、Apigee で管理している組織の既存 API を安全に利用できるので、既成のインターフェースを活用して、機能をさらに強化することができます。

この幅広い接続機能が高度な AI モデル、スケーラブルなデプロイメント、多様なデータソース、既存の API を網羅しているため、ADK は Google Cloud 環境で比類のない力を発揮します。


ADK で次世代のエージェントを開発する

エージェント開発キット(ADK)は強力で柔軟なオープンソースの基盤であり、次世代の AI アプリケーションを開発できます。ADK は以下の機能を提供することを通して、マルチエージェント開発の中核的な課題に対処します。

  • エージェントの動作とオーケストレーションの正確な制御

  • ツールとインテグレーションのための豊富なエコシステム

  • ビルドやデバッグを行える統合デベロッパー エクスペリエンス

  • 信頼性の高いエージェントに不可欠な安定した評価フレームワーク

  • マネージド オプションを含むデプロイメントへの明確なパス

皆さんが ADK で作る作品をとても楽しみにしています!

コードを確認: 公式 ADK ドキュメント