上一篇我們已經完成了「日程規劃 API」,可以根據輸入的城市與天數,自動生成簡單的旅遊行程。
接下來,我們要將它改寫成可被 Root Agent 呼叫的 Sub-Agent。
首先,我們匯入必要模組,並建立一份簡單的「城市景點資料庫」:
from fastapi import FastAPI, HTTPException
from google.adk.agents import Agent
from . import prompt
import random
# 模擬景點的資料庫
SIGHTSEEING_SPOTS = {
"Taipei": ["台北101", "士林夜市", "故宮博物院", "象山步道", "淡水老街"],
"Kaohsiung": ["蓮池潭", "駁二藝術特區", "六合夜市", "旗津", "美麗島站"],
"Tokyo": ["淺草寺", "東京塔", "秋葉原", "上野公園", "新宿御苑"],
}
這個模擬資料庫紀錄了一些城市的熱門景點,例如:
接著,將原本 FastAPI 的 /generate-itinerary
端點改寫為可供 Agent 調用的函式:
def generate_itinerary(request: dict) -> dict:
"""
呼叫日程規劃 Agent
功能:
- 根據天數生成簡單行程
- 可隨機選景點或依固定規則排程
"""
try:
city = request.get("city", "").strip()
days = int(request.get("days", 1))
if not city:
raise ValueError("City is required.")
if days <= 0:
raise ValueError("Days must be a positive integer.")
spots = SIGHTSEEING_SPOTS.get(city, [])
if not spots:
return {"status": "error", "message": f"No sightseeing data for city '{city}'."}
itinerary = {}
for day in range(1, days + 1):
itinerary[f"Day {day}"] = random.sample(spots, min(len(spots), 3))
return {"status": "success", "city": city, "days": days, "itinerary": itinerary}
except Exception as e:
raise HTTPException(status_code=500, detail=f"An error occurred: {e}")
這個函式會:
city
(城市)與 days
(天數)。有了工具函式後,我們接下來要將它包裝成一個獨立的 Sub-Agent:
itinerary_agent = Agent(
name="itinerary_agent",
model="gemini-2.5-flash",
description=prompt.ITINERARY_AGENT_DESCRIPTION,
instruction=prompt.ITINERARY_AGENT_INSTRUCTION,
tools=[generate_itinerary],
)
這樣就完成了「日程規劃 Agent」的包裝。
當使用者詢問:
「幫我規劃3天的Tokyo行程」
「想安排2天的Taipei旅遊行程」
Root Agent 就會自動呼叫 itinerary_agent
產生對應的結果。
description
ITINERARY_AGENT_DESCRIPTION = """
This is a travel itinerary planning sub-agent that generates simple travel plans.
"""
讓模型知道這支 Agent 的主要任務是產生簡單的旅遊行程。
instruction
ITINERARY_AGENT_INSTRUCTION = """
You are a travel itinerary planning agent responsible for creating daily schedules.
Your responsibilities:
- Accept a city name and the number of days as input.
- For each day, suggest one or more attractions or activities in the city.
- Generate schedules using fixed rules or randomized selection.
- Return results in a structured day-by-day format.
Ensure the itinerary is simple, clear, and user-friendly.
"""
city
(城市名稱)與 days
(旅遊天數)。