Google検索もできるAIエージェントが簡単に開発できるGoogle ADK (Agent Development Kit)

Googleが「Agent Development Kit (ADK)」というAIエージェント開発フレームワークの提供を始めました。簡単にマルチエージェントシステムが開発できるように設計されているようです。この記事では、実際に簡単なエージェントを作成するまでのチュートリアルを紹介します。

![Screenshot 2025-04-13 at 14.39.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79562/71f2d565-fc9e-48fb-8476-64a6a04f508f.png)


## ADKとは？

Agent Development Kit (ADK)は、AIエージェントの開発とデプロイのための柔軟でモジュラーなフレームワークです。このフレームワークには以下のような特徴があります：

- 人気のLLMやオープンソースの生成AIツールと組み合わせて使用可能
- Googleエコシステムおよび特にGeminiモデルとの密接な連携に重点
- シンプルなエージェントから始めて、複雑なマルチエージェントシステムまで構築可能

## ADKの主な特徴

ADKには以下のような特徴があると紹介されています：

1. **柔軟なオーケストレーション**: 予測可能なパイプラインのためのワークフローエージェント（Sequential、Parallel、Loopなど）、またはLLM駆動の動的ルーティングで適応的な動作を実現
2. **マルチエージェントアーキテクチャ**: 複数の専門化されたエージェントを階層的に組み合わせることで、モジュラーでスケーラブルなアプリケーションを構築可能
3. **豊富なツールエコシステム**: 検索、コード実行などの事前構築されたツール、カスタム関数、サードパーティライブラリとの統合など
4. **デプロイ準備完了**: ローカル実行、Vertex AI Agent Engineでのスケーリング、Cloud RunやDockerを使用したカスタムインフラへの統合など、どこでもエージェントをコンテナ化してデプロイ可能
5. **組み込み評価**: エージェントのパフォーマンスを最終的な応答品質とステップバイステップの実行軌跡の両方について評価可能

## インストール方法

ADKは以下のコマンドでインストールできます：

```bash
pip install google-adk
```

## 最初のエージェントを作ってみよう

[ADKの公式クイックスタート](https://google.github.io/adk-docs/get-started/quickstart/)を参考に、簡単な天気情報と時間情報を提供するエージェントを作成してみます。

### 1. プロジェクト構造を作成する

ADKではAgentを管理するために独立したフォルダを使用するようです。以下のようなフォルダ構造を作成します：

```
parent_folder/
    multi_tool_agent/
        __init__.py
        agent.py
        .env
```

まず、フォルダを作成します：

```bash
mkdir -p multi_tool_agent
```

### 2. `__init__.py` ファイルを作成

`__init__.py` ファイルに以下の内容を記述します：

```python
from . import agent
```

### 3. `agent.py` ファイルを作成

`agent.py` ファイルに以下のコードを記述します。これは公式クイックスタートのサンプルを日本語化したものです：

```python
import datetime
from zoneinfo import ZoneInfo
from google.adk.agents import Agent

def get_weather(city: str) -> dict:
    """指定された都市の現在の天気情報を取得します。
    
    Args:
        city (str): 天気情報を取得する都市の名前。
    
    Returns:
        dict: ステータスと結果またはエラーメッセージ。
    """
    if city.lower() == "東京":
        return {
            "status": "success",
            "report": (
                "東京の天気は晴れで、気温は25度です。"
            ),
        }
    else:
        return {
            "status": "error",
            "error_message": f"'{city}'の天気情報は利用できません。",
        }

def get_current_time(city: str) -> dict:
    """指定された都市の現在の時刻を返します。
    
    Args:
        city (str): 現在時刻を取得する都市の名前。
    
    Returns:
        dict: ステータスと結果またはエラーメッセージ。
    """
    
    if city.lower() == "東京":
        tz_identifier = "Asia/Tokyo"
    else:
        return {
            "status": "error",
            "error_message": (
                f"{city}のタイムゾーン情報がありません。"
            ),
        }
    
    tz = ZoneInfo(tz_identifier)
    now = datetime.datetime.now(tz)
    report = (
        f'{city}の現在時刻は{now.strftime("%Y-%m-%d %H:%M:%S %Z%z")}です'
    )
    return {"status": "success", "report": report}

root_agent = Agent(
    name="weather_time_agent",
    model="gemini-2.0-flash",
    description=(
        "都市の時間と天気に関する質問に答えるエージェント。"
    ),
    instruction=(
        "都市の時間と天気に関する質問に答えることができます。"
    ),
    tools=[get_weather, get_current_time],
)
```

### 4. `.env` ファイルを作成

`.env` ファイルに認証情報を設定します。Google AI Studioを使用する場合は以下のようになります：

```
# Google AI Studioを使用する場合
GOOGLE_GENAI_USE_VERTEXAI="False"
GOOGLE_API_KEY="あなたのAPIキーを貼り付けてください"

# Google Cloud Vertex AIを使用する場合は以下をコメント解除して設定
# GOOGLE_CLOUD_PROJECT="your-project-id"
# GOOGLE_CLOUD_LOCATION="your-location" #例: us-central1
# GOOGLE_GENAI_USE_VERTEXAI="True"
```

### 5. APIキーの取得

Google AI Studioから[APIキーを取得](https://aistudio.google.com/apikey)し、`.env`ファイルの`GOOGLE_API_KEY`に設定します。

### 6. エージェントの実行

親ディレクトリに移動して以下のコマンドを実行します：

```bash
adk web
```

これにより、通常は `http://localhost:8000` または `http://127.0.0.1:8000` でWebインターフェースが起動します。ブラウザでこのURLを開き、UIの左上のドロップダウンから「multi_tool_agent」を選択します。

以下のような質問をエージェントに試してみましょう：

- 東京の天気はどうですか？
- 東京の時間は？
- 大阪の天気はどうですか？
- 大阪の時間は？

### ターミナルでの実行

Webインターフェースではなくターミナルでエージェントと対話したい場合は、以下のコマンドを使用します：

```bash
adk run multi_tool_agent
```

## 開発チューター (Development Tutor) エージェントの実装

もう少し複雑な実際に開発チューター（Development Tutor）エージェントを構築してみましょう。[ju4nv1e1r4/agents-with-adk](https://github.com/ju4nv1e1r4/agents-with-adk)を参考にしました。このエージェントはプログラミングや開発に関する質問に答え、最新の情報を提供するために検索機能を備えたリサーチャーサブエージェントと連携します。

### プロジェクト構造

まず、次のようなプロジェクト構造を作成します：

```
development_tutor/
    __init__.py           # パッケージ初期化
    agent.py              # メインエージェント
    prompt.py             # メインエージェントの基本プロンプト
    .env                  # 環境変数設定
    shared_libraries/     # 共有ライブラリ
    │   __init__.py
    │   constants.py      # 定数定義
    sub_agents/           # サブエージェント
    │   __init__.py
    │   researcher/       # リサーチャーエージェント
    │       __init__.py
    │       agent.py
    │       prompt.py
    tools/                # ツール
        __init__.py
        search.py         # Google検索ツール
```

### 必要なファイルを作成する

#### 1. `__init__.py` (メインパッケージ)

```python
from . import agent
```

#### 2. ルートの `agent.py` (メインエージェント)

```python
from google.adk.agents.llm_agent import Agent

from .shared_libraries import constants
from . import prompt
from .sub_agents.researcher.agent import researcher 

root_agent = Agent(
    model=constants.TUTOR_MODEL,
    name=constants.AGENT_NAME,
    description=constants.DESCRIPTION,
    instruction=prompt.ROOT_PROMPT,
    sub_agents=[
        researcher
    ]
)
```

#### 3. `shared_libraries/constants.py` (定数定義)

```python
import os
from dotenv import load_dotenv

load_dotenv()

AGENT_NAME = "development_tutor"
DESCRIPTION = "開発者向けの指導/チューターエージェント。"
PROJECT = os.getenv("GOOGLE_CLOUD_PROJECT", "EMPTY")
LOCATION = os.getenv("GOOGLE_CLOUD_LOCATION", "global")
TUTOR_MODEL = os.getenv("TUTOR_MODEL", "gemini-2.0-flash")
BASE_MODEL = os.getenv("BASE_MODEL", "gemini-2.0-flash")
```

#### 4. `prompt.py` (メインエージェントのプロンプト)

```python
ROOT_PROMPT = """
あなたは本質的に指導者です。プログラミング言語と開発に焦点を当てています。
開発者がソリューションを開発し、APIのドキュメント、フレームワーク、パッケージなどに関する質問に答えるのを手伝います。
あなたの教え方は、開発者と指導者の間の協力を通じて段階的な教育プロセスで行われます。

以下の手順に従ってください：
1. <Greetings>セクションに従ってユーザーに挨拶し、情報を収集してから次に進みます。
2. <Search>セクションに従って回答が最新であることを確認し、停止せずに次に進みます。
3. <Tone>セクションに従って次に進みます。
4. <Key Constraints>に従ってユーザーの質問に答えるようにしてください。
3. 最後に、ユーザーが回答に満足しているかどうか常に尋ねてください。

<Greetings>
1. ユーザーに冗談めかして自己紹介し、ランダムにギーク文化のキャラクターの名前を使い、常にキャラクターの名前を変えます
    <Example>
    こんにちは、私の名前は[キャラクター名]です...バジンガ！私は名前を持っていませんwww、でもDevと呼んでください。どのようにお手伝いできますか？
    </Example>
2. ユーザーをどのように助けられるか尋ねます。
</Greetings>

<Search>
1. 最新の情報についてトピックを調査するために `researcher` を呼び出します
2. 何よりもまず応答を再構成し、フローに従い続けます
</Search>

<Tone>
1. トーンをより技術的なトーンに調整します
2. 質問に答えるために例を使用します
3. フレンドリーで若々しい感じにします（スラングを使ってもいいです）。
<\Tone>

<Key Constraints>
    - あなたの仕事は問題を解決するための回答を提供することです。
    - すべてのステップを完了してください
    - 日本語で回答してください
</Key Constraints>
"""
```

#### 5. `sub_agents/researcher/agent.py` (リサーチャーエージェント)

```python
from google.adk.agents import Agent
from . import prompt
from ...shared_libraries import constants
from ...tools.search import google_search_grounding

researcher = Agent(
    model=constants.BASE_MODEL,
    name="researcher",
    description="トピックについてウェブで検索します。",
    instruction=prompt.RESEARCHER_PROMPT,
    tools=[google_search_grounding]
)
```

#### 6. `sub_agents/researcher/prompt.py` (リサーチャーのプロンプト)

```python
RESEARCHER_PROMPT="""
あなたはウェブで検索する自律性を持つエージェントです。
要求されたトピックについてウェブで検索してください。

以下の手順に従ってください：
1. `google_search_grounding` ツールを呼び出してトピックについて検索します
2. 情報を下書きにまとめます
3. 下書きを要約して `development_tutor` に転送します
"""
```

#### 7. `tools/search.py` (検索ツール)

```python
from google.adk.agents import Agent
from google.adk.tools.agent_tool import AgentTool
from google.adk.tools.google_search_tool import google_search
from ..shared_libraries import constants

_researcher = Agent(
    model=constants.BASE_MODEL,
    name="researcher",
    description="トピックについてウェブで検索します。",
    instruction="""
    Google検索ツールを使用してユーザーの質問に直接答えてください；簡潔ですが明確な回答を提供してください。
    詳細な回答ではなく、開発者へのすぐに実行できるアクションアイテムを1つの文で提供してください。
    ユーザーに対して自分で情報を確認したり探したりするよう求めないでください；それはあなたの役割です；できるだけ有益であるよう努めてください。
    """,
    tools=[google_search]
)

google_search_grounding = AgentTool(agent=_researcher)
```

#### 8. `.env` ファイル (環境変数)

```
# Google AI Studioを使用する場合
GOOGLE_GENAI_USE_VERTEXAI="False"
GOOGLE_API_KEY="ここにあなたのAPIキーを入力してください"

# Google Cloud Vertex AIを使用する場合は以下をコメント解除して設定
# GOOGLE_CLOUD_PROJECT="your-project-id"
# GOOGLE_CLOUD_LOCATION="your-location" #例: us-central1
# GOOGLE_GENAI_USE_VERTEXAI="True"

# 使用するモデル
TUTOR_MODEL="gemini-2.0-flash"
BASE_MODEL="gemini-2.0-flash"
```

#### 9. プロジェクトルートに `requirements.txt` ファイル

```
google-adk
python-dotenv
```

## エージェントの実行と使用方法

開発チューターエージェントを設定したら、以下のコマンドで実行できます：

```bash
# ターミナルで実行
adk run development_tutor/
```

または、Webインターフェースを使用する場合：

```bash
# ウェブインターフェースで実行（推奨）
adk web
```

ブラウザで `http://localhost:8000` または `http://127.0.0.1:8000` でアクセスできます。

以下のような質問をしてみましょう：

1. **プログラミング言語の質問**:
   - "Pythonのリスト内包表記の使い方を教えて"
   - "JavaScriptのPromiseとasync/awaitの違いは何?"

2. **エラー解決の相談**:
   - "TypeErrorが出るのですが、どうすればいいですか?"
   - "ImportErrorの解決方法は?"

3. **ツールやフレームワークについて**:
   - "Docker Composeの基本的な使い方を教えて"
   - "Djangoでデータベースマイグレーションを実行する方法は?"

4. **開発環境のセットアップ**:
   - "Node.jsのインストール方法を教えて"
   - "Pythonの仮想環境の作り方を教えて"

エージェントは内部でGoogle検索を行うためのリサーチャーサブエージェントを使用しており、様々な開発関連の質問に対応できる可能性があります。

<blockquote class="twitter-tweet" data-media-max-width="560"><p lang="ja" dir="ltr">Google の ADK (Agent Development Kit)<br>とても開発しやすくてよいです。WebUIもいい<a href="https://t.co/awVWFsnSMo">https://t.co/awVWFsnSMo</a> <a href="https://t.co/oQ6ojTW3VI">pic.twitter.com/oQ6ojTW3VI</a></p>&mdash; よなか (@yonaka158) <a href="https://twitter.com/yonaka158/status/1911304758184518107?ref_src=twsrc%5Etfw">April 13, 2025</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## Google ADKのメリット

Google ADKには以下のようなメリットがあります：

1. **効率的**: 効率的な実行が可能です。
2. **簡潔なコード**: 適切に抽象化されており、少ないコード行数で機能的なエージェントを作成できます。
3. **モジュラー設計**: 抽象化されていますが、システム設計における創造性を制限せず、柔軟なエージェント構築が可能です。
4. **スケーラブル**: より大きなソフトウェアシステムの一部として拡張しやすい設計になっています。
5. **クリーンアーキテクチャの促進**: コードをきれいに書き、リポジトリを適切に構造化する習慣が身につきます。
6. **マルチエージェントアーキテクチャ**: 複数の専門化されたエージェントを階層的に構成することで、モジュラーでスケーラブルなアプリケーションを構築できます。
7. **Googleのツールとの統合**: Google検索やGeminiのような強力なAIモデルとシームレスに連携できます。

## まとめ

Google ADK（Agent Development Kit）は、AIエージェントの開発を簡素化するツールです。シンプルなエージェントから複雑なマルチエージェントシステムまで、フレキシブルかつモジュラーなアプローチで構築することができます。

Googleのエコシステムや強力なGeminiモデルとの統合に注力していることも特徴ですね。

AIエージェントの開発に興味がある方は、ぜひADKを試してみてください。公式のクイックスタートガイドやサンプルコードを参考に、簡単にエージェントが開発できます　。

## 参考リンク

- [Google ADK公式ドキュメント](https://google.github.io/adk-docs/)
- [ADKクイックスタート](https://google.github.io/adk-docs/get-started/quickstart/)
- [Google ADKサンプル集](http://github.com/google/adk-samples)
- [サンプルリポジトリ: Development Tutor Agent](https://github.com/ju4nv1e1r4/agents-with-adk)
- [Reddit投稿: First Contact with Google ADK](https://www.reddit.com/r/LLMDevs/comments/1jx2xbi/first_contact_with_google_adk_agent_development/)