はじめに

Google Cloud Next ’25 で Agent Development Kit (ADK) が発表されました。

これは、エージェントおよびマルチエージェントシステムの開発を簡素化するために設計された、Googleの新しいオープンソースフレームワークです。
特徴として以下が挙げられます。

  • マルチエージェント設計: 複数の専門化されたエージェントを階層的に構成し、複雑な連携と委任を可能にする、マルチエージェントシステム構築に最適化された設計。
  • 豊富なモデルエコシステム: Gemini や Vertex AI Model Garden のモデルに加え、LiteLLM 連携により Anthropic、Meta、Mistral AI など多様なモデルを利用可能。
  • 多様なツールエコシステム: 検索、コード実行などの事前構築済みツール、MCP ツール、LangChain や LlamaIndex などの外部ライブラリ、さらには他のエージェントをツールとして活用できる柔軟性。
  • 組み込みのストリーミング機能: 双方向のオーディオおよびビデオストリーミングにより、テキストを超えた自然でリッチな対話をわずかなコードで実現。
  • 統合された開発者体験: 強力な CLI と視覚的な Web UI により、ローカルでの開発、テスト、デバッグが容易。

ドキュメントは以下となります。

Agent Development Kit
Build powerful multi-agent systems with Agent Development Kit

試してみた

今回は簡単なAIエージェントを構築します。

エージェント/Tool名 機能
挨拶エージェント 挨拶を返してくれる
送別エージェント 送別の言葉を返してくれる
都市情報エージェント 都市の情報を返してくれる(以下のToolを使用)
天気情報を取得するTool 都市の天気情報
人口情報を取得するTool 都市の人口情報

環境構築

Agent Development Kit (ADK) をインストールします。

pip install google-adk

ディレクトリ構成を以下のようにします。

parent_folder/
└── multi_tool_agent/
    ├── __init__.py
    ├── agent.py
    └── .env

__init__.pyには、以下を記載します。

from . import agent

.envには、Google AI Studio か Vertex AI on Google Cloud の情報を記載します。
Google AI Studioの場合

GOOGLE_GENAI_USE_VERTEXAI="False"
GOOGLE_API_KEY="paste-your-actual-key-here"

Vertex AI on Google Cloud の場合

GOOGLE_CLOUD_PROJECT="your-project-id"
GOOGLE_CLOUD_LOCATION="your-location"
GOOGLE_GENAI_USE_VERTEXAI="True"

Toolの定義

今回は簡易的に4つの都市に絞ったMockデータを使用します。
天気情報を取得するToolを定義します。

def get_weather(city: str):
    # Mock weather data
    mock_weather_db = {
        "東京": {"status": "success", "report": "東京は25°Cです"},
        "大阪": {"status": "success", "report": "大阪は15°Cです"},
        "ニューヨーク": {"status": "success", "report": "ニューヨークは10°Cです"},
        "ロンドン": {"status": "success", "report": "ニューヨークは5°Cです"},
    }

    if city in mock_weather_db:
        return mock_weather_db[city]
    else:
        return {"status": "error", "error_message": f"'{city}'に関する天気情報はありません。"}

人口情報を取得するToolを定義します。

def get_population(city: str):
    # Mock population data
    mock_population_db = {
        "東京": {"status": "success", "report": "東京の人口は、約1400万人です"},
        "大阪": {"status": "success", "report": "大阪の人口は、約900万人です"},
        "ニューヨーク": {"status": "success", "report": "ニューヨークの人口は、約800万人です"},
        "ロンドン": {"status": "success", "report": "ニューヨークの人口は、約880万人です"},
    }

    if city in mock_population_db:
        return mock_population_db[city]
    else:
        return {"status": "error", "error_message": f"'{city}'に関する人口情報はありません。"}

エージェントの定義

挨拶エージェントの定義をします。

greeting_agent = Agent(
        model="gemini-2.0-flash-exp",
        name="挨拶Agent",
        instruction="あなたは挨拶エージェントです。あなたの唯一のタスクは、ユーザーに友好的な挨拶をすることです。他の会話やタスクには一切関与しないでください。",
        description="簡単な挨拶や「こんにちは」に対応します。",
)

送別エージェントの定義をします。

goodbye_agent = Agent(
        model="gemini-2.0-flash-exp",
        name="送別Agent",
        instruction="あなたは送別エージェントです。あなたの唯一のタスクは、丁寧な別れのメッセージを提供することです。他の行動は一切行わないでください。",
        description="簡単な挨拶や「さようなら」に対応します。",

)

都市情報エージェントの定義をします。

root_agent = Agent(
        name="都市情報Agent",
        model="gemini-2.0-flash-exp",
        description="あなたは主要な都市情報エージェントであり、チームを統括しています。 - あなたの主なタスク:get_weatherツールを使って天気を提供することまたはget_populationツールを使って人口を提供すること。その'status'レスポンス('report'または'error_message')を処理してください。 - 委任ルール: - ユーザーが簡単な挨拶(「こんにちは」、「もしもし」など)をした場合、greeting_agentに委任してください。 - ユーザーが簡単な別れの挨拶(「さようなら」、「またね」など)をした場合、farewell_agentに委任してください。 - 天気のリクエストはget_weatherを使って自身で処理してください。 - 人口のリクエストはget_populationを使って自身で処理してください。- その他の問い合わせについては、対応できない場合は明確に伝えてください。",
        tools=[get_weather, get_population],
        sub_agents=[greeting_agent, goodbye_agent]
)

今回の都市情報Agentは委任が許可されています。

委任の仕組み:

  • デフォルトのエージェントの動作では、委任が許可されている。
  • LLM は、ユーザー メッセージを処理する際に、クエリ、現在のエージェントのdescription、関連エージェントのdescriptionフィールドを考慮する。
  • LLM がdescriptionに基づいて別のエージェントの方が適していると判断した場合 (例: ユーザーが「こんにちは」と言った場合、挨拶Agent説明と一致)、転送が開始される。

動作確認

Agent Development Kit (ADK)でが、WenUIで動作確認することもできます。

adk web

http://localhost:8000/ にアクセスし、左上から該当のエージェントを選択します。

「こんにちわ」と入力すると、都市情報エージェントから挨拶エージェントに委任されて、挨拶エージェントが回答を返してくれました。

「大阪の天気は?」と聞くと、挨拶エージェントから都市情報エージェントに委任されて、Toolを使用して回答を返してくれました。

「ロンドンの人口は?」と聞くと、都市情報エージェントなのでそのままToolを使用して回答を返してくれました。

構成したエージェントの動きをしてくれました!

おわりに

今回、Agent Development Kit (ADK) を試してみました。
WebUIが使えるようになっていて、さらにどのエージェント、Toolを使用しているか視認もできて、開発しやすそうと感じました。
エージェント構築のコードも直感的に書くことができるので、より容易にエージェント開発が進みそうです。
他にも様々な機能(Vertex AI Agent Engine や Cloud Run へのデプロイ、高度なワークフローなど)があるので、使いこなして行きたいと思いました!