ADK を使用した AI エージェントの構築: ツールによる強化

1. 始める前に

「ADK を使用して AI エージェントを構築する」シリーズの第 2 部へようこそ。このハンズオン Codelab では、さまざまなツールを使用して基本的な AI エージェントを強化します。

このガイドでは、ADK を使用して AI エージェントを構築する: 基礎 Codelab から続行する場合と、最初から始める場合の 2 つの方法を紹介します。どちらの方法でも、開始に必要な基本エージェント コードが用意されます。

この Codelab を終える頃には、さまざまな目的のツールをパーソナル アシスタント エージェントに装備し、このシリーズの以降のパートで高度なマルチエージェント システム(MAS)に変換する準備が整います。

この Codelab には、短縮 URL goo.gle/adk-using-tools からもアクセスできます。

前提条件

学習内容

  • カスタム Python 関数をツールとして構築して、エージェントに新しいスキルを付与する。
  • Google 検索などの組み込みツールを使用して、エージェントをリアルタイム情報に接続する。
  • 複雑なタスク用に専用のサブエージェントを作成して、マルチツール エージェントを構造化する。
  • LangChain などの一般的な AI フレームワークのツールを統合して、機能を迅速に拡張する。

必要なもの

  • 動作するパソコンと安定した Wi-Fi 接続
  • Google Cloud コンソールにアクセスするためのブラウザ(Chromeなど)
  • 知的好奇心と学習意欲

2. はじめに

ADK で構築された基本的なエージェントには強力な LLM ブレインがありますが、トレーニング日以降に作成された情報にアクセスできない、外部サービスとやり取りできないといった制限もあります。これは、電話やインターネットのない図書館に閉じ込められた、優秀で知識豊富なアシスタントのようなものです。エージェントを真に有用なものにするには、ツールを与える必要があります。

ツールは、AI アシスタントに外部世界へのアクセス権を付与するようなものです。たとえば、電卓、ウェブブラウザ、特定の企業データベースへのアクセスなどです。ADK では、ツールはモジュール式のコードであり、エージェントはリアルタイム データの検索や外部 API の呼び出しなどの特定のアクションを実行できます。ツールを使用すると、シンプルな会話をはるかに超える機能が実現します。

ADK には、次の 3 つのカテゴリのツールがあります。

  1. 関数ツール: 事前定義された関数やエージェントなど、アプリケーションの固有の要件を満たすために開発するカスタムツール。
  2. 組み込みツール: Google 検索やコード実行など、一般的なオペレーション用にフレームワークによって提供される、すぐに使用できるツール。
  3. サードパーティ ツール: Serper などの一般的な外部ライブラリ、LangChain や CrewAI のツール。

ADK エージェントでツールを使用する方法について詳しくは、公式ドキュメントをご覧ください。この Codelab では、ツールを追加して、シンプルなエージェントを有能なパーソナル旅行アシスタントに変換します。では、始めましょう。

3. スタートガイド: 基本エージェント

エージェントにツールを装備するには、操作する基本エージェントが必要です。進捗状況に最適な方法を選択してください。

方法 A: 基礎 Codelab から続行する

ADK を使用して AI エージェントを構築する: 基礎 Codelab を完了したばかりの場合は、準備が完了しています。既存の ai-agents-adk プロジェクト ディレクトリで作業を続行できます。

Cloud Shell プロンプトに (ai-agents-adk) が表示されない場合は、次のコマンドを実行して Python 仮想環境を有効にします。

cd ~/ai-agents-adk
source .venv/bin/activate

方法 B: 最初から始める

この Codelab を直接開始する場合は、次の 4 つの手順を完了して環境を設定し、必要なスターター エージェントを作成します。

  1. Google Cloud サービスを構成する
  2. Python 仮想環境を作成する
  3. エージェントを作成する
  4. 開発 UI でエージェントを実行する

手順が完了したら、学習を開始する準備が整います。

4. 通貨換算用のカスタムツールを構築する

この段階では、ADK を使用してシンプルな AI エージェントを構築し、開発 UI で実行する方法をすでに理解している必要があります。

来月の日本への旅行の準備をしていて、現在の通貨換算レートを確認する必要があるとします。エージェントに"シンガポール ドルから日本円への換算レートは?" と尋ねます。

7b3c502f88e8ab80.png

エージェントがリアルタイムの換算レートを取得できないことがわかります。これは、エージェントが現在インターネットにアクセスできず、外部システムに接続できないためです。エージェントが値を返しても、その値はハルシネーションである可能性が高いため、信頼することは困難です。

この問題を解決するために、REST API を介して換算レートを取得する Python 関数を実装し、エージェントの関数ツール として統合します。

ターミナル ウィンドウでキーボード ショートカット Ctrl+C を使用して、実行中のエージェント プロセスを終了します。

custom_functions.py ファイルを作成する

ターミナルで次のコマンドを実行して、personal_assistant フォルダに custom_functions.py という名前のPython ファイルを作成 し、コードエディタで開きます

cloudshell edit personal_assistant/custom_functions.py

フォルダ構造は次のようになります。

ai-agents-adk/
└── personal_assistant/
    ├── .env
    ├── __init__.py
    ├── agent.py
    └── custom_functions.py

この custom_functions.py ファイルには、外部 API から換算レート データを取得する Python 関数が含まれます。次のコードをコピーしてファイルの中に貼り付けます。

import requests

# define a function to get exchange rate
def get_fx_rate(base: str, target: str):
        """
        Fetches the current exchange rate between two currencies.

        Args:
                base: The base currency (e.g., "SGD").
                target: The target currency (e.g., "JPY").

        Returns:
                The exchange rate information as a json response,
                or None if the rate could not be fetched.
        """
        base_url = "https://hexarate.paikama.co/api/rates/latest"
        api_url = f"{base_url}/{base}?target={target}"

        response = requests.get(api_url)
        if response.status_code == 200:
                return response.json()

次に、agent.py ファイルを編集します。get_fx_rate 関数をインポートして、FunctionTool として割り当てます。

agent.py ファイルを更新する

このコードブロックをコピーして、agent.py ファイルの既存の内容を置き換えます。

from google.adk.agents import Agent
from google.adk.tools import FunctionTool

from .custom_functions import get_fx_rate

root_agent = Agent(
    model='gemini-3.5-flash',
    name='root_agent',
    description='A helpful assistant for user questions.',
    instruction='Answer user questions to the best of your knowledge',
    tools=[FunctionTool(get_fx_rate)]
)

変更後、次のコマンドを入力してエージェントを再起動します。

adk web --allow_origins "regex:https://.*\.cloudshell\.dev"

エージェントが起動したら、同じ質問をもう一度行います。「シンガポール ドルから日本円への換算レートは?」

今回は、get_fx_rate ツールによって実際の換算レートが表示されます。

76b1647fbfc0687a.png

通貨換算に関する質問は自由に行ってください。

5. 組み込みの Google 検索ツールと統合する

エージェントが換算レートを提供できるようになったので、次のタスクは来月の天気予報を取得することです。エージェントに「来月の日本の東京の天気予報は?」 と尋ねます。

399f40c4ea3e0bb3.png

予想どおり、天気予報にはリアルタイムの情報が必要ですが、エージェントにはありません。リアルタイム データが必要なユースケースごとに新しい Python 関数をコーディングすることもできますが、カスタムツールを追加していくと、エージェントが複雑になりすぎて管理が難しくなります。

幸いなことに、Agent Development Kit(ADK)には、Google 検索などの組み込みツールのスイートが用意されており、すぐに使用できるため、エージェントが外部世界とやり取りする方法が簡素化されます。

エージェントに Google 検索ツールを装備するには、マルチエージェント パターンを実装する必要があります。まず、Google 検索の実行のみを目的とする専用のエージェントを作成します。次に、この新しいGoogle 検索エージェント をツールとしてメインの personal_assistant に割り当てます。手順は次のとおりです。

custom_agents.py ファイルを作成する

ターミナルで次のコマンドを実行して、Python ファイルを作成し、custom_agents.py という名前で personal_assistant フォルダに保存し、コードエディタで開きます

cloudshell edit personal_assistant/custom_agents.py

フォルダ構造は次のようになります。

ai-agents-adk/
└── personal_assistant/
    ├── .env
    ├── __init__.py
    ├── agent.py
    ├── custom_functions.py
    └── custom_agents.py

この custom_agents.py ファイルには、専用の google_search_agent のコードが含まれます。 次のコードを custom_agents.py ファイルにコピーします。

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


# Create an agent with google search tool as a search specialist
google_search_agent = Agent(
    model='gemini-3.5-flash',
    name='google_search_agent',
    description='A search agent that uses google search to get latest information about current events, weather, or business hours.',
    instruction='Use google search to answer user questions about real-time, logistical information.',
    tools=[google_search],
)

ファイルを作成したら、次に示すように agent.py ファイルを更新します。

agent.py ファイルを更新する

このコードブロックをコピーして、agent.py ファイルの既存の内容を置き換えます。

from google.adk.agents import Agent
from google.adk.tools import FunctionTool
from google.adk.tools.agent_tool import AgentTool

from .custom_functions import get_fx_rate
from .custom_agents import google_search_agent


root_agent = Agent(
    model='gemini-3.5-flash',
    name='root_agent',
    description='A helpful assistant for user questions.',
    tools=[
        FunctionTool(get_fx_rate),
        AgentTool(agent=google_search_agent),
    ]
)

コード内の強力な新しいパターンを詳しく見てみましょう。

  • 新しいスペシャリスト エージェント: 完全に新しいエージェント google_search_agent を定義しました。具体的な説明と、唯一のツールが google_search であることに注意してください。検索のスペシャリストです。
  • agent_tool.AgentTool: これは ADK の特別なラッパーです。エージェント全体(google_search_agent)を取得し、標準ツールのように見えるようにパッケージ化します。
  • よりスマートなroot_agent: root_agent に新しいツール AgentTool(agent=google_search_agent) が追加されました。ウェブの検索方法はわかりませんが、検索タスクを委任できるツールがあることはわかっています。

root_agent から指示フィールドがなくなりました。指示は、使用可能なツールによって暗黙的に定義されるようになりました。

root_agent はオーケストレータまたはルーターになり、ユーザーのリクエストを理解して、get_fx_rate 関数または google_search_agent の適切なツールに渡すことが主な役割です。この分散型設計は、複雑で保守可能なエージェント システムを構築するための鍵となります。

ターミナルで次のコマンドを入力して、インスタンスを起動します。

adk web --allow_origins "regex:https://.*\.cloudshell\.dev"

エージェントが実行されたら、エージェントに「来月の日本の東京の天気予報は?」 ともう一度尋ねます。

8a2a6d9532b54301.png

エージェントは google_search_agent を使用して最新情報を取得する

現在の換算レートに関する質問を試すこともできます。エージェントは、それぞれの質問に適切なツールを使用できるようになりました。

ff3739a0b5ede6c2.png

リアルタイムの情報が必要な質問をエージェントに尋ねて、使用可能なツールを使用してクエリを処理する方法を確認してください。

6. LangChain の Wikipedia ツールを活用する

エージェントは優れた旅行アシスタントになるように進化しています。get_fx_rate ツールで通貨換算を処理し、google_search_agent ツールでロジスティクスを管理できます。しかし、素晴らしい旅行はロジスティクスだけではありません。目的地の文化や歴史を理解することも重要です。

google_search_agent は文化や歴史に関する事実を見つけることができますが、Wikipedia などの専用ソースからの情報は、多くの場合、より構造化され、信頼性が高くなります。

幸いなことに、ADK は拡張性が高く、CrewAI や LangChain などの他の AI エージェント フレームワークのツールをシームレスに統合できます。この相互運用性は、開発時間を短縮し、既存のツールを再利用できるため、非常に重要です。このユースケースでは、LangChain の Wikipedia ツールを活用します。

まず、実行中のエージェント プロセス(Ctrl+C )を停止し、ターミナル で次のコマンドを入力して、現在の Python 仮想環境に追加のライブラリをインストールします。

uv pip install langchain-community wikipedia

third_party_tools.py ファイルを作成する

次のコマンドを実行すると、personal_assistant フォルダに third_party_tools.py という名前のPython ファイルが作成 され、Cloud エディタで開きます

cloudshell edit personal_assistant/third_party_tools.py

フォルダ構造は次のようになります。

ai-agents-adk/
└── personal_assistant/
    ├── .env
    ├── __init__.py
    ├── agent.py
    ├── custom_functions.py
    ├── custom_agents.py
    └── third_party_tools.py

このファイルには、LangChain Wikipedia ツールの実装が含まれます。次のコードを third_party_tools.py ファイルにコピーします。

from langchain_community.tools import WikipediaQueryRun
from langchain_community.utilities import WikipediaAPIWrapper

# Configure the Wikipedia LangChain tool to act as our cultural guide
langchain_wikipedia_tool = WikipediaQueryRun(
    api_wrapper=WikipediaAPIWrapper(top_k_results=1, doc_content_chars_max=3000)
)

# Give the tool a more specific description for our agent
langchain_wikipedia_tool.description = (
    "Provides deep historical and cultural information on landmarks, concepts, and places."
    "Use this for 'tell me about' or 'what is the history of' type questions."
)

agent.py ファイルを更新する

次に、agent.py ファイルを次の内容で更新します。

from google.adk.agents import Agent
from google.adk.tools import FunctionTool
from google.adk.tools.agent_tool import AgentTool
from google.adk.tools.langchain_tool import LangchainTool

from .custom_functions import get_fx_rate
from .custom_agents import google_search_agent
from .third_party_tools import langchain_wikipedia_tool


root_agent = Agent(
    model='gemini-3.5-flash',
    name='root_agent',
    description='A helpful assistant for user questions.',
    tools=[
        FunctionTool(get_fx_rate),
        AgentTool(agent=google_search_agent),
        LangchainTool(langchain_wikipedia_tool),
    ]
)

ターミナルで次のコマンドを入力して、インスタンスを起動します。

adk web --allow_origins "regex:https://.*\.cloudshell\.dev"

エージェントの準備ができたら、エージェントに"京都の歴史について教えて"と尋ねます。

9098274a483dee32.png

エージェントはこれを歴史的なクエリとして正しく識別し、新しいWikipedia ツールを使用します。サードパーティ ツールを統合して特定の役割を付与することで、エージェントは旅行計画の目的で大幅にインテリジェントで有用になりました。

エージェントがどのように選択したかを確認するには、adk web UI のイベント インスペクタを使用します。[イベント] タブをクリックし、最新の functionCall イベントをクリックします。

eb2cdb9806cd3734.png

インスペクタには、使用可能なすべてのツールのリストが表示され、エージェントによって実行されたツールの tool_code がハイライト表示されます。

119d55bfb0b36e17.png

7. クリーンアップ(省略可)

この Codelab では長時間実行されるプロダクトを使用しないため、ターミナルで Ctrl+C キーを押して、アクティブなエージェント セッション(ターミナルの adk web インスタンスなど)を停止するだけで十分です。

エージェント プロジェクトのフォルダとファイルを削除する

Cloud Shell 環境からコードのみを削除する場合は、次のコマンドを使用します。

cd ~
rm -rf ai-agents-adk

Vertex AI API を無効にする

以前に有効にした Vertex AI API を無効にするには、次のコマンドを実行します。

gcloud services disable aiplatform.googleapis.com

Google Cloud プロジェクト全体をシャットダウンする

Google Cloud プロジェクトを完全にシャットダウンする場合は、詳細な手順について 公式ガイド をご覧ください。

8. まとめ

おめでとうございます!カスタム関数とリアルタイムの Google 検索アクセスを使用して、パーソナル アシスタント エージェントを強化できました。Google ADK でツールを使用する方法については、こちらの公式ドキュメントをご覧ください。

さらに重要なこととして、有能なエージェントを構築するための基本的なアーキテクチャ パターン(専用エージェントをツールとして使用する)を学びました。専用の google_search_agent を作成して root_agent に渡すことで、単一のエージェントの構築から、シンプルながら強力なマルチエージェント システムのオーケストレーションへと一歩踏み出しました。

これで、シリーズの次の Codelab(近日公開)で、複数のエージェントとワークフローのオーケストレーションについて詳しく学ぶ準備が整いました。ご参加をお待ちしております。