系列:30 天用 Google AI 打造臺灣防災速報 App(Day 7/30)
第一週結束,照慣例做週回顧:整理這週完成了什麼、資料流程最後的樣子,以及遇到的問題與解法。

這張圖是定案的設計。目前完成的是下載、解析、整理三段,三支程式都還是手動執行一次的腳本;「排程」和「儲存」兩段還沒有實作,之後接上 Cloud Functions 與 Firestore 時處理。
設計上的三個決定:
| 問題 | 解法 |
|---|---|
| NCDR 單筆示警回物件不回陣列 | isinstance 檢查後包成陣列 |
| 連續連線時,伺服器回傳 429(表示短時間內請求太頻繁) | 目前先拉長每次連線的間隔;之後規劃用定時輪詢,並把前一次取得的結果暫時保存起來重複使用(快取) |
| 示警的 id 不唯一,同一個 id 下有不同內容 | 改用「id+時間+內容」的雜湊當唯一鍵,只剔除完全相同的示警 |
| 測試訊息混在正式資料裡 | 過濾 ncdrSystemTest 分類 |
| 各單位的分類有粗有細 | 用對照表整理成六大類 |
| 中央氣象署網站的憑證被 Python 的嚴格檢查拒絕 | 在連線設定關閉 strict 旗標(憑證本身仍有驗證) |
這週的程式都還是本機執行的 Python 腳本。我也試用了 Antigravity 2.0 的命令列工具 agy,請它的 agent(能依指示協助規劃或執行工作的 AI 程式)審查下載程式。它指出一個潛在問題:示警的 link 欄位有時是單一物件、有時是陣列,原本的寫法遇到陣列會出錯,後來補上了檢查。分類對照表這種需要領域知識的內容,還是得自己逐項核對。
第二週進入 AI 核心:明天從 prompt 設計開始,看怎麼讓 Gemini 把地震報告寫成一般民眾也看得懂的速報。