系列:30 天用 Google AI 打造臺灣防災速報 App(Day 21/30)
第三週把程式搬上雲端,再做出 App。後端從 9/25 晚上開始在 Cloud Functions(Google Cloud 的雲端函式服務)上執行。這篇整理上線第一週(9/25 到 10/1)的數字,以及上線後才發現的問題。
先說一個限制:這一週還沒有真正的使用者。問答的 236 題全是我自己的測試,所以下面的數字只能說明系統穩不穩、花多少錢,不能說明使用者怎麼用。
| 篇章 | 做到的 | 還缺的 |
|---|---|---|
| Day 15 資料模型與安全規則 | 八個集合,App 只能讀公開的四個;問答內容預設不存 | — |
| Day 16 排程與同步 | 每 10 分鐘同步示警、每 2 分鐘同步地震;只寫有變化的文件 | — |
| Day 17 Stitch 設計稿 | 一段描述產生 22 張畫面 | 設計稿裡的數字沒有來源,要人工檢查 |
| Day 18 Flutter 跨平台 | Android、iOS、網頁版同一個專案,四種語言 | 識別碼上架前改名,重新註冊了一次 |
| Day 19 首頁即時監聽 | 分清楚「沒有資料」與「沒有示警」,後端停擺超過 25 分鐘會提醒 | — |
| Day 20 情緒與危機 | 危機詞清單不公開、求助文字由程式固定、同音錯字比對 | 分級與追問、專業審閱、用新用例重測 |
排程沒有漏跑。 示警從 9/26 起每天跑滿 144 輪;地震排程 9/26 上線,從 9/27 起每天約 720 輪。一週有 4 輪以錯誤結束(資料來源回「請求過多」、讀取中央氣象署 API 逾時等),之後的輪次都自己恢復,不用人處理。
資料庫寫入降到原本的 0.5%。 Day 16 提過,第一版每一輪都把約 800 則已結束的示警重寫一次,照這個寫法一天會寫入約 12 萬次。改成只寫有變化的文件後,從 9/27 起每天約寫入 500 到 800 次。
| 日期 | 讀取 | 寫入 | 刪除 |
|---|---|---|---|
| 9/25(上線 3.5 小時) | 6,562 | 16,712 | 15,930 |
| 9/26(當天修正,含驗證時的讀取) | 27,946 | 14,042 | 12,043 |
| 9/27 到 10/1 | 每天 9,563 到 11,226 | 每天 505 到 825 | 每天 60 到 176 |
Firestore(雲端資料庫)的免費額度是每天讀取 5 萬、寫入與刪除各 2 萬次,每天都在額度內。
有日誌的部分,Gemini 平均一天不到 0.1 美元。 用日誌記下的 token 數(模型處理文字的計價單位)乘上官方定價估算,9/26 到 10/1 共記錄 1,243 次呼叫,約 0.42 美元。9/25 還沒記錄用量,9/26 也是中途才開始記,所以這不是全部的費用。Day 14 估的上限是一天 0.18 美元,那是假設每天有 200 次問答;這週沒有真實使用者,兩者不能直接比。
9 月實際付了 0 元。 9 月整個月的使用費是新臺幣 58.40 元,其中 Gemini API 50.03 元、Cloud Functions 7.86 元。這些全部由 Google AI Pro 訂閱方案每月附的 10 美元 Google Cloud 抵免額抵掉(Google 開發者計畫說明)。其中 9/26 到 9/30 上線後的用量估算約新臺幣 11 元,其餘大多花在上線前的開發和本機測試。
上線一週記錄的問題裡,挑三個說明。
1. Gemini 額度不足,AI 停了約 6 小時。 這個專案的 Gemini API 原本用 Google AI Studio(管理 Gemini API 金鑰與額度的網站)的預付方案。9/26 清晨,Gemini API 從 05:20 到 11:40 持續回傳「額度不足」,期間有 20 次 AI 加值失敗,在 AI Studio 儲值 150 元後恢復。之後 Gemini API 綁定的計費來源也換了,使用費改由上面的抵免額抵掉。
示警本身照常同步。Day 16 把「下載示警」和「AI 加值」拆成兩個函式,AI 失敗時 App 照樣看得到示警,只是少了 AI 摘要和翻譯。恢復後補跑,19 則示警都補上了。之後加了每天早上的檢查:額度不夠用 3 天就寄信通知。
這件事的提醒是:AI 加值要和主要資料流程分開,AI 停了,核心功能也要能用。
2. 等級多了一個「極重大」。 Day 9 把官方的 Extreme 和 Severe 都對應到 critical(重大)。上線後要讓顏色對齊中央氣象署的紅、橙、黃燈號,兩級合併就分不出紅和橙。所以拆出第四級 extreme(極重大):
3. 日文的縣市核對擋掉了正確的翻譯。 Day 13 由程式核對譯文裡的縣市名稱。日文版原本把「縣」或「市」前面任兩個字都當成縣市名,「河床等縣政府」就被讀成「床等縣」。改成只比對臺灣的 22 個縣市後,用 67 則日文譯文重測,65 則通過,誤擋 0 則。
其他問題簡單列出:
最後一週:先用兩篇談地震預測的科普,再回到工程,做地震地圖、推播、通知合併與代理,接著談 AI 輸出的評估、費用與資安,最後展示成果並回顧這 30 天。明天 Day 22:地震速報做得到,地震預測為什麼還很遠。