🐶

GoogleのAgent Development Kitを使ってみた

に公開

はじめに

Google が Agent Development Kit(ADK)という AI エージェントフレームワークをオープンソースで公開しました。このフレームワークは、Gemini モデルと Google のエコシステムと緊密に統合されており、AI エージェントの開発とデプロイを簡単に行うことができます。

この記事では、公式のドキュメントを参考にしながら、サンプルコードを改造して、天気と時刻を取得、犬の画像を取得できるエージェントを作成してみます。

Agent Development Kit とは

Agent Development Kit は以下のような特徴を持つフレームワークです:

  • Gemini モデルを使用した AI エージェントの開発が可能
  • 柔軟なワークフローの構築(Sequential、Parallel、Loop など)
  • マルチエージェントシステムの構築
  • 豊富なツールエコシステム(検索、コード実行など)
  • デプロイメントの容易さ(ローカル、Vertex AI、Cloud Run など)
  • 評価機能の組み込み

セットアップ

環境構築

まず、uv を使用して環境を構築します。

# プロジェクトの初期化
uv init

# 仮想環境の作成と有効化
uv venv

# 仮想環境の有効化(macOS/Linux)
source .venv/bin/activate

# ADK のインストール
uv pip install google-adk

# workspace の作成
uv init multi_tool_agent

プロジェクトの作成

基本的なプロジェクト構造は以下のようになります。
作成

./
  multi_tool_agent/
      __init__.py
      agent.py
      .env

簡単なエージェントの作成

このエージェントは以下の機能を持っています

  1. 指定された都市の天気を取得
  2. 指定された都市の現在時刻を取得
  3. ランダムな犬の画像を取得(Dog API 連携。OpenAPI 使用)

今回は、Agent の設定と、ツールの設定を行います(今回は機能が多いので、これに限定します)

__init__.py の作成

from . import agent

agent.py の作成

import datetime
from zoneinfo import ZoneInfo
from google.adk.agents import Agent
from google.adk.tools.openapi_tool.openapi_spec_parser.openapi_toolset import OpenAPIToolset

# Dog APIのOpenAPI仕様
dog_api_spec = """
{
  "openapi": "3.0.0",
  "info": {
    "title": "Dog API",
    "version": "1.0.0",
    "description": "犬の画像を取得するAPI"
  },
  "servers": [
    {
      "url": "https://dog.ceo/api",
      "description": "Dog API Server"
    }
  ],
  "paths": {
    "/breeds/image/random": {
      "get": {
        "summary": "ランダムな犬の画像を取得",
        "operationId": "getRandomDogImage",
        "description": "すべての犬種からランダムな画像を1枚取得します",
        "responses": {
          "200": {
            "description": "成功レスポンス",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "画像のURL"
                    },
                    "status": {
                      "type": "string",
                      "description": "レスポンスのステータス"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
"""

def get_weather(city: str) -> dict:
    """指定された都市の天気を取得します"""
    weather_data = {
        "new york": "晴れ、気温25度",
        "tokyo": "曇り、気温20度",
        "london": "雨、気温15度",
        "paris": "晴れ、気温22度",
        "sydney": "晴れ、気温28度"
    }

    city_lower = city.lower()
    if city_lower in weather_data:
        return {
            "status": "success",
            "report": f"{city}の天気は{weather_data[city_lower]}です。"
        }
    return {
        "status": "error",
        "error_message": f"'{city}'の天気情報は利用できません。"
    }

def get_current_time(city: str) -> dict:
    """指定された都市の現在時刻を取得します"""
    timezone_data = {
        "new york": "America/New_York",
        "tokyo": "Asia/Tokyo",
        "london": "Europe/London",
        "paris": "Europe/Paris",
        "sydney": "Australia/Sydney"
    }

    city_lower = city.lower()
    if city_lower in timezone_data:
        tz = ZoneInfo(timezone_data[city_lower])
        now = datetime.datetime.now(tz)
        return {
            "status": "success",
            "report": f"{city}の現在時刻は{now.strftime('%Y-%m-%d %H:%M:%S %Z')}です。"
        }
    return {
        "status": "error",
        "error_message": f"'{city}'のタイムゾーン情報は利用できません。"
    }


# Dog APIのツールセットを作成
dog_api_toolset = OpenAPIToolset(
    spec_str=dog_api_spec,
    spec_str_type="json"
)
dog_api_tools = dog_api_toolset.get_tools()

# エージェントの作成
root_agent = Agent(
    name="weather_time_dog_agent",
    model="gemini-2.0-flash-exp",
    description="天気、時刻、そしてランダムな犬の画像を取得できるエージェント",
    instruction="都市の天気と時刻に関する質問に答えることができます。また、「犬の画像を見せて」と言われたら、ランダムな犬の画像を表示します。",
    tools=[get_weather, get_current_time] + dog_api_tools
)

認証設定

.envファイルを作成し、以下のように設定します:

# Google AI Studioを使用する場合
GOOGLE_GENAI_USE_VERTEXAI="False"
GOOGLE_API_KEY="your-api-key-here"

# Vertex AIを使用する場合
# GOOGLE_CLOUD_PROJECT="your-project-id"
# GOOGLE_CLOUD_LOCATION="your-location"
# GOOGLE_GENAI_USE_VERTEXAI="True"

エージェントの実行

エージェントを実行するには、以下の 3 つの方法があります:

adk web # ブラウザで開発用 UI を確認
adk run multi_tool_agent # エージェントを実行
adk api_server # API サーバーを実行

動作確認

https://youtu.be/lCTaoC5BVIY

おわりに

ADK は、Google の強力な AI 機能を活用しながら、簡単に AI エージェントを開発できるフレームワークです。今回は基本的な使い方を紹介しましたが、より高度な機能として以下のようなものもあります:

  • マルチエージェントシステムの構築
  • 複雑なワークフローの実装
  • カスタムツールの追加
  • Vertex AI や Cloud Run へのデプロイ

これらの機能を活用することで、より高度な AI アプリケーションを開発することができます。
基本的な使用感は OpenAI の Agent SDK と対して差は感じないですが、Google のエコシステムとの緊密な統合ができるので、その辺りは良いですね。

参考

リバナレテックブログ

Discussion