はじめに
Google の Agent Development Kit (ADK) は、大規模言語モデル (LLM) を活用したエージェントアプリケーションを効率的に開発するためのフレームワークです。今回は、ADK のチュートリアルを参考に、特定の都市にあるポケモンセンターの情報を検索する簡単なエージェントを作成してみました。この記事では、その開発プロセスと技術的なポイントを紹介します。
ソース
プロジェクト概要
作成したエージェント (location_info_agent
) は、ユーザーから都市名を指定されると、その都市にあるポケモンセンターのリストを返します。例えば、「札幌市のポケモンセンターは?」と尋ねると、「ポケモンセンターサッポロ」と「ポケモンストア 新千歳空港店」の情報を返すような動作を想定しています。
使用技術
- フレームワーク: Google Agent Development Kit (ADK)
- 言語: Python
- LLM モデル: Gemini Flash (
gemini-2.0-flash-exp
) ※設定で変更可能 - 主なライブラリ:
google-adk
実装の詳細
1. エージェントの定義 (location_info_agent/agent.py
)
ADK の中心となるのは Agent
クラスです。以下のようにエージェントを定義しました。
from google.adk.agents import Agent
# ... (ポケモンセンターデータと get_pokemon_center 関数の定義) ...
# Agent 定義
root_agent = Agent(
name="location_info_agent",
model="gemini-2.0-flash-exp", # 使用するLLMモデル
description=(
"Agent to answer questions about Pokemon Centers in a city."
),
instruction=(
"I can answer your questions about Pokemon Centers in various cities."
),
tools=[get_pokemon_center], # エージェントが利用するツール
)
name
: エージェントの一意な名前。model
: エージェントが思考や応答生成に利用する LLM モデルを指定します。description
,instruction
: エージェントの能力や役割を示す説明文です。LLM がエージェント自身の機能を理解するのに役立ちます。tools
: エージェントが利用可能なツール(関数)のリスト。LLM はユーザーのリクエストに応じて、これらのツールを呼び出す計画を立て、実行します。
2. ツールの実装 (get_pokemon_center
関数)
エージェントが実際にポケモンセンター情報を検索するためのツールとして、get_pokemon_center
関数を実装しました。
# ポケモンセンターデータのリスト (一部抜粋)
ALL_POKEMON_CENTERS = [
{"name": "ポケモンセンターサッポロ", "city": "札幌市", "prefecture": "hokkaido"},
{"name": "ポケモンストア 新千歳空港店", "city": "千歳市", "prefecture": "hokkaido"},
# ... 他のデータ ...
]
def get_pokemon_center(city: str) -> dict:
"""指定された都市のポケモンセンター情報を返す"""
found_centers = [
center for center in ALL_POKEMON_CENTERS if center["city"] == city
]
if found_centers:
return {
"status": "success",
"centers": found_centers,
}
else:
return {
"status": "error",
"error_message": f"Sorry, I don't have Pokemon Center information for {city}.",
}
- ポケモンセンターのデータは、現時点では
agent.py
内にリスト (ALL_POKEMON_CENTERS
) としてハードコーディングされています。(将来的には外部DBやAPIから取得する形も考えられます) - 関数は引数
city
を受け取り、リスト内を検索して一致する都市のセンター情報を返します。 - 検索結果の有無に応じて、
status
が “success” または “error” の辞書を返します。ADK はこの形式の戻り値を受け取って処理を進めます。
3. 動作の流れ
- ユーザーが ADK フレームワークを通じてエージェントに「〇〇市のポケモンセンターは?」のように質問します。
- LLM (Gemini Flash) は質問内容とエージェントの定義 (
description
,instruction
,tools
) を理解します。 - LLM は、この質問に答えるためには
get_pokemon_center
ツールを使う必要があると判断し、引数city
にユーザー指定の都市名を設定してツール呼び出しを計画します。 - ADK フレームワークが
get_pokemon_center("〇〇市")
を実行します。 - 関数が実行され、結果の辞書 (成功またはエラー) が返されます。
- LLM はツールの実行結果を受け取り、最終的な応答を生成してユーザーに返します。
まとめ
Google ADK を利用することで、LLM に外部ツール(今回は Python 関数)を使わせるエージェントを比較的簡単に構築できることがわかりました。エージェントの定義とツールの実装を分離することで、関心の分離が図られ、開発が進めやすくなっています。
今回は静的なデータリストを使いましたが、外部 API を呼び出すツールを実装すれば、より動的で複雑なタスクを実行するエージェントも作成できそうです。ADK はまだ新しいフレームワークですが、今後の発展が楽しみです。
この記事は Google の ADK チュートリアルを参考に作成されました。