iT邦幫忙

2025 iThome 鐵人賽

DAY 25
0
生成式 AI

Multi-Agent 實戰:開發多代理智慧小幫手系列 第 25

【Day 25】 小專案 - 日程規劃 Agent(下)

  • 分享至 

  • xImage
  •  

上一篇我們已經完成了「日程規劃 API」,可以根據輸入的城市與天數,自動生成簡單的旅遊行程。
接下來,我們要將它改寫成可被 Root Agent 呼叫的 Sub-Agent

改成 Agent

匯入模組與建立模擬資料庫

首先,我們匯入必要模組,並建立一份簡單的「城市景點資料庫」:

from fastapi import FastAPI, HTTPException
from google.adk.agents import Agent
from . import prompt
import random

# 模擬景點的資料庫
SIGHTSEEING_SPOTS = {
    "Taipei": ["台北101", "士林夜市", "故宮博物院", "象山步道", "淡水老街"],
    "Kaohsiung": ["蓮池潭", "駁二藝術特區", "六合夜市", "旗津", "美麗島站"],
    "Tokyo": ["淺草寺", "東京塔", "秋葉原", "上野公園", "新宿御苑"],
}

這個模擬資料庫紀錄了一些城市的熱門景點,例如:

  • Taipei 有「台北101、士林夜市、故宮博物院」等。
  • Kaohsiung 則有「駁二藝術特區、旗津」等。

工具函式

接著,將原本 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}")

這個函式會:

  1. 取得輸入的 city(城市)與 days(天數)。
  2. 從資料庫中找到對應城市的景點。
  3. 為每天隨機安排 2–3 個景點。
  4. 將結果以結構化格式(Day 1、Day 2...)回傳。

包裝成 Sub-Agent

有了工具函式後,我們接下來要將它包裝成一個獨立的 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 產生對應的結果。

簡易prompt

  • 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.
    """
    

    prompt 內容概述

    1. 輸入要求
      • 接收兩個參數:city(城市名稱)與 days(旅遊天數)。
    2. 執行邏輯
      • 依據天數,每天推薦 2~3 個景點。
      • 景點可隨機產生,也可按順序分配。
      • 若城市不存在於資料庫中,回傳錯誤訊息。
    3. 語氣與風格
      • 回覆需清楚且結構化,方便使用者閱讀。
      • 不需要多餘說明,只需提供每日行程。

上一篇
【Day 24】 小專案 - 日程規劃 Agent(上)
下一篇
【Day 26】 小專案 - Master Agent 實作並測試
系列文
Multi-Agent 實戰:開發多代理智慧小幫手28
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言