Googleが開発者向けの新しいオープンソースフレームワーク「Agent Development Kit (ADK)」を発表。マルチエージェントシステムの構築を容易にする同フレームワークは、GoogleのAgentspaceやCustomer Engagement Suiteにも使用されている技術をオープンソース化したもので、モデル選択の柔軟性や本番環境への展開を視野に入れた設計となっています。開発、対話、評価、デプロイといった開発ライフサイクル全体をカバーするツールキットが登場しました。
AI開発の新時代を切り開く「Agent Development Kit」
AIの世界は急速に単一目的のモデルから、自律的なマルチエージェントシステムへと進化しています。しかし、こうしたマルチエージェントシステムの構築には新たな課題が伴います。そこでGoogleは2025年4月9日、Google Cloud NEXTにて「Agent Development Kit(ADK)」を発表しました。これは、エージェントおよびマルチエージェントシステムの開発をシンプルにするための新しいオープンソースフレームワークです。
ADKは開発者に柔軟性と精密な制御を提供し、本番環境に対応したエージェントアプリケーションの構築を可能にします。注目すべきは、このフレームワークがGoogleのAgentspaceやGoogle Customer Engagement Suite(CES)内のエージェントを支える同じ技術基盤だという点です。Googleはこのツールをオープンソース化することで、急速に進化するエージェント開発の領域において、開発者に強力で柔軟なツールを提供することを目指しています。
ADKは柔軟性を重視して設計されており、異なるモデルの使用や、様々なデプロイ環境に対応した本番環境レベルのエージェント構築をサポートします。
ADKの4つの柱:構築、対話、評価、デプロイ
ADKはエージェント開発ライフサイクル全体にわたる機能を提供しています:
- ・マルチエージェント設計:
複数の専門エージェントを階層的に組み合わせて、モジュール性と拡張性の高いアプリケーションを構築できます。複雑な調整や委任機能を実現します。
- ・豊富なモデルエコシステム:
ニーズに最適なモデルを選択可能です。ADKはGeminiだけでなく、Vertex AI Model Gardenを通じてアクセス可能な様々なモデルと連携します。また、LiteLLMとの統合により、Anthropic、Meta、Mistral AI、AI21 Labsなど多くのプロバイダーからモデルを選択できます。
- ・多様なツールエコシステム:
エージェントに様々な機能を装備できます。事前構築されたツール(検索、コード実行など)、Model Context Protocol(MCP)ツール、サードパーティライブラリ(LangChain、LlamaIndex)との統合、あるいは他のエージェントをツールとして使用(LangGraph、CrewAIなど)することも可能です。
- ・ストリーミング機能の組み込み:
ADKの双方向オーディオおよびビデオストリーミング機能により、人間のような自然な会話でエージェントとやり取りできます。数行のコードだけで、テキストを超えた豊かなマルチモーダル対話を作成できます。
- ・柔軟なオーケストレーション:
予測可能なパイプラインにはワークフローエージェント(シーケンシャル、パラレル、ループ)を使用し、適応的な動作にはLLM駆動の動的ルーティング(LlmAgentの転送)を活用できます。
- ・統合された開発者エクスペリエンス:
強力なCLIとビジュアルWebUIを使用して、ローカルで開発、テスト、デバッグを行うことができます。イベント、状態、エージェントの実行をステップバイステップで検査できます。
- ・評価機能の組み込み:
最終的な応答品質と、事前定義されたテストケースに対するステップバイステップの実行経路の両方を評価することで、エージェントのパフォーマンスを体系的に評価できます。
- ・簡単なデプロイ:
エージェントをコンテナ化し、どこにでもデプロイ可能です。
エージェント作成について
ドキュメントの例を探索することをお勧めしますが、ADKの基本的な考え方はPythonのシンプルさにあります。エージェントのロジック、使用できるツール、情報の処理方法を定義します。ADKは状態管理、ツール呼び出しのオーケストレーション、基盤となるLLMとのやり取りを行うための構造を提供します。以下は基本的なエージェントの例です。
このコードはクイックスタートガイドに記載されています:
ーーーー
- from google.adk.agents import LlmAgent
- from google.adk.tools import google_Search
- dice_agent = LlmAgent(
- model="gemini-2.0-flash-exp", # Required: Specify the LLM
- name="question_answer_agent", # Required: Unique agent name
- description="A helpful assistant agent that can answer questions.",
- instruction="""Respond to the query using google search""",
- tools=[google_search], # Provide an instance of the tool
- )
- # you can run this by using adk web
ーーーー
この例は基本構造を示しています。ADKは複数のエージェント、高度なツールの使用、動的なオーケストレーションを含むより複雑なアプリケーションを構築する際に真価を発揮します。すべて制御を維持しながら実現できます。
ADKは、エージェントとの対話方法に柔軟性を提供します:CLI、Web UI、APIサーバー、およびAPI(Python)があります。エージェントの定義方法(agent.py内のコアロジック)は、対話方法にかかわらず同じです。違いは、対話をどのように開始し管理するかにあります。すべての方法の例はADKドキュメントに記載されています。
ADKでマルチエージェントアプリケーションを構築する
ADKは単一のエージェントを超えて、ツールを活用する協調的なマルチエージェントシステムを構築する際に真価を発揮します。会話に基づいてタスクを委任できる主要エージェントと特化したエージェントチームを作成することを想像してみてください。ADKは階層構造とインテリジェントなルーティングを通じてこれを容易にします。
例として、天気に関するクエリを処理するWeatherAgentと、挨拶を専門とするGreetingAgentにタスクを委任する例を見てみましょう。
1.ツールの定義:
エージェントはアクションを実行するためにツールを使用します。ここでは、WeatherAgentが天気データを取得するツールが必要です。Pythonの関数を定義し、ADKはそのドキュメント文字列を利用して、いつどのように使用するかを理解します。
ーーーー
- def get_weather(city: str) -> Dict:
- # Best Practice: Log tool execution for easier debugging
- print(f"--- Tool: get_weather called for city: {city} ---")
- city_normalized = city.lower().replace(" ", "") # Basic input normalization
- # Mock weather data for simplicity (matching Step 1 structure)
- 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."},
- }
- # Best Practice: Handle potential errors gracefully within the tool
- 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はこれらに大きく依存して役割を理解し、サブエージェントへの自動委任を決定します。
ーーーー
- 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.",
- # Crucial for delegation: Clear description of capability
- 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.",
- # Crucial for delegation: Clear description of capability
- 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 togreeting_agent
. - If the user gives a simple farewell (like 'Bye', 'See you'), delegate tofarewell_agent
. - Handle weather requests yourself usingget_weather
. - For other queries, state clearly if you cannot handle them.", - tools=[get_weather], # Root agent still needs the weather tool
- sub_agents=[greeting_agent, farewell_agent]
- )
ーーーー
3.委任の仕組み:
- ・デフォルトのエージェント動作は委任を許可します。
- ・ユーザーメッセージを処理する際、LLMはクエリ、現在のエージェントの説明、関連エージェント(階層で定義された親/サブエージェント)の説明フィールドを考慮します。
- ・LLMが説明に基づいて別のエージェントがより適していると判断すると(例:ユーザーが「こんにちは」と言い、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かGenkit?
ADKでマルチエージェントシステムを構築する可能性を探る中で、Googleが提供するGenAI開発ツールの広範なランドスケープにおいてどのように位置づけられるか疑問に思うかもしれません。さまざまなSDKやフレームワークが利用可能ですが、Genkitフレームワークなど、ADKの相対的な焦点を理解すると役立ちます。
※Genkit Github:https://github.com/firebase/genkit
簡単な比較は次のとおりです:
◆Agent Development Kit:
- ・複雑なエージェントとマルチエージェントシステム向けに最適化され、LiteLLMとVertex AI Model Gardenの組み込み統合を備えた様々なモデルをサポートするエージェント開発のための高レベル抽象化を提供。
- ・エージェントの動作と相互作用の定義に焦点を当てています。
- ・双方向ストリーミングをサポート。
◆Genkit:
- ・AIを活用した多様な体験を構築するための基本的な構成要素を提供。
- ・AIに関する相互作用を反復、テスト、デバッグするための開発者ツールが含まれています。
- ・コミュニティプラグインを通じて、幅広い大規模言語モデルをサポート。
<適切なツールの選択>
最終的に、最適な選択はプロジェクトの特定の目標によって異なります。明確に定義されたフレームワーク内で複雑な協調的なエージェントシステムを構築する場合、ADKは強力なソリューションを提供します。柔軟性と幅広いモデルサポートを必要とする他の多くのGenAIプロジェクトでは、Genkitがおすすめです。
まとめ
Googleが発表した「Agent Development Kit(ADK)」は、AIエージェント開発の新たな地平を切り開く強力なオープンソースフレームワークです。マルチエージェントシステムの構築を容易にし、開発者に柔軟性と精密な制御を提供することで、複雑なAIアプリケーションの開発プロセスを大幅に簡素化しています。
ADKの強みは、マルチエージェント設計、豊富なモデルとツールのエコシステム、柔軟なオーケストレーション、そして統合された開発から評価、デプロイまでのサイクル全体をカバーする包括的なアプローチにあります。特にGoogle Cloudエコシステムとの緊密な統合により、エンタープライズ環境でのAIエージェント開発において優れた選択肢となるでしょう。
単純なエージェントからスタートし、徐々に複雑なマルチエージェントシステムへと拡張できる柔軟性は、AIエージェント開発の民主化に大きく貢献する可能性を秘めています。開発者コミュニティがこの新しいツールで何を構築するのか、今後の展開が楽しみです。