AI の世界は単一目的モデルを超え、インテリジェントで自律的なマルチエージェント システムに急速に移行しています。しかし、こういったマルチエージェント システムの開発には新しい課題が伴います。そこで本日、Google Cloud NEXT 2025 で、エージェント開発キット(ADK)を紹介します。これは Google の新しいオープンソース フレームワークで、エージェントやマルチエージェント システムのフルスタック エンドツーエンド開発を簡単にするように設計されています。ADK を使えば、皆さんのようなデベロッパーが、高い柔軟性と正確な制御に対応できる本番環境向けエージェント型アプリケーションを開発できます。
ADK は、Agentspace や Google Customer Engagement Suite(CES)など、Google プロダクトのエージェントにも使われているフレームワークです。ADK をオープンソース化する目的は、強力で柔軟なツールをデベロッパーに提供し、急速に進化するエージェント環境で開発を行えるようにすることです。ADK は柔軟で、さまざまなモデルを利用できます。また、多様なデプロイ環境に対応する本番向けエージェントを開発できるように設計されています。
ADK は、エージェント開発ライフサイクル全体にわたって、次のような機能を提供します。
Sequential
、Parallel
、Loop
)でワークフローを定義して予測可能なパイプラインを実現するか、LLM 主導のダイナミック ルーティング(LlmAgent
転送)を活用して適応型動作を実現します。ドキュメントのサンプルを確認することをお勧めしますが、核となるアイデアは 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 が真価を発揮するのは、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]
)
description
フィールド、関連するエージェント(階層で定義された親とサブ エージェント)の description
フィールドを考慮して、ユーザーのメッセージを処理します。GreetingAgent
の説明と一致している場合など)、転送を開始します。明確ではっきりした説明が不可欠です。LLM は、それを使ってタスクを効率的にルーティングします。
この設定では、ユーザーが「こんにちは」から始めた場合、WeatherAgent
(入力を処理するルート エージェントである場合)はそれが天気クエリではないことを認識し、説明から GreetingAgent
が適切であると判断して、制御を自動的に転送できます。ユーザーが「シカゴの天気は?」と尋ねた場合、WeatherAgent
は get_weather
ツールを使って直接処理します。
この例が示すように、ADK の階層構造と説明による委任により、体系化された保守性の高い洗練されたマルチエージェント アプリケーションを開発できます。
天気エージェントのようなインテリジェント エージェントの開発は基礎ですが、ユーザーがそれを確実に利用できるようにするには、厳密な評価とシームレスなデプロイが必要です。これが次の重要なステップになります。最も重要なのは、公開前にエージェントの動作が予測可能で正確であることを保証することです。ADK の統合評価ツールは、まさにそのために設計されています。これを使うことで、evaluation.test.json
や test.json
など、あらかじめ定義されたデータセットに対して、実行パスや応答品質を体系的にテストできます。AgentEvaluator.evaluate()
を使うと、こういったチェックをテストスイートからプログラムで実行できます。ADK の eval コマンドライン ツールやウェブ UI から直接評価することもできます。
ADK は本番環境に効率的に導入する明確なパスを提供しています。パフォーマンスに満足できたら、任意のコンテナ ランタイムにデプロイするか、Vertex AI Agent Engine に組み込むことができます。開発ライフサイクルの最後で、フルマネージドでスケーラブルなエンタープライズ グレードのランタイムを活用することで、洗練されたプロトタイプを安定した本番対応エージェント アプリケーションに移行できます。
ADK でマルチエージェント システムを開発する可能性を検討していると、Google のさまざまな生成 AI 開発ツールの中で ADK はどのような位置づけにあるのかという疑問が浮上してくるかもしれません。Genkit フレームワークなど、さまざまな SDK やフレームワークが利用できるので、ADK の重点ポイントを相対的に理解しておくとよいでしょう。簡単な比較は次のとおりです。
最終的には、最適な選択肢はプロジェクトの具体的な目標次第です。明確に定義されたフレームワーク内で複雑な協調型エージェント システムを開発するなら、ADK が強力なソリューションとなります。柔軟性と幅広いモデルのサポートが必要となるその他多くの生成 AI プロジェクトには、Genkit が優れた選択肢となります。
エージェント開発キット(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)は強力で柔軟なオープンソースの基盤であり、次世代の AI アプリケーションを開発できます。ADK は以下の機能を提供することを通して、マルチエージェント開発の中核的な課題に対処します。
皆さんが ADK で作る作品をとても楽しみにしています!
コードを確認: 公式 ADK ドキュメント