我裁掉了兩個 AI 檢查員,留下的那個能者過勞
我給每個自動化機制都設觀察期,到期要交成績單。最近剛好有三個 AI 檢查員在同一段時間到期。
它們都在盯 AI 自己寫出的回答,只是職位不同。先講一個後面會一直用到的設定:檢查員是職位,職位底下坐著一個負責判斷的模型,模型可以換。審查結果很乾脆:兩張解僱單,一張留用通知。留用通知後面還補了一行,職務加重。
我原本以為這類檢查員夠準就能活。帳本翻完才發現,判得準不準只是第一關;每次出勤要花多少成本、被放在哪個責任位置(擺在哪一關、開火條件多寬),一樣會決定去留。三個條件要一起對上,它才找得到生態位:像物種一樣,活下來不是因為強,是因為環境剛好有它的位置。
第一張解僱單:選型測試 9/10,上線 12.8%
第一個是白話偵測器,職位是逐則檢查:每一則回答後面都出勤一次,盯回答有沒有把話講得夠白。
它在真實流量上開火 47 次;開火的意思是它認定這則回答有問題、記進帳本。人工逐筆核對後,只有 6 次抓對,其餘 41 次都是誤報。精確率是 6/47,也就是 12.8%:開火的次數裡,真的打對的比例。這支還在只記帳不出聲的觀察模式,但養它就是為了有一天讓它開口提醒;照這個比例,真讓它上工,47 次提醒裡會有 41 次白白打斷工作。當場裁撤,沒什麼好留戀的。
尷尬的是,它的判官模型在選型測試裡明明拿到 9/10:十件有標準答案的案例,判對九件。
這兩個數字不能混在一起看。9/10 是事先整理好的選型測試成績,12.8% 是上線後的真實流量精確率。模型沒有突然變笨,差的是測試任務與真實流量能不能對上。這次測試集比現場仁慈太多,近滿分的面試成績,入職後照樣天天誤報。
所以在 A 任務挑出來的模型,搬到 B 任務不一定能用。同一顆模型(白話選型的榜首)換到證據任務時,召回率只剩 47%;召回率量的是另一個方向:真的出事時,它抓到多少。同一顆腦袋換一張考卷,就從榜首掉到半數都抓不到。而下一位檢查員上線用的判官,正是它。
第二張解僱單:抓對 75%,還是得離開第一線
第二個是證據偵測器,同樣逐則出勤,檢查回答裡的完成宣告、數字與機制說明有沒有附出處。
它的成績好多了:開火 60 次,45 次是真的,真實流量精確率是 75%。這已經有判斷力,但我還是把它撤出第一線。
原因很現實。逐則檢查代表每回合都要付一次判官成本;而一旦讓它升級開口提醒,還可以預期兩種副作用:AI 為了不被抓而塞滿細節的防衛性寫作,以及跟白話偵測器的正面衝突,一個叫它少講一點,一個叫它每句多附出處。這兩種副作用是設計層的推演;兩支同期都在運作,但我手上沒有它們對同一批回答同時開火的對照資料,不硬寫成已經量到的結果。
解僱單裁掉的是「逐則監工」這個職位,概念沒死:它轉任查帳員,改成每七日離線抽驗一次。判斷力夠用,可是逐則出勤的累積成本太高、位置不對,那就換位置,不必硬塞。順帶交代口徑:這裡的成本是出勤頻率的相對量感,每回合一次對上每七天一次,我手上沒有金額數字。
另外,75% 也不能解讀成它抓到了四分之三的所有違規。它的判官在一份 41 件的離線標註資料集(30 件實際違規、11 件不該開火的反例)上,召回率只有 47%,對,就是上一節那顆換考卷的榜首。這是測試集口徑、不是線上量的,但方向足夠說:帳本裡看到的違規只是下限。75% 只回答「開槍時多常打對」;召回率則回答另一題:真的出事時,它抓到多少。別混著看。
插曲:更早那次,我量錯了東西
在這三個同期檢查員之前,我還跑過一個格式稽核機制。它不在這次的審查名單上,但它的死法影響了我後來怎麼審。它不管內容,只默默記帳:看回答有沒有照規定交出三行驗證收據,固定格式的「預期/實際/是否相符」。
六週累積 4,688 筆紀錄,其中 1,153 個回合出現需要驗證的動作;這些回合裡照格式交收據的只有 2 筆,0.2%。光看這個數字,很容易得出「AI 根本沒驗證」的結論。
抽樣回看後卻發現,驗證常常有做,只是換了說法,或到後面的回合才補上。0.2% 量到的是格式遵守率這個代理指標,沒辦法直接代表驗證有沒有發生。
它判得很精確,回答的卻是沒那麼重要的問題。量得再勤也救不了方向錯,最後只能退役。這次退役只是掛上停用旗標,設定檔裡的掛載還留著;前面兩支被裁的,設定檔裡的掛載是真的清掉了。至於證據偵測器現在的抽驗工作,是另開的一條新通道在接手,不是原來那支程式。
召回率 100% 的判官,可能只是看到誰都開槍
兩支逐則偵測器共用同一批候選判官,剛好留下一組很好玩的對照。
白話榜首那顆到了證據任務只抓到 47%。同一份標註資料集上,另一顆模型的召回率是 100%,看起來一件都沒漏;但那 11 件不該開火的反例,它只判對 1 件。
它的 100% 召回比較像看到人就開槍,當然不會漏掉壞人,路人也一起倒楣。麻煩的是,這種打法讓它的 F1 綜合分數反而是全場最高;只看綜合分數會被安慰到,看反例判對率才誠實。
「要 Sonnet 級判官才夠」這個說法也一起收攤了。支持它的舊證據,是一次只有 7 件樣本、全數答對的小測試;新資料又不支持它:Sonnet 直接考白話任務只拿 5/7(同樣是小考卷,跟 9/10 那份不是同一份、不能同尺比),在證據任務的召回率 27%,五個候選裡墊底。舊證據薄、新證據方向相反,足以撤回這個結論。模型等級可以是候選條件,不能代替任務實測。
活下來的那個,本來就只管真的出事
唯一留任的是完成宣告判官,也是我在第二十一篇〈雲端太遠,hook 等不了:低延遲給了本地小模型就業機會〉寫過的那個職位。它跟證據偵測器管的事有點像但不同:證據偵測器管「說了話沒附出處」,它只管一種最貴的情況:說做完了,但這回合出過的錯沒交代。結構上它是程式規則加模型的兩層,程式先比對紀錄,模型只做最後一小步的語意判斷。
它的開火條件本來就是兩件事同時成立才響:AI 宣稱工作完成,而且這一回合出現過的錯誤收據(工具執行出錯時留下的紀錄)沒有被交代。第一個觀察窗一週開火 19 次,多數仍是低價值提醒。單看這張成績單其實也難看;差別在它的問題出在條件還不夠窄,有得修。
修正就是在原條件上再收兩圈:已經揭露過的錯誤就靜默;每張錯誤收據都要抓出具體錨點(檔名、行號這類可以指認的位置)逐張對帳。
修正上線後同樣約一週的新觀察窗,只開火 3 次,3 次都是真的。這個樣本只夠說暫時沒有復發跡象,還不夠宣稱誤報率會一直這麼低。帳本又只記開火,該靜默時到底有沒有乖乖靜默,也無法從這 3 次證明。
留用通知的附帶條款:工作更多了
它能留下來,靠的是程式把責任切得更細,不是模型突然變聰明。條件收窄之後,它也不再只丟一句「你有錯誤沒處理」。它多了三項職務:替每張錯誤收據分類、從工具輸入抽出具體錨點、要求後續回合逐張填上「已修/不影響/未修」。如果填已修,還要附成功證據。
有一次 AI 批次改檔後宣稱完成,但工具的執行紀錄顯示找到兩處、只取代了一處。判官擋下這句宣稱,逐張對帳逼出補驗:要改的那行確認已改好,另一行確認沒有被誤改。它抓到的未必是災難,但把「說完成」變成了「驗過再說完成」。
以前它只負責察覺「這裡怪怪的」,現在還要知道是哪一張收據、哪個位置、後來怎麼處理。留任條件就是工作加重,能者過勞大概就是這樣。
三個檢查員最後各自落到不同位置。判斷力不夠的直接裁撤;判斷力合格但逐則出勤太貴的,撤出第一線、轉去離線抽驗;留在第一線的那個,靠更窄的開火條件壓低誤報,再扛下更細的對帳工作。
只是那位查帳員還沒交出第一份週報:新通道還沒跑完第一個七日週期,目前驗過的只有程式邏輯與測試,還沒有一次自然到期的正式抽驗報告。
所以這份裁員名單先停在這裡。精確率、出勤成本、責任位置一起對上生態位,是這批帳本撐得起的結論,不是終局。等查帳員真的交出週報,搞不好下一張留用通知又要重寫。