
Google ADKチュートリアル: AIエージェントをゼロから本番環境へ
GoogleのAgent Development Kit (ADK) は、マルチエージェントシステムをようやく身近に感じられるようにしてくれるフレームワークです。LangChainやCrewAIを使ってAIエージェントを構築し、フレームワークと戦っているような感覚を持っていたなら、このGoogle ADKチュートリアルでは、最初のエージェントの作成からCloud Runへのデプロイまで、すべてを順を追って解説します。
Google ADKとは何か(そしてなぜ注目すべきか)
GoogleのAgent Development Kit (ADK)は、AIエージェントの構築、評価、デプロイのためのオープンソースPythonフレームワークです。2025年にリリースされ、Geminiに最適化されていますが、LiteLLM経由で100以上のモデルをサポートしています。ADKのキラー機能は、ネイティブなマルチエージェントオーケストレーションであり、接着剤のようなコードなしで他のエージェントにタスクを委任できるエージェントを実現します。
LangChain、CrewAI、そして現在はADKでエージェントを構築してきた経験から際立つのは、ADKが適切な場所で意見を持っている点です。プロジェクト構造、組み込みの開発用UI、デプロイコマンドを提供してくれます。基本的なエージェントを動かすために5つのライブラリをつなぎ合わせる必要はありません。
LangChainが多目的なスイスアーミーナイフだとすれば、ADKはマルチエージェントワークフローのためにGoogleが特別に設計したツールキットです。CrewAIは哲学的に近いものがあり、役割ベースのエージェントが協力しますが、ADKは組み込みの評価、ネイティブなGemini最適化、ワンコマンドでのCloud Runデプロイにより、さらに先を行っています。詳細な比較については、エージェントフレームワークの深掘り比較をご覧ください。
ADKは誰向けでしょうか?構造化されたマルチエージェントシステムを望むPython開発者。すでにGoogle CloudやGeminiを使用しているチーム。ボイラープレート的なオーケストレーションロジックを書くことに疲れた人すべてです。
フレームワークの概略は以下の通りです:
| 機能 | Google ADK | LangGraph | CrewAI |
|---|---|---|---|
| ネイティブなマルチエージェント | はい | グラフ経由 | はい |
| モデルサポート | Gemini + LiteLLM経由で100以上 | 任意 | 任意 |
| 組み込みUI | はい (adk web) | LangSmith | なし |
| デプロイ | Cloud Run, Vertex AI | カスタム | カスタム |
| 学習曲線 | 低〜中 | 高 | 低 |
| オープンソース | はい (Apache 2.0) | はい | はい |
要約すると、「アイデア」から「デプロイされたマルチエージェントシステム」への最速パスを求めている場合、現時点ではADKに対抗するのは困難です。
前提条件とGoogle ADKのインストール
Google ADKを始めるには、Python 3.9以上、Gemini APIキー(Google AI Studioで無料 tier利用可能)、およびgoogle-adkパッケージが必要です。pip install google-adkでインストールし、APIキーを環境変数として設定すれば、5分以内に最初のエージェントを構築する準備が整います。
セットアップチェックリストは以下の通りです:
- Python 3.9+ (完全な型ヒントサポートのため、3.10+を推奨)
- Gemini APIキー、aistudio.google.comで無料で取得できます。無料 tier では1分あたり15リクエストが可能で、開発には十分です。
- pip (または速度を重視するなら
uv、uv pip install google-adkも動作します)
パッケージをインストールし、キーを設定します:
pip install google-adk
# Set your API key (add to .bashrc/.zshrc for persistence)
export GOOGLE_API_KEY="your-api-key-here"ADKは特定のフォルダ構造を想定しています。各エージェントは独自のパッケージディレクトリ内に存在します:
my_agent/
__init__.py # Exports root_agent
agent.py # Agent definition
.env # Optional: GOOGLE_API_KEY=your-keyフォルダ名がエージェントのパッケージ名になるため、説明的な名前を選んでください。testやagentといった名前は避けてください。Pythonのインポートシステムを混乱させることになります。
プロのヒント: uvを使用している場合は、まずuv venv && source .venv/bin/activateで仮想環境を作成してください。依存関係の解決において、通常のpipよりも noticeably 高速です。
最初のGoogle ADKエージェントを構築する
最初のADKエージェントに必要なものは3つだけです:名前、モデル(例:gemini-2.0-flash)、および指示文字列です。これをagent.pyで定義し、__init__.pyのあるフォルダ内に配置して、adk webを実行すると、ブラウザUIでチャットできます。全体のセットアップはPython約10行で完了します。
my_agentというフォルダを作成し、2つのファイルを追加します。まず、エージェントの定義です:
# my_agent/agent.py
from google.adk.agents import LlmAgent
root_agent = LlmAgent(
name="my_assistant",
model="gemini-2.0-flash",
instruction="""You are a helpful coding assistant.
You explain concepts clearly and provide working code examples.
Keep responses concise but thorough.""",
description="A coding assistant that explains concepts and writes code"
)次に、エージェントをエクスポートするinitファイルです:
# my_agent/__init__.py
from .agent import root_agentこの変数名は重要です。ADKは specifically root_agentを探します。これを忘れると、理由を説明しない「エージェントが見つかりません」というエラーが発生します。
さて、実行しましょう。選択肢は2つあります:
# CLI mode -- chat in your terminal
adk run my_agent
# Web UI mode -- opens a browser interface
adk web my_agentadk webインターフェースは genuinely 有用です。会話の全トレース、エージェントが呼び出したツール、モデルが受信したもの、および返したものを表示します。エージェント用のChrome DevToolsと考えてください。後でマルチエージェントシステムの構築を始めると、委任フローを理解するためにこれが不可欠になります。
動作の変化を確認するために指示を変更してみてください。海賊にしたり、俳句でのみ応答するようにしたりします。指示が動作を形成する方法を感じることは、このチュートリアルの他のすべての基礎となります。
Google ADKエージェントにカスタムツールを追加する
ADKエージェントにツールを与えると有用になります。明確なdocstringを持つPython関数を定義すると、ADKはそれをエージェントが呼び出せるツールに自動変換します。docstringはcriticalです。モデルにツールの用途と使用時期を伝えます。ADKには、Google検索やコード実行などの組み込みツールも付属しています。
ツールはエージェントの「手」です。それらがなければ、エージェントは話すことしかできません。それらがあれば、データベースの確認、APIの呼び出し、計算の実行、外部システムとの対話が可能です。内部での関数呼び出しの仕組みを理解したい場合は、別途深掘り記事があります。
カスタム関数ツール
実用的な例として、株価を検索するツールがあります:
# my_agent/agent.py
from google.adk.agents import LlmAgent
def get_stock_price(ticker: str) -> dict:
"""Get the current stock price for a given ticker symbol.
Args:
ticker: The stock ticker symbol (e.g., 'AAPL', 'GOOGL', 'MSFT')
Returns:
A dictionary with the ticker and its current price.
"""
# In production, you'd call a real API here
mock_prices = {"AAPL": 198.50, "GOOGL": 175.20, "MSFT": 425.80}
price = mock_prices.get(ticker.upper(), None)
if price:
return {"ticker": ticker.upper(), "price": price, "currency": "USD"}
return {"error": f"Ticker {ticker} not found"}
root_agent = LlmAgent(
name="finance_assistant",
model="gemini-2.0-flash",
instruction="You help users check stock prices. Use the get_stock_price tool when asked about any stock.",
tools=[get_stock_price],
description="A financial assistant that looks up stock prices"
)型ヒントとdocstringに注目してください。これらはオプションの親切心ではなく、ADKはこれらを使用してモデルが表示するツールスキーマを生成します。docstringを省略すると、モデルはいつ関数を呼び出すべきか分かりません。型ヒントを省略すると、シグネチャエラーが発生します。
組み込みツール(Google検索、コード実行)
ADKには、コードを書かずにドロップインできるツールが付属しています:
from google.adk.agents import LlmAgent
from google.adk.tools import google_search, code_execution
root_agent = LlmAgent(
name="research_agent",
model="gemini-2.0-flash",
instruction="You research topics using Google Search and can run Python code to analyze data.",
tools=[google_search, code_execution],
description="A research agent with search and code execution capabilities"
)google_searchにより、エージェントはリアルタイムでWebを検索できます。code_executionにより、計算を実行するためのサンドボックス化されたPython環境が提供されます。これら2つだけで、驚くほど多くのユースケースをカバーします。
マルチエージェントシステム: Google ADKエージェントが仕事を委任する方法
ADKのマルチエージェントシステムは、タスクを専門的なサブエージェントに委任するルートエージェントを使用します。各サブエージェントは1つのドメイン(研究、執筆、コーディングなど)を処理します。ルートエージェントはユーザーのリクエストに基づいてどのサブエージェントを呼び出すか決定します。また、あるエージェントが別のエージェントを関数のように呼び出す「エージェント・アズ・ツール」パターンも使用できます。Googleのマルチエージェントシステムに関する公式ブログでは、アーキテクチャパターンについてさらに深く解説しています。
プロジェクトマネージャーが専門家に仕事を委任するようなものだと考えてください。ルートエージェントはユーザーのリクエストを読み、どの専門家が処理すべきかを判断し、適切にルーティングします。専門家同士は互いを認識しておらず、ただ自分の仕事をして報告するだけです。
ルートエージェント + サブエージェントパターン
以下は、研究エージェントと執筆エージェントに委任するルートエージェントを使用した動作例です:
from google.adk.agents import LlmAgent
from google.adk.tools import google_search
# Sub-agent 1: handles research
research_agent = LlmAgent(
name="researcher",
model="gemini-2.0-flash",
instruction="You research topics thoroughly using Google Search. Return factual, well-sourced information.",
tools=[google_search],
description="Researches topics and returns factual information"
)
# Sub-agent 2: handles writing
writing_agent = LlmAgent(
name="writer",
model="gemini-2.0-flash",
instruction="You write clear, engaging content based on provided information. Focus on readability and accuracy.",
description="Writes polished content from research notes"
)
# Root agent: delegates to the right sub-agent
root_agent = LlmAgent(
name="content_manager",
model="gemini-2.0-flash",
instruction="""You manage content creation.
- When the user wants information gathered, delegate to the researcher.
- When the user wants content written or edited, delegate to the writer.
- You can chain both: research first, then write.""",
sub_agents=[research_agent, writing_agent],
description="Manages content creation by delegating to research and writing specialists"
)各サブエージェントのdescriptionフィールドは、ルートエージェントが彼らの能力を理解する方法です。明確な説明を書いてください。曖昧な説明は悪いルーティング判断につながります。
エージェント・アズ・ツールパターン
あるエージェントが別のエージェントをどのように呼び出すかについて、より多くの制御を望む場合があります。エージェント・アズ・ツールパターンは、サブエージェントを呼び出し可能なツールとしてラップします:
from google.adk.tools import agent_tool
research_tool = agent_tool.AgentTool(agent=research_agent)
root_agent = LlmAgent(
name="writer_with_research",
model="gemini-2.0-flash",
instruction="You write articles. Use the research tool to gather facts before writing.",
tools=[research_tool],
description="A writer that can research topics on demand"
)ルートエージェントに完全に制御を委任したい場合はサブエージェントを使用してください。呼び出し側エージェントが主導権を握り、サブエージェントの出力を入力として使用したい場合はエージェント・アズ・ツールを使用してください。エージェントが共有コンテキストを必要とするシステムを構築している場合は、エージェントメモリアーキテクチャの包括的ガイドを参照してください。
ワークフローエージェント: シーケンシャル、パラレル、ループ
LLM駆動の委任を超えて、ADKは決定論的オーケストレーションのための3つのワークフローエージェントタイプを提供します:SequentialAgentはサブエージェントを次々と実行し、ParallelAgentは同時に実行し、LoopAgentは条件が満たされるまでシーケンスを繰り返します。これらは、LLMに決定させるのではなく、予測可能な実行順序が必要な場合に役立ちます。
この区別は重要です。LLM駆動の委任(上記のsub_agentsパターン)はモデルに誰を呼び出すかを選択させます。ワークフローエージェントはプログラムによる制御を提供します。実行順序が事前にわかっている場合はワークフローエージェントを使用してください。
from google.adk.agents import SequentialAgent, ParallelAgent, LlmAgent
# Three agents that must run in order
research_agent = LlmAgent(name="researcher", model="gemini-2.0-flash",
instruction="Research the given topic.", description="Researches topics")
draft_agent = LlmAgent(name="drafter", model="gemini-2.0-flash",
instruction="Write a draft based on the research.", description="Writes drafts")
review_agent = LlmAgent(name="reviewer", model="gemini-2.0-flash",
instruction="Review the draft for accuracy and clarity.", description="Reviews content")
# Pipeline: research -> draft -> review
content_pipeline = SequentialAgent(
name="content_pipeline",
sub_agents=[research_agent, draft_agent, review_agent],
description="Runs a complete content creation pipeline"
)同時に実行できる独立したタスクの場合、ParallelAgentは実際の時間を節約します:
# Three data fetchers that run concurrently
fetch_news = LlmAgent(name="news_fetcher", model="gemini-2.0-flash",
instruction="Fetch latest tech news.", description="Fetches news")
fetch_stocks = LlmAgent(name="stock_fetcher", model="gemini-2.0-flash",
instruction="Fetch stock market summary.", description="Fetches stocks")
fetch_weather = LlmAgent(name="weather_fetcher", model="gemini-2.0-flash",
instruction="Fetch weather forecast.", description="Fetches weather")
morning_briefing = ParallelAgent(
name="morning_briefing",
sub_agents=[fetch_news, fetch_stocks, fetch_weather],
description="Gathers morning briefing data in parallel"
)| パターン | エージェントタイプ | ユースケース | 例 |
|---|---|---|---|
| パイプライン | SequentialAgent | ステップは順序通りに発生しなければならない | 研究 -> 執筆 -> レビュー |
| ファンアウト | ParallelAgent | 独立したタスク | 3つのAPIから同時にデータを取得 |
| 反復 | LoopAgent | 品質が満たされるまで繰り返す | 下書き -> レビュー -> 修正(ループ) |
状態とメモリの管理
ADKは2つのレベルでエージェントの状態を管理します:セッション状態(会話中のデータ、チャット途中で収集されたユーザー設定など)とメモリサービス(会話間で永続化するデータ)。セッション状態はcontext.state経由でアクセスされる単純なキーバリューストアです。メモリは本番環境用にInMemoryMemoryServiceやVertexAIMemoryBankServiceなどのサービスを使用します。
セッション状態の方がシンプルです。これは各会話に付随する辞書です:
from google.adk.agents import LlmAgent
def save_preference(key: str, value: str, context) -> str:
"""Save a user preference to session state.
Args:
key: The preference name (e.g., 'language', 'theme')
value: The preference value
context: The ADK context object
Returns:
Confirmation message
"""
context.state[key] = value
return f"Saved preference: {key} = {value}"
def get_preference(key: str, context) -> str:
"""Retrieve a user preference from session state.
Args:
key: The preference name to look up
context: The ADK context object
Returns:
The preference value or a not-found message
"""
value = context.state.get(key, "Not set")
return f"{key} = {value}"
root_agent = LlmAgent(
name="personalized_assistant",
model="gemini-2.0-flash",
instruction="You remember user preferences. Save them when told, recall them when asked.",
tools=[save_preference, get_preference],
description="An assistant that remembers user preferences"
)会話横断的なメモリ、つまりエージェントが先週の火曜日のユーザーを記憶するような種類の場合は、メモリサービスが必要です:
from google.adk.memory import InMemoryMemoryService
# For development (data lost on restart)
memory_service = InMemoryMemoryService()
# For production, use VertexAIMemoryBankService
# memory_service = VertexAIMemoryBankService(project="your-project")いつメモリが必要で、いつセッション状態で十分でしょうか?単一の会話内(ショッピングカート、現在のタスクコンテキスト)であれば、セッション状態を使用してください。会話間で存続する必要がある場合(ユーザー設定、過去の相互作用)は、メモリサービスを使用してください。本番パターンについては、エージェントメモリアーキテクチャの包括的ガイドをご覧ください。
コールバック: エージェント動作の制御
ADKコールバックを使用すると、4つのポイントでエージェント動作をインターセプトおよび変更できます:before_model_callback(LLM呼び出し前)、after_model_callback(LLM応答後)、before_tool_callback(ツール実行前)、およびafter_tool_callback(ツール結果後)。これらを入力検証、安全フィルタリング、ログ記録、またはユーザーに届く前に応答を変更するために使用します。
コールバックはガードレールを追加する場所です。エージェントのミドルウェアと考えてください。すべてのリクエストと応答がこれらを通過し、検査、変更、またはブロックすることができます。
from google.adk.agents import LlmAgent
def safety_filter(callback_context, llm_request):
"""Block requests containing harmful content patterns."""
user_message = str(llm_request)
blocked_patterns = ["ignore your instructions", "pretend you are"]
for pattern in blocked_patterns:
if pattern.lower() in user_message.lower():
# Return a response directly, skipping the model call
return {"blocked": True, "reason": "Request matched safety filter"}
# Return None to proceed normally
return None
def log_tool_usage(callback_context, tool_name, tool_result):
"""Log every tool call for monitoring."""
print(f"[TOOL LOG] {tool_name}: {tool_result}")
return None # Don't modify the result
root_agent = LlmAgent(
name="safe_assistant",
model="gemini-2.0-flash",
instruction="You are a helpful assistant.",
before_model_callback=safety_filter,
after_tool_callback=log_tool_usage,
description="A safety-filtered assistant with tool logging"
)before_model_callbackは本番環境で最も重要です。すべてのLLM呼び出しの前に実行され、プロンプトインジェクションをブロックしたり、入力を検証したり、システムコンテキストを追加する機会を提供します。レスポンスオブジェクトを返すと、ADKはモデルを完全にスキップします。リクエストを通すにはNoneを返します。詳細なパターンについては、LLM安全ガードレールの深いパターンを参照してください。
ADKエージェントのテストと評価
ADKには2つの評価器タイプを持つ組み込み評価フレームワークが含まれています:ResponseEvaluatorはエージェントの最終回答が正しいかどうかをチェックし、TrajectoryEvaluatorはエージェントが正しい手順を踏んだか、正しい順序で正しいツールを呼び出したかを確認します。JSONファイルとしてテストケースを作成し、pytestで実行して、デプロイ前に回帰を検出します。
なぜエージェントのテストに手間をかけるのでしょうか?因为它们是非決定論的だからです。同じ入力でも異なる出力を生み出す可能性があり、指示の小さな変更が微妙な方法でツール呼び出しを壊す可能性があります。私たちの経験では、最終出力の品質のみでテストされたものよりも、軌跡評価をパスしたエージェントの方が本番環境でははるかに信頼性が高いです。幅広い評価戦略については、LLM評価戦略のガイドを参照してください。
テストケースはJSONファイルに入れます:
[
{
"input": "What's the stock price of AAPL?",
"expected_output": "198.50",
"expected_trajectory": [
{"tool_name": "get_stock_price", "args": {"ticker": "AAPL"}}
]
},
{
"input": "Compare AAPL and GOOGL prices",
"expected_output": "AAPL.*198.*GOOGL.*175",
"expected_trajectory": [
{"tool_name": "get_stock_price", "args": {"ticker": "AAPL"}},
{"tool_name": "get_stock_price", "args": {"ticker": "GOOGL"}}
]
}
]次に、pytestで評価を実行します。ADK Pythonリポジトリには完全な評価APIリファレンスがあります:
# test_agent.py
import pytest
from google.adk.evaluation import ResponseEvaluator, TrajectoryEvaluator
def test_stock_agent_response():
evaluator = ResponseEvaluator(agent=root_agent)
results = evaluator.evaluate("test_cases.json")
assert results.pass_rate >= 0.8, f"Response pass rate too low: {results.pass_rate}"
def test_stock_agent_trajectory():
evaluator = TrajectoryEvaluator(agent=root_agent)
results = evaluator.evaluate("test_cases.json")
assert results.pass_rate >= 0.9, f"Trajectory pass rate too low: {results.pass_rate}"pytest test_agent.py -vで実行します。重要度に基づいて閾値を設定してください。クリエイティブライティングエージェントであれば80%の応答精度で問題ないかもしれませんが、金融データを扱うものであれば95%以上を望むでしょう。
Google ADKエージェントを本番環境にデプロイする
1つのコマンドでADKエージェントをGoogle Cloud Runにデプロイします:adk deploy cloud_run --project YOUR_PROJECT --region us-central1。ADKはコードをパッケージ化し、コンテナをビルドして、サーバーレスエンドポイントを起動します。マネージドホスティングにはVertex AI Agent Engineを使用してください。カスタムインフラストラクチャの場合、ADKはDockerコンテナ化もサポートしています。
私たちは社内ツール用にCloud RunでADKエージェントをデプロイしてきましたが、コールドスタート時間は驚くほど高速で、基本的なエージェントで3秒未満です。本番システムの場合、デプロイメントを本番エージェント用の監視ツールと組み合わせることを検討してください。
Cloud Runへのデプロイ(大多数に推奨)
Cloud Runが最もシンプルなパスです。1つのコマンドで、HTTPSエンドポイントでエージェントがライブになります:
adk deploy cloud_run \
--project your-gcp-project-id \
--region us-central1 \
--service-name my-agent-service \
--with_ui--with_uiフラグはエージェントと一緒にADK Webインターフェースをデプロイするため、本番環境でのテスト用にブラウザベースのチャットが利用できます。背後では、ADKはコンテナイメージをビルドし、Google Artifact Registryにプッシュして、Cloud Runサービスを作成します。完全なデプロイフローはADK用のGoogle Cloud Runクイックスタートに記載されています。
カスタムインフラストラクチャの場合、最小限のDockerfileは以下の通りです:
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8080
CMD ["adk", "api_server", "--port", "8080", "my_agent"]代替案: Vertex AI Agent Engine
マネージドスケーリング、監視、バージョン管理を必要とするエンタープライズチームの場合、Vertex AI Agent Engineがインフラストラクチャを完全に処理します。柔軟性と引き換えに利便性を得ます。管理すべきコンテナはなく、自動スケーリング、組み込みアナリティクスがあります。
コスト考慮事項
知っておくべき実際の数字:
- Gemini API無料 tier: 1分あたり15リクエスト、1日あたり100万トークン。開発と軽いデモには十分です。
- Gemini 2.0 Flash(有料): 入力トークン100万あたり$0.10、出力トークン100万あたり$0.40。本番環境にも安価です。
- Cloud Run無料 tier: 月間200万リクエスト、360,000 GB秒のコンピューティング。1日1,000リクエストを処理する基本的なエージェントは無料 tier の範囲内に収まります。
- 最適化のヒント: 単純なルーティングやフォーマットを行うサブエージェントには
gemini-2.0-proではなくgemini-2.0-flashを使用してください。複雑な推論を行うエージェントにはより強力なモデルを予約してください。
TechsyがAIエージェント開発に取り組む方法
Techsyでは、ADK、LangGraph、CrewAIを使用してクライアント向けにマルチエージェントシステムを構築してきました。フレームワークの選択はスタックに依存します:すでにGoogle Cloudを使用している場合、ADKは多くの統合摩擦を排除します。初日からマルチプロバイダーLLMサポートが必要な場合、LangGraphはより多くの柔軟性を提供します。
私たちの典型的な関与は、アーキテクチャコンサルティングから始まり、ユースケースを適切なエージェントパターンにマッピングし、その後プロトタイプ開発とCloud Runデプロイを行います。後でリファクタリングするのではなく、最初にアーキテクチャを正しくすることで、チームは2〜3週間を節約できると我们发现しています。
チームのためにAIエージェントを構築していますか?無料相談を取得してください。適切なフレームワークとデプロイ戦略の選択をお手伝いします。
よくあるエラーとトラブルシューティング
これらはADKを使い始めるときに私たちが最もよく遭遇するエラーです。デバッグ時間を節約してください:
| エラー | 原因 | 修正 |
|---|---|---|
GOOGLE_API_KEY not set | 環境変数の欠落 | export GOOGLE_API_KEY="your-key" または .env に追加 |
Model not found | 間違ったモデル名文字列 | 正確なIDを使用:gemini-flashではなくgemini-2.0-flash |
Tool function signature error | 型ヒントまたはdocstringの欠落 | すべてのパラメータに型ヒントを追加し、説明的なdocstringを追加 |
Agent not found | 間違ったフォルダ構造またはエクスポートの欠落 | __init__.pyがその正確な名前でroot_agentをエクスポートしていることを確認 |
Rate limit exceeded (429) | 無料 tier でのAPI呼び出し過多 | 有料Gemini tier にアップグレードするか、指数バックオフを追加 |
ImportError: google-adk | パッケージ未インストール | アクティブな仮想環境でpip install google-adkを実行 |
デバッグのヒント: ここではadk webがあなたの親友です。マルチエージェントシステムで何かがうまくいかない場合、Web UIはチェーンがどこで壊れたかを正確に表示します。リアルタイムで会話の全トレース、すべてのモデル呼び出し、ツール呼び出し、およびエージェント委任を表示します。
FAQ
Google ADKとは何ですか?
GoogleのAgent Development Kit (ADK) は、AIエージェントの構築、評価、デプロイのためのオープンソースPythonフレームワークです。Google Geminiモデルに最適化されていますが、LiteLLM統合を通じて100以上のLLMをサポートしています。ADKの中核的な強みは、組み込みツール、開発用UI、ワンコマンドでのCloud Runデプロイを備えたネイティブなマルチエージェントオーケストレーションです。
Google ADKは無料で使用できますか?
はい。ADK自体はApache 2.0ライセンスの下でオープンソースです。Gemini APIキーが必要で、これには1分あたり15リクエスト、1日あたり100万トークンを提供する無料 tier があります。Cloudデプロイコストはホスティングの選択に依存しますが、Cloud Runの無料 tier は月間200万リクエストをカバーします。
Google ADKとLangChainの違いは何ですか?
ADKは、ネイティブなマルチエージェントオーケストレーションと組み込みデプロイツールを備え、Geminiに最適化されたGoogleの意見を持ったフレームワークです。LangChainはモデル非依存でサードパーティ統合が広範ですが、複雑さが大幅に増します。ADKは迅速なデプロイを望むGemini優先のチームに適しています。LangChainは最大の柔軟性を必要とするマルチプロバイダー構成に適しています。
Google ADKはマルチエージェントシステムをサポートしていますか?
はい、そしてそれはADKの旗艦機能です。ユーザーリクエストに基づいて専門的なサブエージェントに委任するルートエージェントを作成します。ADKはまた、決定論的ワークフローオーケストレーションのためにSequentialAgent、ParallelAgent、およびLoopAgentを提供します。エージェント・アズ・ツールパターンにより、エージェントは他のエージェントを呼び出し可能な関数として呼び出すことができます。
Google ADKエージェントをデプロイするにはどうすればよいですか?
Google Cloud Runへのサーバーレスデプロイのためにadk deploy cloud_run --project YOUR_PROJECT --region us-central1を実行します。ブラウザベースのチャットインターフェースを含めるには--with_uiを追加します。マネージドホスティングのためにVertex AI Agent Engineにデプロイすることも、カスタムインフラストラクチャのためにDockerコンテナをビルドすることもできます。
Google ADKはGemini以外のモデルを使用できますか?
はい。ADKはLiteLLM統合を通じてAnthropic Claude、OpenAI GPT-4、Meta Llama、Mistralなどを含む100以上のモデルをサポートしています。モデルパラメータをLiteLLMモデル文字列に設定します。例えば、litellm/anthropic/claude-3-sonnetまたはlitellm/openai/gpt-4o。GeminiモデルはLiteLLMプレフィックスなしでネイティブに動作します。
ADK Web UIとは何ですか?
adk web your_agent_folderで起動されるブラウザベースのデバッグインターフェースです。リアルタイムの会話トレース、ツール呼び出し、エージェント委任チェーン、および状態変化を表示します。Web UIは、どのサブエージェントが各リクエストを処理したかを正確に示すため、マルチエージェントシステムのデバッグに不可欠です。
Google ADKはMCP(Model Context Protocol)をサポートしていますか?
はい。ADKはネイティブなModel Context Protocolサポートを持っており、エージェントが外部ツールやデータソースのためにMCP互換のツールサーバーに接続できるようにします。これにより、ADKエージェントは成長するMCPエコシステムと相互運用可能になります。プロトコルの背景については、MCPガイドを参照してください。
ADKエージェントをテストするにはどうすればよいですか?
ADKには組み込み評価器が付属しています:期待される答えに対して出力品質をチェックするResponseEvaluator、およびエージェントが正しい順序で正しいツールを呼び出したことを確認するTrajectoryEvaluator。入力、期待される出力、および期待されるツール呼び出しシーケンスを定義するJSONファイルとしてテストケースを作成し、pytestで実行します。
Google ADKにはどのPythonバージョンが必要ですか?
ADKにはPython 3.9以上が必要です。Python 3.10+は完全な型ヒントサポートのために推奨されます。ADKは型ヒントを使用してツールスキーマを生成するため、これは重要です。Python 3.11または3.12も、エージェントワークロードにとって意味のあるパフォーマンス改善を提供します。pip install google-adkでインストールしてください。