從一支 .py,到會自己做決定的 Agent
同一個 Airbnb 住宿雷達,三堂課長大三次:第 1 堂用純 Python 每天撈房源、照條件過濾;第 2 堂讓 AI 幫你填條件、逐間判斷、寫早報;第 3 堂交給 Agent 自己決定要搜尋什麼、去看哪幾間的細節。左邊側欄鎖住的兩頁,會在那兩堂用提示詞做出來。
怎麼開始
setup.bat:桌面會出現小怪獸捷徑「AIB 教學版」,接著建 venv、裝套件、複製 .envstart.bat),到「1 純 Python」按「編輯條件」填行程,再按「立即撈取」data/results.json接下來的兩堂
提示詞/第2堂_加入AI.md 整段貼給 Claude Code,它會新增 ai.py、接上撈取流程、打開側欄的「2 加入 AI」提示詞/第3堂_Agent.md 貼上去,它會新增 agent.py、把功能包成工具、打開「3 Agent」做法:打開 ,把整段貼給 Claude Code,等它做完、跑過提示詞最後的驗收清單,這一頁就會打開。
這是什麼
「AIB 住宿雷達」教學版的起點:只用 Python 標準庫(airbnb_agent.py 一支程式)+一個網頁(index.html),每天固定時間到 Airbnb 撈符合條件的房源、過濾後顯示在本機網頁。左側欄是整門課的骨架,三堂課各填一頁。
| 1 純 Python | 2 加入 AI | 3 Agent | |
|---|---|---|---|
| 你怎麼用 | 填表單、按撈取 | 填表單,AI 幫你填、幫你評分 | 對話視窗:講目標、追問 |
| 誰決定流程 | 你(程式寫死的 if/else) | 還是你,AI 是被呼叫的函式 | AI:自己決定搜幾次、要不要放寬、要不要點進房源 |
| 怎麼做出來 | 已經做好 | 提示詞/第2堂_加入AI.md | 提示詞/第3堂_Agent.md |
這支程式怎麼拿到 Airbnb 資料
沒有用 API(Airbnb 不對外開放)。程式像瀏覽器一樣打開搜尋頁,Airbnb 會把第一頁結果的 JSON 整包塞在網頁裡給自己的前端用,程式把它挖出來解析。翻頁靠頁面附的 cursor,每頁之間隨機停 1.5–3 秒;頁數限制 1–5 頁、每天撈一次,避免被防爬擋下。房源的長篇描述與評價全文是前端載入後才拿的,抓不到。
上課用:示範資料與不自動撈取
一間教室三十台電腦同時撈同一個網站,對 Airbnb 來說就是單一 IP 瞬間幾十個請求,很容易整班一起被擋半小時。所以教材裡預設打開兩個開關(都在 .env):
| 開關 | 作用 |
|---|---|
AIB_DEMO=1 | 用 demo_results.json 的房源,完全不連 Airbnb。過濾、排序、AI 判斷、Agent 全部照跑,只有「去 Airbnb 拿」那一步被換掉;畫面上會顯示「示範資料」膠囊 |
AIB_FETCH_ON_START=0 | 程式啟動時不自動補撈,要撈請自己按「立即撈取」 |
想真的撈:把 AIB_DEMO 那一行前面加 # 註解掉,重開程式即可。老師要重新產生示範資料就先真撈一次,再跑 python airbnb_agent.py --make-demo。
結果列上的「測試撈取」是檢查用的:真的連一次 Airbnb,但只撈 1 頁、什麼都不寫入,用來確認「今天還撈得到嗎」(Airbnb 改版或擋人時會在這裡先看出來),不會動到現有結果與歷史紀錄。
每天自動撈取
程式開著就在「每天自動撈取」設定的時間撈;沒開的話,下次打開發現今天還沒撈會補撈一次。想不開視窗也撈,用 advanced/schedule_daily.bat 登錄 Windows 工作排程器。
資料放哪裡
conditions.json:出遊條件(表單存的就是它,第一次啟動自動建立)data/results.json:最近一次撈到的結果;data/seen.json:看過哪些房源、上次價格(判斷 NEW/降價用)data/marks.json:你按過「看過了」的房源