iT邦幫忙

2026 iThome 鐵人賽

DAY 12
0
Build on Google AI

30 天用 Google AI 打造台灣防災速報 App系列 第 27 篇

Day 27|漏掉一則該升級的警報,比多推一則嚴重得多:AI 輸出怎麼評估

  • 分享至 

  • xImage
  •  

系列:30 天用 Google AI 打造臺灣防災速報 App(Day 27/30)

改了提示詞或分級表,怎麼知道是變好還是變壞?今天替兩個 AI 輸出各出一張考卷:Day 9 的警報分級,和 Day 8 的速報摘要。兩張分開出,因為它們出錯的代價不一樣。

分級的兩種錯誤不對稱

  • 誤報:不該升級卻升級。使用者多收到一則通知,覺得 App 有點吵,可以修。
  • 漏報:該升級卻沒升級。推播沒發出去,該注意的人就沒收到。

準確率或 F1 這類單一分數,表達不出漏報和誤報的代價差異。所以分級考卷先看漏報底線,再看誤報。這個做法參考同屆 Fngi 的〈評測:False Negative 才是要命的那一個〉。

正式流程的推播底線:

  • 該推播的等級(極重大、官方等級的重大),通過狀態、期限、更新鏈去重與冷卻規則後判定應推的,一則都不能漏推。
  • 不該推的(測試、過期、解除、例行通知),一則都不能推。

分級本身的錯誤另外算:判得比正解低是漏報(包括把警戒判成資訊),判得比正解高是誤報。

考卷怎麼出

  • 題目來源:Firestore 存檔裡 2026 年 9 月 25 日起的真實電文。更早的沒存。
  • 正解:官方等級。CAP 的 severity 對照 App 四級(Extreme→極重大、Severe→重大、Moderate→警戒、Minor→資訊),電文明寫紅色則判極重大。只抽等級來源是官方的電文。
  • 固定亂數種子:重跑出題程式會抽到同一批題目。

一共 67 題,分四個子集,數字分開報。正常案例通常佔多數,混在一起算,會把髒資料和刁鑽案例的失敗蓋掉。

子集 題數 真實/改寫 內容
正常格式 19 19/0 CAP 欄位齊全的官方電文,依類別與等級分層抽
髒資料 16 6/10 真實:摘要不到 20 字。改寫:全形數字、摘要截斷到 25 字、句中斷行、標題缺漏
刻意刁鑽 16 12/4 真實:已過期、同一條更新鏈的後續電文、解除電文。改寫:CAP status 改成 Test
像警報但不是 16 16/0 停水、例行水庫放流等官方等級是資訊的電文

「像警報但不是」這一組最容易被忽略:考卷裡沒有「正確答案是不推」的題目,就量不到資訊級被升級、或不該推卻推的錯誤。

樣本不夠的地方也照實標出來:存檔裡沒有欄位齊全的「氣象極重大」,交通類只有 2 則官方等級電文,地震海嘯類只有 4 則(地震報告走另一條流程)。在評測紀錄的類別細表裡,題數少於 3 的項目都標「樣本不足」。

每一題長這樣(節錄):

{
  "id": "negative-001",
  "subset": "negative",
  "group": "民生",
  "category": "停水",
  "source": "real",
  "input": {"title": "停水", "summary": "機電設備臨時故障", "sender": "台灣自來水公司"},
  "cap": {"severity": "Minor"},
  "expect_level": "info"
}

分級:同一份考卷跑兩種方式

  • A:正式流程。 照電文帶官方等級。有官方等級時不呼叫模型,所以 A 量的是對照表和程式規則。
  • B:拿掉官方等級。 只給標題和內文,讓模型依分級表判,跑 3 輪。這量的是「官方沒給等級時」模型補判的品質。模型在程式裡最高只能給到重大,所以正解是極重大、模型給重大的情況另列「架構上限」,不算漏報。

推播用正式的判斷函式離線跑,不連資料庫、不發送。

A 的結果:四個子集都是漏報 0、誤報 0;刻意刁鑽與像警報但不是共 32 題,推播違規 0;應推的 10 題全部有推。

B 一跑就看出問題:

  • 氣象署「大雷雨即時訊息」官方是重大,模型幾乎都判警戒;淹水警戒也一樣偏低。
  • 例行水庫放流官方是資訊,模型判警戒;停水也被判警戒。

原因在 Day 9 的分級表:表上沒有列「大雷雨即時訊息」,淹水只寫「紅色=重大」,還寫了「水庫放流=警戒」「整區停水=警戒」。模型照表判,表和官方的實際用法對不上。照官方等級的實際分布改了分級表後,同一份考卷的結果:

子集 題數 B 漏報/誤報/架構上限(改表前 → 改表後)
正常格式 19 24/0/9 → 0/2/9(57 次)
髒資料 16 18/3/0 → 1/0/0(48 次)
刻意刁鑽 16 39/0/3 → 0/0/3(48 次)
像警報但不是 16 0/24/0 → 0/0/0(48 次)

剩下的錯誤:一則水利題三輪中有一輪判低;一則強風電文明寫「黃色燈號」(正解警戒),三輪中兩輪判成重大。三輪結果一致的題數是 65/67。

這組數字要和正式環境的實際比例一起看:存檔裡有等級的 1,214 則電文中,由 AI 補判的只有 4 則(0.3%),其餘都是官方等級。而且 AI 補判的等級只在 App 裡顯示,不推播(Day 25)。所以 B 的錯誤影響的是少數電文的顯示顏色,不會讓推播漏掉或多發。

摘要:四條檢核,程式先查、評審後看

摘要沒有標準答案,所以拿 Day 8 定的四條當檢核規則:

檢核 怎麼查
1. 60 字左右 程式,70 字以內算過
2. 數字、地名完整 程式:摘要不得出現原文沒有的數字;電文內文 3 個縣市以內時都要保留
3. 不臆測 評審模型打 1–5 分,4 分以上算過
4. 語氣冷靜 評審打分,加上程式查驚嘆號

被測的是正式流程用的 gemini-3.1-flash-lite,評審用 gemini-3.1-pro-preview。評審的提示詞裡寫明每個分數的定義和例子,例如不臆測的 3 分是「有一處輕微推論,例如把原文沒寫的時間、範圍說得更具體」,2 分是「新增一項原文沒有的事實或建議」。

考卷是 17 則真實電文,都是摘要超過 60 字的;60 字以內的電文正式流程直接用原文,不呼叫模型。

檢核 修正前 修正後
1. 70 字以內 5/17(中位數 91 字) 12/17(中位數 60 字)
2a. 沒有新增數字 17/17 13/17
2b. 縣市完整(內文 3 個縣市以內的 8 則) 8/8 7/8
3. 不臆測 4 分以上 9/17 12/17
4. 語氣冷靜 17/17 17/17
四條全過 4/17 8/17

修正的是兩件事:提示詞明寫不超過 60 字;程式加上勸告句檢查,摘要出現原文沒有的勸告句就重寫一次,仍有就改用原文前段。

修正後新增數字的 4 則都是水庫放流:模型把一長串鄉鎮改寫成「等 11 鄉鎮市及 4 鄉鎮」。逐則核對,數目是對的,但原文沒有這兩個數字。程式規則照樣判不過,我們保留這個嚴格度:防災摘要裡的數字,應該都能在原文找到。縣市完整少的那 1 則,是一則降雨摘要漏列了宜蘭縣和屏東縣。

評測本身踩到的坑

比對原文要看電文的所有欄位。 4 則水庫放流摘要寫了「請下游民眾遠離河床」,只看說明欄會判成模型自己加的勸告句;但水利署電文的 <instruction> 欄本來就有「請沿岸附近民眾加強注意並遠離河床」。比對和評審都要拿到指示欄,正式流程的勸告句檢查也一樣。

評審要拿到和原文一樣多的資訊。 只給評審標題和內文、不給發布單位,它會把摘要裡的「中央氣象署」判成新增事實。

評審自己也會判錯。 有 2 則被評審判成臆測,人工核對後是評審錯:一則說模型加了「今日」,原文其實寫「時間為今日」;另一則說模型新增「雲林縣」,原文就寫「雲林縣斗六市」。這 2 則另有長度不過,所以四條全過的 8/17 不受影響。所以評審的分數拿來追蹤趨勢,判不過的題目一定要人工看過。

再用新電文驗一次

考卷和修正都用同一批電文,可能只是把規則調到剛好過這批題目。所以再用修正後才進來的新電文,照同樣規則出一份獨立的考卷。

這段期間只有強風、水庫放流和停水,沒有大雨、雷雨、淹水,分級只抽得出 19 題,摘要只有 6 則。這組只能檢查規則有沒有對新電文失準,不能取代完整考卷。

  • 分級: 正式流程漏報 0、誤報 0、推播違規 0。B 有 9 次誤報,全部來自「摘要截斷到 25 字」的改寫題:截斷後「(黃色燈號)」被切掉,模型只看到「強風」就判成重大。完整原文的強風題都判對。
  • 摘要: 四條全過 5/6。

沒過的那則是真錯誤。原文列了 12 個縣市,摘要寫成「桃園市至屏東縣」,等於多涵蓋了原文沒有的臺南市、高雄市、嘉義市,評審給 1 分。程式的縣市檢查只在電文內文 3 個縣市以內時套用,所以沒攔下;縣市多的電文被寫成「A 至 B」區間,是目前檢查的缺口,列為待修。

怎麼用

每次動到提示詞、分級表或換模型版本,前後各跑一次這兩張考卷,四個子集逐欄比對,不看總分。完整跑一輪,分級 3 輪加摘要評審,費用估計不到 0.5 美元。

今日小結

  • 分級的漏報與誤報代價不對稱:先守住「該推的不漏、不該推的不推」,再看誤報。
  • 考卷分正常格式、髒資料、刻意刁鑽、像警報但不是四個子集,數字分開報;沒有「像警報但不是」就量不出誤報。
  • 正式流程以官方等級為準,漏報與誤報都是 0;拿掉官方等級後,模型的偏差來自分級表和官方用法不一致,改表後大幅下降。
  • 摘要四條全過從 4/17 到 8/17;長度中位數從 91 字降到 60 字。
  • 評測也會出錯:比對要看電文所有欄位、評審要拿到完整原文、評審的判斷要人工抽查。
  • 用新進電文再驗一次,抓到「縣市清單壓成區間」的真錯誤。

明天 Day 28:費用與資安。


上一篇
Day 26|三則警報,該合成一則通知嗎?讓 Gemini 當防災代理的界線
下一篇
Day 28|正式環境一個月約 3 美元:費用、監控與資安的實際做法
系列文
30 天用 Google AI 打造台灣防災速報 App 共 28 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言