在開始前,請先到 OpenWeatherMap 官方網站 註冊並取得你的 API Key。
這個 Key 將用來讓我們的 Agent 查詢即時天氣資料。
經過前幾天的學習,我們已經讓 Agent 能處理條件分支,也能管理每日任務。
今天,我們要進一步升級,示範如何讓 Agent 呼叫外部功能——像是查天氣、計算倒數日或格式化數字。
雖然這還是規則型 Agent,但透過呼叫外部功能,它就能 不只回文字,而是真正幫助你完成日常任務,也為後續整合 Gemini 或 OpenAI 模型打下基礎。
規則型 Agent 本質上依靠 if/else 判斷決策,但靠內建規則,功能相對有限。
呼叫外部功能可以讓 Agent:
這樣,即便是規則型 Agent,也能完成更實用、更貼近生活的任務。
下面範例展示一個簡單的規則型 Agent,能根據使用者輸入呼叫不同功能:
需要先下載
pip install requests
import requests
from datetime import datetime
from fastapi import FastAPI
from pydantic import BaseModel
# ⚠️ 請填入你在 OpenWeatherMap 申請的 API Key
API_KEY = "填入你在 OpenWeatherMap 申請的 API Key"
UNITS = "metric"
LANG = "zh_tw"
app = FastAPI()
# API 輸入格式
class UserInput(BaseModel):
command: str # 指令: 天氣 / 倒數日 / 格式化 / 離開
city: str | None = None # 天氣指令用
date: str | None = None # 倒數日指令用
amount: int | None = None # 格式化指令用
# 功能函數
def get_weather(city):
url = "https://api.openweathermap.org/data/2.5/weather"
params = {
"q": city,
"appid": API_KEY,
"units": UNITS,
"lang": LANG
}
try:
response = requests.get(url, params=params)
data = response.json()
if data.get("cod") != 200:
return f"取得天氣資料失敗: {data.get('message', '未知錯誤')}"
city_name = data["name"]
weather_desc = data["weather"][0]["description"]
temp = data["main"]["temp"]
temp_min = data["main"]["temp_min"]
temp_max = data["main"]["temp_max"]
return f"{city_name} 天氣:{weather_desc}, 現在 {temp}°C (範圍 {temp_min}°C ~ {temp_max}°C)"
except Exception as e:
return f"取得天氣資料失敗: {e}"
def days_until(date_str):
target = datetime.strptime(date_str, "%Y-%m-%d")
return (target - datetime.now()).days
def format_currency(amount):
return f"NT${amount:,}"
# 決策函數
def decide_action(user_input: UserInput):
if user_input.command == "天氣" and user_input.city:
return get_weather(user_input.city)
elif user_input.command == "倒數日" and user_input.date:
days = days_until(user_input.date)
return f"距離 {user_input.date} 還有 {days} 天"
elif user_input.command == "格式化" and user_input.amount is not None:
return format_currency(user_input.amount)
elif user_input.command == "離開":
return "掰掰~"
else:
return "指令或參數不完整,請檢查輸入"
# API endpoint
@app.post("/agent")
def agent_api(user_input: UserInput):
result = decide_action(user_input)
return {"response": result}
透過這一步,我們的規則型 Agent 不再只是單純回覆文字,而能真正 協助日常決策與任務處理。
這也是邁向智慧型 Agent 的重要基礎:
下一步,我們就可以將 Gemini 或 OpenAI 模型接入,讓 Agent 開始 理解自然語言,成為更智慧的生活小幫手 🚀