avatar
蕭富云行動應用開發者 · Android & Flutter

分母才是難的那一半 — 怎麼量 agent 有沒有守規矩

2026-08-31 · 10 min read

說明: 本文由 AI(Claude)根據我的初始筆記與想法完成。

上一篇〈唯一一道等人的閘〉的結尾留了一句話:我沒辦法證明模型守得住那八段,所以下一步不是再加規則,而是去它到底守了多少。

這篇就是量了之後的心得。先講結論:打分不難,難的是決定分母。 我改了三次分母,分數從 11% 一路升到 24%,而模型的行為一次都沒變。

量法本身很樸素

每一條規則都有一個可以在逐字稿裡找到的痕跡:閘門的 block 寫出來了沒、審查的判決那一行有沒有出現、測試跑了之後回傳的是不是 error。所以量法就是——把所有 session 的逐字稿撈出來,切成一段一段,每段問一次「這條規則該在這裡發生嗎?發生了嗎?」

分子是「發生了」的段數,分母是「該發生」的段數。分子幾乎不會出錯,因為痕跡就是痕跡。所有的坑都在分母。

第一次改分母:把不是作品的段落拿掉

最早的版本把每一個會動手的段落都算進「該審查」的分母裡。結果一看,有 163 段裡面只跑了 git commitmkdirinstall.shtee 這類東西——它們佔分母的三成,合規率 1%。

當然是 1%。這些段落沒有作品可審,審查的規則本來就不該在這裡發生。把它們拿掉之後,合規率從 11% 變成 15%

第二次改分母:段落切錯了

拿掉雜訊之後還是有東西不對勁。390 個「欠審查」的段落裡有 58 個,判決那一行明明在段落裡,只是不在最後一次編輯之後。

追下去發現是段落的邊界切錯了。兩件相接的任務被折成同一段:第一件做完、審查了、判決寫了,接著第二件開始編輯,沒審查就結束。從那一整段來看,最後一次編輯之後沒有判決,所以判失分。

但這個讀數是整個反過來的:審查過的第一件被扣了分,沒審查的第二件躲在同一段裡,完全沒被計到。

改法是「判決一寫下,這一段就關掉」。之後合規率從 15% 變成 24%

三次分數上升,零次行為改變

把這三個數字排在一起:

分母的版本合規率模型行為
含純指令段落11%
拿掉純指令段落15%沒變
判決一寫下就關段24%還是沒變

每一次都是分母變得更真,不是紀律變得更好。這件事是整篇文章的骨:如果你看到一個「agent 合規率」的數字,先問它的分母是誰、什麼時候改過。 一個沒有分母歷史的分數,不能拿來跟上個月比。

別讓總結者替自己打分

第二類坑跟分母無關,跟「誰給誰打分」有關。

規則是這樣寫的:審查有發現就先修,修完才能寫完工報告,報告的最後一行寫 Compliance Review: PASS。這條規則本身沒錯。但如果量法去讀的是那一行,它只可能是 100%——因為寫那行的正是被審查的那個主線,而主線永遠會等到自己覺得過了才寫。

所以判決只能讀審查者自己的逐字稿:那個被派出去、唯讀、跟主線沒有共同記憶的 agent 到底說了什麼。主線的那一行是宣稱,審查者的紀錄才是證據。

同一個陷阱換了個樣子出現在閘門的接受率上。閘門停下來等人時,使用者是從幾個選項裡挑一個回答。如果「挑了一個」一律算成「接受了計畫」,那分母裡就有十分之一會結構性地卡在 100%,不管計畫寫得多爛。

結構性不等於確定性

我把判定分成兩層。結構性的判定只讀 tool_result 的 error 旗標,完全不解析輸出字串——所以它不會被格式改壞。聽起來很可靠。

然後上一篇那個坑回來了,這次帶著數字:

flutter analyze 2>&1 | tail -6

沒有 set -o pipefail,shell 回報的是 tail 的離開狀態。從逐字稿看,99% 被 pipe 過的 lint 執行都回報乾淨,不管 linter 抓到什麼。這些不能算通過。我把它們另立一類叫「無法量測」,印在那一列的下方,兩邊都不計。

同一列還挖出幾個小的:

結構性的意思是「不靠模型判讀」,不是「不會錯」。

不知道就別猜

第三類坑是:量法遇到它不確定的事情時,怎麼辦。我的答案是兩邊都不計,另外記一筆。

丟掉資料很痛,但一個假設錯了的歸屬,會讓整列的數字往錯的方向偏,而且你看不出來。

兩層信心,不要平均

前面說判定分兩層:結構性讀離開狀態,啟發式讓模型讀一段逐字稿判斷意圖(按 session 與回合快取,不重複問)。

這兩層的可信度差很多,所以標題數字分成兩個報,不用一個平均數假裝確定。另外按模型切分——Opus、Sonnet、Fable 各一欄——因為「模型會忘規則」這件事本來就跟模型有關,混在一起就看不到差異了。

合規率儀表板:標題數字、依模型切分的折線,以及每一列下方另計的放棄與未歸屬筆數

儀表板在 2026-08-31 的樣子。每一列下方的小字,就是被排除在分母之外的東西;合規審查那一列在本文寫成時已走到 37%。

誠實但書

三件事要先說:

一句話收尾

想知道 agent 有沒有守規矩,先別看分數。先問三件事:這個分數的分母是誰、誰在給誰打分、不知道的時候它怎麼辦。三個問題都答得出來,那個數字才開始有意義。