1. 始める前に
「ADK を使用した AI エージェントの構築」シリーズの第 2 回です。このハンズオン Codelab では、さまざまなツールを使用して基本的な AI エージェントを強化します。
このガイドでは、まず 2 つのパスを紹介します。1 つは「ADK を使用した AI エージェントの構築: 基礎」Codelab から継続するユーザー向け、もう 1 つは新規に始めるユーザー向けです。どちらのパスでも、開始に必要な基本エージェント コードが用意されます。
この Codelab を修了すると、さまざまな目的のツールを備えたパーソナル アシスタント エージェントが完成します。このエージェントは、このシリーズの以降のパートで、高度なマルチエージェント システム(MAS)に変換される予定です。
前提条件
- 生成 AI のコンセプトを理解していること
- Python プログラミングの基本的なスキル
- ADK を使用した AI エージェントの構築: 基礎の Codelab または同等のものを完了していること
学習内容
- ツールとしてカスタム Python 関数を構築して、エージェントに新しいスキルを付与します。
- Google 検索などの組み込みツールを使用して、エージェントをリアルタイム情報に接続します。
- 複雑なタスク用に特化したサブエージェントを作成して、マルチツール エージェントを構築します。
- LangChain などの一般的な AI フレームワークのツールを統合して、機能を迅速に拡張します。
必要なもの
- 動作するパソコンと安定した Wi-Fi 接続
- Google Cloud コンソールにアクセスするためのブラウザ(Chrome など)
- 課金が有効になっている Google Cloud プロジェクト
- 好奇心と学習意欲
2. はじめに
ADK で構築された基本的なエージェントには強力な LLM ブレインがありますが、制限もあります。トレーニング日以降に作成された情報にアクセスできず、外部サービスとやり取りできません。電話やインターネットのない図書館に閉じ込められた、優秀で知識豊富なアシスタントのようなものです。エージェントを真に有用なものにするには、ツールを提供する必要があります。
ツールは、AI アシスタントに外部世界へのアクセス権を付与するようなものです。たとえば、電卓、ウェブブラウザ、特定の会社のデータベースへのアクセス権などです。ADK では、ツールは、エージェントがリアルタイム データの検索や外部 API の呼び出しなどの特定のアクションを実行できるようにするモジュラー コードです。ツールを使用すると、その機能は単なる会話をはるかに超えて拡張されます。
ADK には、次の 3 つのカテゴリのツールが用意されています。
- 関数ツール: 事前定義された関数やエージェントなど、アプリケーションの固有の要件を満たすために開発するカスタムツール。
- 組み込みツール: Google 検索やコード実行などの一般的なオペレーション用にフレームワークが提供する、すぐに使用できるツール。
- サードパーティ ツール: Serper などの一般的な外部ライブラリや、LangChain と CrewAI のツール。
ADK エージェントでツールを使用する方法については、公式ドキュメントをご覧ください。この Codelab では、シンプルなエージェントを高性能な個人旅行アシスタントに変えるツールを追加します。では始めましょう
3. スタートガイド: ベース エージェント
エージェントにツールを使用させるには、まず基本的なエージェントが必要です。進捗状況に最適なパスを選択します。
パス A: Foundation Codelab から続行する
「ADK を使用した AI エージェントの構築: 基礎」の Codelab を完了したばかりの場合は、準備は完了しています。既存の ai-agents-adk
プロジェクト ディレクトリで作業を続行できます。
パス B: 新規に開始する
この Codelab を直接開始する場合は、次の 4 つの手順を完了して環境をセットアップし、必要なスターター エージェントを作成します。
手順を完了すると、学習プログラムを開始する準備が整います。
4. 通貨換算用のカスタムツールを構築する
この段階では、ADK を使用してシンプルな AI エージェントを構築し、開発 UI で実行する方法をすでに理解している必要があります。
たとえば、来月日本に旅行に行く予定で、現在の為替レートを確認する必要があるとします。エージェントに「シンガポール ドルから日本円への為替レートはいくらですか?」と尋ねます。
エージェントがリアルタイムの換算レートを取得できないことがわかります。これは、エージェントに現在インターネット アクセスと外部システム接続がないためです。エージェントが値を返したとしても、その値はハルシネーションである可能性が高いため、信頼することは困難です。
この問題を解決するために、REST API を介して為替レートを取得する Python 関数を実装し、エージェントの関数ツールとして統合します。
ターミナル ウィンドウでキーボード ショートカット Ctrl+C(Windows/Linux の場合)または Cmd+C(macOS の場合)を使用して、実行中のエージェント プロセスを終了します。
custom_functions.py
ファイルを作成します。
ターミナルで次のコマンドを入力して、personal_assistant
フォルダに custom_functions.py
という名前の Python ファイルを作成します。.
touch 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-2.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)]
)
変更後、次のコマンドを入力してエージェントを再起動します。
uv run adk web
エージェントが起動したら、「シンガポール ドルから日本円への為替レートはいくらですか?」と再度質問します。
今回は、get_fx_rate
ツールによって実際の為替レートが表示されます。
通貨換算に関するご質問がございましたら、お気軽にお問い合わせください。
5. 組み込みの Google 検索ツールと統合する
エージェントが為替レートを提供できるようになったので、次は来月の天気予報を取得します。エージェントに「来月の東京の天気予報は?」と尋ねます。
天気予報にはリアルタイムの情報が必要ですが、エージェントにはそのような情報がありません。必要なリアルタイム データごとに新しい Python 関数をコーディングすることもできますが、カスタムツールを追加し続けると、エージェントが複雑になりすぎて管理が難しくなります。
幸いなことに、Agent Development Kit(ADK)には、すぐに使用できる Google 検索などの組み込みツールのスイートが用意されており、エージェントが外部とやり取りする方法が簡素化されています。エージェントに Google 検索ツールを追加しましょう。
そのためには、agent.py
ファイルを次のように編集する必要があります。
from google.adk.agents import Agent
from google.adk.tools import FunctionTool
from google.adk.tools import google_search
from .custom_functions import get_fx_rate
root_agent = Agent(
model='gemini-2.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),
google_search,
]
)
ファイルを編集したら、adk web
インスタンスを再起動します。忘れた場合は、
- ターミナルをクリックし、Ctrl+C キーまたは Cmd+C キーを押してインスタンスを停止します。
uv run adk web
: インスタンスを起動する- 同じ質問をしてみます。「来月の東京の天気予報は?」
推奨されるアプローチは、マルチエージェント パターンを採用することです。つまり、Google 検索の実行のみを目的とする専用のエージェントを作成します。次に、この新しい Google 検索エージェントをツールとしてメインの personal_assistant
に割り当てます。
custom_agents.py
ファイルを作成する
次に、personal_assistant
フォルダに custom_agents.py
という名前の Python ファイルを作成します。
touch personal_assistant/custom_agents.py
フォルダ構造は次のようになります。
ai-agents-adk/ └── personal_assistant/ ├── .env ├── __init__.py ├── agent.py ├── custom_functions.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-2.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 import agent_tool
from .custom_functions import get_fx_rate
from .custom_agents import google_search_agent
root_agent = Agent(
model='gemini-2.5-flash',
name='root_agent',
description='A helpful assistant for user questions.',
tools=[
FunctionTool(get_fx_rate),
agent_tool.AgentTool(agent=google_search_agent),
]
)
コード内の強力な新しいパターンを詳しく見てみましょう。
- 新しいスペシャリスト エージェント: 完全に新しいエージェント
google_search_agent
を定義しました。具体的な説明と、唯一のツールがgoogle_search
であることに注意してください。検索スペシャリストです。 agent_tool.AgentTool
: これは ADK の特別なラッパーです。エージェント全体(google_search_agent)を取得し、標準ツールのように見えるようにパッケージ化します。- よりスマートな **
root_agent
**:root_agent
に新しいツールagent_tool.AgentTool(agent=google_search_agent)
が追加されました。ウェブ検索の方法はわかりませんが、検索タスクを委任できるツールがあることはわかっています。
root_agent
から命令フィールドがなくなっています。その指示は、利用可能なツールによって暗黙的に定義されるようになりました。
root_agent
はオーケストレーターまたはルーターになり、ユーザーのリクエストを理解して、get_fx_rate
関数または google_search_agent
のいずれかの適切なツールに渡すことが主な役割になります。この分散型設計は、複雑で保守可能なエージェント システムを構築するうえで重要です。
次に、再起動します。
adk web
インスタンスを生成し、エージェントに「来月の東京の天気予報は?」と再度質問します。
エージェントは現在、google_search_agent
を使用して最新情報を取得しています
現在の交換に関する質問もできます。エージェントは、それぞれの質問に対して適切なツールを使用できるようになりました。
リアルタイムの情報が必要な質問をエージェントに尋ねて、エージェントが利用可能なツールを使ってクエリを処理する様子を確認してください。
6. LangChain の Wikipedia ツールを活用する
エージェントは優れた旅行アシスタントとして成長しています。get_fx_rate
ツールで通貨換算を処理し、google_search_agent
ツールでロジスティクスを管理できます。しかし、素晴らしい旅行は単なるロジスティクスだけではありません。目的地の文化や歴史を理解することも重要です。
google_search_agent
は文化的、歴史的事実を見つけることができますが、Wikipedia などの専用ソースからの情報のほうが構造化され、信頼性が高いことがよくあります。
幸いなことに、ADK は拡張性が高く、CrewAI や LangChain などの他の AI エージェント フレームワークのツールをシームレスに統合できます。この相互運用性は、開発時間を短縮し、既存のツールを再利用できるため、非常に重要です。このユースケースでは、LangChain の Wikipedia ツールを活用します。
まず、実行中のエージェント プロセスを停止し(Ctrl+C または Cmd+C)、ターミナルで次のコマンドを入力して、現在の Python 仮想環境に追加のライブラリをインストールします。
uv add langchain-community
uv add wikipedia
third_party_tools.py
ファイルを作成する
次に、personal_assistant
フォルダに third_party_tools.py
という名前の Python ファイルを作成します。
touch 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 ツールの実装が含まれます。Cloud エディタを使用して、次のコードを 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 import agent_tool
from google.adk.tools import langchain_tool
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-2.5-flash',
name='root_agent',
description='A helpful assistant for user questions.',
tools=[
FunctionTool(get_fx_rate),
agent_tool.AgentTool(agent=google_search_agent),
langchain_tool.LangchainTool(langchain_wikipedia_tool),
]
)
次に、adk web
インスタンスを再起動し、エージェントに「京都の歴史について教えて」と質問します。
エージェントはこれを過去のクエリとして正しく識別し、新しい Wikipedia ツールを使用します。サードパーティ製ツールを統合して特定の役割を付与することで、エージェントのインテリジェンスが大幅に向上し、旅行プランニングの目的でより有用なものになりました。
エージェントがこの選択を行った方法を正確に確認するには、adk web
UI のイベント インスペクタを使用します。[イベント] タブをクリックし、最新の functionCall
イベントをクリックします。
インスペクタには、利用可能なすべてのツールのリストが表示され、エージェントによって実行されたツールの tool_code がハイライト表示されます。
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 の準備が整いました。ご参加をお待ちしております。