上篇我們已經完成了 交通查詢 API
這篇要進一步把它改寫成能被 Root Agent 呼叫的 Sub-Agent。
首先,我們要將原本的 FastAPI 函式,改成 可被 ADK 調用的 Agent。
from fastapi import HTTPException
from google.adk.agents import Agent
from . import prompt
# 模擬交通資料
TRANSPORT_DATABASE = {
("Taipei", "Kaohsiung"): ["高鐵", "飛機", "客運公車"],
("Taipei", "Taichung"): ["高鐵", "客運公車"],
("Taipei", "Tokyo"): ["飛機"],
("Tokyo", "Kyoto"): ["新幹線", "飛機"],
}
這個模擬資料庫紀錄了幾個從「出發地 → 目的地」之間可行的交通方式。
例如:從台北到高雄有「高鐵、飛機、客運公車」。
把原本的 FastAPI API 改寫成一個「可被 Agent 調用的函式」。
def query_transport(request: dict) -> dict:
"""
呼叫交通查詢 Agent
功能:
- 模擬交通方式
- 根據起點與終點回傳可行交通方式
"""
try:
start = request.get("start", "").strip()
end = request.get("end", "").strip()
if not start or not end:
raise ValueError("Both start and end locations are required.")
routes = TRANSPORT_DATABASE.get((start, end), [])
if not routes:
return {
"status": "error",
"message": f"No transport information found from '{start}' to '{end}'."
}
return {"status": "success", "start": start, "end": end, "routes": routes}
except Exception as e:
raise HTTPException(status_code=500, detail=f"An error occurred: {e}")
這個函式會從輸入中取出 start
與 end
,再去資料庫查詢對應的交通方式,最後回傳結果。
transport_agent = Agent(
name="transport_agent",
model="gemini-2.5-flash",
description=prompt.TRANSPORT_AGENT_DESCRIPTION,
instruction=prompt.TRANSPORT_AGENT_INSTRUCTION,
tools=[query_transport],
)
這樣,我們就把工具函式包裝成一個可由 Root Agent 調用的 Sub-Agent。
當使用者問:
「我想從 Taipei 去 Kaohsiung,有哪些交通方式?」
Root Agent 就會自動呼叫 transport_agent 來查詢結果。
description
TRANSPORT_AGENT_DESCRIPTION = """
This is a transport query sub-agent that suggests available transportation methods between two locations.
"""
讓模型知道這支 Agent 的功能就是查詢交通方式。
instruction
TRANSPORT_AGENT_INSTRUCTION = """
You are a transport query agent responsible for finding available transport options.
Your responsibilities:
- Accept a start and an end as input.
- Return all possible transportation methods (e.g., airplane, high-speed rail, bus).
- If no transport options exist in the database, return an error message.
Provide clear and concise transport options.
"""
prompt 內容概述:
輸入要求
start
(出發地)、end
(目的地)。執行邏輯
語氣與風格