課程:AI agent 開發 — Tool 與 Skill 主題: 旅遊前哨站 / 偵探事務所 / 生活顧問
說明這個 Agent 能做什麼,使用者可以輸入哪些指令
| 使用者輸入 | Agent 行為 | 負責組員 |
|---|---|---|
| 城市名稱 | 接收城市名,啟動 trip_briefing_skill | 姚谷伝 |
| (自動觸發) | 呼叫 weather_tool,查詢即時天氣 | 姚谷伝 |
| (自動觸發) | 呼叫 search_tool,搜尋熱門景點 | 姚谷伝 |
| exit | 結束程式並退出 | 姚谷伝 |
| 姓名 | 負責功能 | 檔案 | 使用的 API |
|---|---|---|---|
| 姚谷伝 | 天氣 | tools/weather_tool.py |
wttr.in (JSON format) |
| 姚谷伝 | 景點 | tools/search_tool.py |
DuckDuckGo Search (DDGS) |
| 姚谷伝 | Skill 整合 | skills/travel_skill.py |
— |
| 姚谷伝 | Agent 主程式 | main.py |
— |
範例:
├── tools/
│ ├── __init__.py # 使資料夾成為可匯入的 package
│ ├── weather_tool.py # 處理天氣 API 請求
│ └── search_tool.py # 處理 DuckDuckGo 網頁搜尋
├── skills/
│ ├── __init__.py # 使資料夾成為可匯入的 package
│ └── travel_skill.py # 整合工具輸出格式化簡報
├── main.py # 程式進入點,處理使用者互動
├── requirements.txt # 專案依賴套件 (requests, ddgs)
└── README.md # 專案說明文件
範例:
# 建立虛擬環境
python -m venv .venv
# 啟動虛擬環境 (Windows)
.venv\Scripts\activate
# 安裝必要套件
pip install requests ddgs
# 執行 Agent
python main.py請輸入想去的城市: 台北
正在為您準備 台北 的資料...
=== 台北 行前簡報 ===
[天氣] 20°C,Partly cloudy
[景點] 2026【台北景點】推薦45個台北景點全攻略、台北一日遊這樣玩!、2026台北景點|精選40個人氣景點
[提醒] 記得帶上相機,捕捉美麗的瞬間!
========================
- Tool 名稱:weather_tool
- 使用 API:wttr.in (JSON format)
- 輸入:城市名稱
- 輸出範例:
TOOL = {
"name": "get_weather",
"description": "取得目標城市的即時氣溫與天氣狀態",
"parameters": {
"city": "string"
}
}- Tool 名稱:search_tool
- 使用 API:DuckDuckGo Search (DDGS)
- 輸入:城市名稱
- 輸出範例:
TOOL = {
"name": "search_tool",
"description": "搜尋目標城市的熱門景點",
"parameters": {
"city": "string"
}
}- 組合了哪些 Tool:weather_tool、search_tool
- 執行順序:
Step 1: 呼叫 weather_tool → 取得天氣
Step 2: 呼叫 search_tool → 取得景點
Step 3: 組合輸出 → 產生簡報
最困難的部分是 Python 的模組路徑引用 (ModuleNotFoundError)。當我在 main.py 呼叫 skills 裡的函式,而 skills 又要去呼叫 tools 時,常會因為執行路徑不同而找不到檔案。最後透過在各資料夾建立 init.py 以及確認終端機執行路徑在專案根目錄下,才成功解決引用問題。
我認為 Tool (工具) 像是「單一的動作」,它只負責把一件事做好(例如:連上 API 把資料拿回來),不考慮後續用途;而 Skill (技能) 則是「解決問題的方案」,它懂得如何有邏輯地組合多個工具,並將原始數據處理成使用者真正需要的結果。
我會想增加一個 「即時匯率轉換 Tool」。因為行前簡報除了天氣和景點,預算也是旅客最關心的部分。如果輸入目的地後,能自動根據目前匯率計算 1 TWD 等於多少當地貨幣,這份簡報的實用價值會更高。