Google Agent Development Kit (ADK) がリリースされてから約 4 ヶ月が経ってしまいました。
キャッチアップはしていたものの、しっかり触れていなかったため、今更ながら触ってみて基本的な部分をまとめてみました。

AI 開発ツールの全体像と ADK の位置づけ

現在、AI 開発ツールは様々な抽象化レベルで提供されています。
ノーコード・ローコードツールから、独自フレームワーク構築まで、開発者は用途に応じて選択できます。
まず、AI 開発ツール全体の中で ADK がどこに位置するかを見てみましょう。

ADK と同じエージェント特化型フレームワークには、最近だと AWS の Strands Agent や、TypeScript 特化の Mastra なども話題になっていますね。

ADK の特徴

6 つの利点

ADK には以下の 6 つの利点があります。
既製ツールで Google 検索ができたり、Google Cloud のサービスへ簡単にデプロイできるのは非常に嬉しいですね。

利点 内容
マルチエージェントシステム ・複数の専門エージェントを階層的に構成することで、モジュール型でスケーラブルなアプリケーションを構築可能
豊富なツールエコシステム ・Google 検索やコード実行などの既製ツールや、LangChain や CrewAI などの他フレームワークのツール、他のエージェントもツールとして利用可能
柔軟なオーケストレーション ・決まった手順で動くワークフローエージェントと、AI が状況に応じて判断する LLM 駆動エージェント
統合開発エクスペリエンス ・コマンドラインと Web UI でローカル開発・テスト・デバッグ
・イベント、状態、エージェントの実行をステップバイステップで確認
組み込み評価 ・最終的な応答品質と段階的な実行軌跡の両方を事前定義されたテスト ケースに対して評価することにより、エージェントのパフォーマンスを体系的に評価
デプロイメント ・エージェントをコンテナ化してどこにでもデプロイ可能
・ローカル実行、Vertex AI Agent Engine、Cloud Run への簡単なデプロイ

コアコンセプト

ADK には、以下のコアコンセプトに基づいて構築されており、これにより強力で柔軟な機能を実現しています。

コンセプト 内容
エージェント ・特定のタスクを達成するために設計されたコア構成要素
・LLM によって駆動され、推論・計画・ツール活用を通して目標を達成
ツール ・エージェントに会話以外の機能を提供
・外部 API との対話、情報検索、コード実行、他サービスの呼び出しなどを可能にする
セッションサービス ・単一の会話のコンテキストを処理
・会話の履歴(Events)やエージェントの作業メモリ(State)を管理
コールバック ・エージェントプロセスの特定ポイントで実行するカスタムコードスニペット
・チェック、ログ記録、動作変更が可能
アーティファクト管理 ・セッションまたはユーザーに関連付けられたファイルやバイナリデータを管理
・画像や PDF などの保存・読み込み・管理が可能
ランナー ・実行フローを管理するエンジン
・イベントに基づいてエージェントのインタラクションを調整し、バックエンドサービスと連携

実際に ADK エージェントを構築してみる

ADK の概要を理解したところで、実際にエージェントを構築してみましょう。
今回は、Google 検索機能を持つエージェントを例に、ADK の基本的な使い方を実践していきます。

環境セットアップ

まずは ADK をインストールして、開発環境を準備します。

# ADK のインストール
export PATH=$PATH:"/home/${USER}/.local/bin"
python3 -m pip install google-adk==1.9.0

エージェントを実行する際、ADK はモデル API 呼び出しを誰がリクエストしているかを認識する必要があります。
以下の 2 つの方法のいずれかで提供できます。

  • Gemini API キー での認証
  • Google Cloud プロジェクトでの認証(Vertex AI 経由)

ここでは Vertex AI の方法を採用するため、あらかじめ Vertex AI API を有効化しておきました。
また、.envファイルを作成して、Vertex AI の認証情報を設定します。

# .env
GOOGLE_GENAI_USE_VERTEXAI=TRUE
GOOGLE_CLOUD_PROJECT=your-project-id
GOOGLE_CLOUD_LOCATION=us-central1
MODEL=gemini-2.5-flash

上から順に、Vertex AI 認証の有効化、プロジェクトとロケーションの指定、使用するモデルの設定を行っています。
以上で準備完了です。

シンプルな Google 検索エージェントの実装

続いて、基本的な Google 検索エージェントを作成してみます。

# agent.py
from google.adk import Agent
from google.adk.tools import google_search

root_agent = Agent(

    name="google_search_agent",
    description="Google検索を使用して質問に回答します。",
    model="gemini-2.5-flash",
    instruction="あなたは専門的な研究者です。事実に基づいて回答してください。",
    tools=[google_search]
)

google_searchツールを指定するだけで、エージェントは自動的に検索が必要かどうかを判断し、適切なクエリを生成して実行してくれます。
このように、既製のツールで簡単に RAG を組むことができ、コード 1 行で書ける点がポイントです。

Web UI での開発・テスト

ADK の開発体験の良さを実感できるのが、統合された Web UI です。
以下のコマンドを実行することで、ローカルのブラウザにアクセスして、エージェントとインタラクティブにやり取りできます。

$ adk web
INFO:     Started server process [2282]
INFO:     Waiting for application startup.

+-----------------------------------------------------------------------------+
| ADK Web Server started                                                      |
|                                                                             |
| For local testing, access at http://localhost:8000.                         |
+-----------------------------------------------------------------------------+

INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

アクセスして左上のプルダウンから作成したエージェントを選択すると、こんな画面が表示されます。
右側がエージェントとチャットを行える場所で、左側はそのやり取りのトレースなどを表示してくれる画面構成となっています。

実際にやり取りをしてみました。
Google 検索でグラウンディングを使用した応答には、エージェントの応答の下部に表示されている、HTML 形式の「検索候補」が含まれます。
これにより、モデルが応答に使用した情報をユーザーが追跡できるようになります。

応答を得ると、左側の「Trace」タブにクエリの各部分の実行にかかった時間のトレースが表示されます。
これを使用して、ツール呼び出しを含むより複雑な実行をデバッグし、さまざまなプロセスがレスポンスのレイテンシにどのように影響しているかを理解できます。

「Event」タブでは、エージェントとツールの関係を視覚化した図が表示されます。

コマンドラインでの簡易テスト

Web UI だけでなくコマンドラインインターフェース上で開発・テストを行うことも可能です。
以下のコマンドを実行することで、ターミナル上でエージェントと直接やり取りできます。

$ adk run your-agent-package
[user]: インドで先月公開された新しい映画は何ですか?
[google_search_agent]:  2025年7月にインドで公開された映画はいくつかあります。

*   **私たちが光と想うすべて** この映画は、第77回カンヌ国際映画祭でグランプリを受賞した初のインド映画で、2025年7月25日に日本で公開されました。 ムンバイで働く看護師のプラバとアヌが、人生を変える出来事に遭遇する物語です。

*   **ヴィクラム** カマル・ハーサンが製作・主演を務めるクライムアクション映画で、ヴィジャイ・セードゥパティとファハド・ファーシルも出演しています。 2025年5月30日に公開されました。

インド映画は他にもたくさんあります。映画の時間というサイトで、インド映画の一覧を見ることができます。

プログラムでのエージェント実行

Web UI は開発時には便利ですが、実際のアプリケーションではプログラム経由でエージェントを呼び出す必要があります。
その場合、Web UI で自動的に処理されていた以下のコンポーネントを明示的に管理する必要があります。

コンポーネント 役割 説明
InMemoryRunner エージェント実行エンジン ユーザーからのクエリを受け取り、適切なエージェントに渡し、応答を管理するエンジン。複数ユーザーからの同時リクエストを処理できる
SessionService 会話履歴と状態管理 エージェントが過去の会話を記憶し、文脈を理解するための仕組み
types.Content/Part 構造化メッセージ 単純な文字列ではなく、テキスト・画像・音声などを組み合わせた複雑なメッセージを扱うためのデータ構造

実際のコードでは以下のようになると思います。

import asyncio
from google.adk import Agent
from google.adk.runners import InMemoryRunner
from google.adk.sessions import Session
from google.genai import types
from dotenv import load_dotenv
import os

async def main():
    # 環境変数の読み込み
    load_dotenv()

    # アプリケーション設定
    app_name = 'my_agent_app'
    user_id = 'user1'

    # エージェントの定義
    root_agent = Agent(
        model=os.getenv("MODEL"),
        name="search_assistant",
        instruction="必要に応じて利用可能なツールを使用して質問に答えてください。",
        tools=[google_search]
    )

    # ランナーの作成
    runner = InMemoryRunner(
        agent=root_agent,
        app_name=app_name,
    )

    # セッションの作成
    session = await runner.session_service.create_session(
        app_name=app_name, 
        user_id=user_id
    )

    # ユーザーメッセージの実行
    async def run_query(session: Session, message: str):
        content = types.Content(
            role='user', 
            parts=[types.Part.from_text(text=message)]
        )

        async for event in runner.run_async(
            user_id=user_id,
            session_id=session.id,
            new_message=content,
        ):
            if event.content.parts and event.content.parts[0].text:
                print(f'{event.author}: {event.content.parts[0].text}')

    # 実際のクエリ実行
    await run_query(session, "今月の人気映画を教えて")

if __name__ == "__main__":
    asyncio.run(main())

ここまでが、ADK でエージェントの作成から実行するための最も基本的な流れです。

マルチエージェントシステム

ここまで単一エージェントでの基本的な使い方を見てきましたが、ADK の真の魅力はマルチエージェントシステムの構築にあります。
複雑なタスクを複数の専門エージェントに分担させることで、より高度で信頼性の高いシステムが実現できます。

ADK では、用途に応じて異なるタイプのマルチエージェントシステムを構築できます。
エージェントタイプとしては以下があります。

  • Sequential Agent:エージェントが順番に作業を引き継ぎ
  • Parallel Agent:複数エージェントが同時並行で作業
  • Loop Agent:条件に応じて処理を繰り返し
  • LLM Agent:AIが状況に応じて適切なエージェントを選択

今回は、Sequential Agent を使用して、実際のマルチエージェントシステムの例を作成してみます。

from google.adk import Agent
from google.adk.agents import SequentialAgent
from google.adk.tools import google_search

# sub_agents
critic_agent = Agent(
    name='critic_agent',
    description='LLMの回答を分析し、事実確認を行う専門エージェント',
    instruction="厳格な事実確認の専門家として、Google検索で情報を検証し、誤りがあれば具体的に指摘してください。",
    tools=[google_search]
)

# sub_agents
reviser_agent = Agent(
    name='reviser_agent',
    description='評価結果を基に回答を改善する専門エージェント',
    instruction="評価エージェントの指摘を受けて、より正確で読みやすい最終回答を作成してください。"
)

# agent.py - マルチエージェントシステム
llm_auditor = SequentialAgent(
    name='llm_auditor',
    description='LLMの回答を評価・検証し、現実世界の知識と整合するよう改善する',
    sub_agents=[critic_agent, reviser_agent],
)

root_agent = llm_auditor

このシステムの動作フローとしては以下のような流れです。

  1. Critic Agent が LLM の回答を評価・検証(google_searchツールを使用)
  2. Reviser Agent が指摘を基に回答を改善
  3. より正確で信頼性の高い最終回答を生成

Web UI で実行してみると、このように内容を精査した後に結論を回答してくれました。

それぞれのレスポンスのイベントを確認すると、レスポンスを担当したエージェントが緑色にハイライトされており、視覚的にわかりやすいですね。

デプロイメント

個人的に ADK の最大の魅力が、デプロイの容易さです。
従来のフレームワークでは、Dockerfile の作成、コンテナビルド、レジストリへのプッシュなど複数のステップが必要でしたが、ADK ではコマンド 1 つや数行のコードを加えるだけで、Google Cloud 環境に簡単に展開することができます。

Cloud Run へのデプロイ

Cloud Run は、Google が提供するサーバーレスなコンテナ実行環境です。自動スケーリングと HTTPS 対応が標準で提供されます。
ADK は、このサービスにコマンド 1 つでデプロイすることができます。

$ adk deploy cloud_run \
    --project=$GOOGLE_CLOUD_PROJECT \
    --region=$GOOGLE_CLOUD_LOCATION \
    --with_ui \
    $AGENT_PATH

--with_uiを付けることで、API サーバーだけでなく Web UI を含めてデプロイすることができます。
その他にも、--service_nameで Cloud Run サービス名を指定したりすることも可能です。
デプロイが完了すると、以下のような情報が表示されます。

Deployment successful!
Service URL: https://my-agent-service-xxxxx.a.run.app
UI URL: https://my-agent-service-xxxxx.a.run.app/ui

Vertex AI Agent Engineへのデプロイ

エージェント運用に特化した管理機能や長期的なデータ管理が重要な場合は、Vertex AI Agent Engine を使用します。
こちらはコマンドを実行するのではなく、Python コードから直接デプロイを行います。

from vertexai.preview import reasoning_engines
from vertexai.preview.reasoning_engines import AdkApp
import vertexai

# エージェントアプリの作成
app = AdkApp(
    agent=root_agent,
    enable_tracing=True,
)

# Vertex AIの初期化
vertexai.init(
    project="your-project-id",
    location="us-central1",
)

# Agent Engineにデプロイ
remote_app = reasoning_engines.create(
    app,
    requirements=[
        "google-cloud-aiplatform[agent_engines,adk]",
        "google-adk",
    ],
)

print(f"デプロイ完了: {remote_app.resource_name}")

どちらの方法も、複雑なコンテナ化やインフラ設定を自動化し、従来のフレームワークと比べて圧倒的に簡単にデプロイできますね。

終わりに

ADK を実際に触ってみて、その魅力を実感することができました。
特に印象的だったのは、Web UI での開発体験の良さでした。
Web UI では、エージェントの動作を一歩ずつ確認しながら開発できるため、開発・テストが格段に楽になります。
他のフレームワークだと、最近人気のある Mastra にもプレイグラウンドがあるため、Web UI 機能がフレームワーク選定の決め手になっているように感じます。

ADK は単なるエージェント作成ツールではなく、開発から運用まで一貫してサポートする統合プラットフォームとして設計されています。
デプロイの容易さを始め、各機能でそのコンセプトを強く感じることができたため、他のフレームワークとの大きな差別化ポイントになっていると思いました。