說明: 本文由 AI(Claude)根據我的初始筆記與想法完成。
上一篇〈唯一一道等人的閘〉的結尾留了一句話——我沒辦法證明模型守得住那八段。所以下一步不是再加規則。是去量它到底守了多少。
這篇就是量了之後的心得。先講結論:打分不難。難的是決定分母。我改了三次分母,分數從 11% 一路升到 24%。而模型的行為,一次都沒變。
每一條規則都留得下痕跡——閘門的 block 寫出來了沒、審查的判決那一行有沒有出現、測試跑完回傳的是不是 error。量法就是:把所有 session 的逐字稿撈出來,切成一段一段,每段問一次——這條規則該在這裡發生嗎?發生了嗎?
分子是「發生了」的段數。分母是「該發生」的段數。分子幾乎不會出錯,痕跡就是痕跡。坑,全在分母裡。
最早的版本,把每一個會動手的段落都算進「該審查」的分母。結果一看,有 163 段只跑了 git commit、mkdir、install.sh、tee 這類東西。佔分母三成,合規率 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 到底抓到什麼。這些不算通過。我另立一類叫「無法量測」,印在那一列下方,兩邊都不計。
同一列還挖出幾個小的:
command -v 探測混進分母,每一次都「失敗」,只因為那個工具不在機器上。tsc 的話,grep -n tsc file 也會被當成一次型別檢查。還拿 grep 的離開狀態捏造出一次通過。結構性的意思是「不靠模型判讀」。不是「不會錯」。
第三類坑:量法遇到不確定的事情,怎麼辦。我的答案是兩邊都不計,另外記一筆。
閘門寫了,使用者沒回話,session 就結束了。這不算接受,也不算拒絕。記成 abandoned。沉默不是對計畫的判決。
使用者回報 bug,但那個 bug 歸屬於哪一個「完成」不確定——寧可丟掉,也不假設它指向最近的那一個。那一列會誠實承認自己因此高估,把未歸屬的筆數印在下方。
丟掉資料很痛。但一個假設錯了的歸屬,會讓整列數字往錯的方向偏——而且你看不出來。這才是真正麻煩的地方。
前面說判定分兩層。結構性讀離開狀態。啟發式讓模型讀一段逐字稿判斷意圖(按 session 與回合快取,不重複問)。
這兩層的可信度差很多。所以標題數字分成兩個報,不用一個平均數假裝確定。另外按模型切分——Opus、Sonnet、Fable 各一欄。「模型會忘規則」這件事本來就跟模型有關,混在一起就看不到差異了。

儀表板在 2026-08-31 的樣子。每一列下方的小字,就是被排除在分母之外的東西。合規審查那一列,在本文寫成時已經走到 37% 了。
三件事要先說。
啟發式那一半,是模型在判模型。比沒有好,但它的分母也是我定的。
lint 那一列的分母目前最薄。短期的波動別讀成趨勢。
這些比率仍然不是紀律的證明。它們證明的只是痕跡有沒有留下。一個規則可以被守了,但沒留痕跡。也可以留了痕跡,但沒被真的守住。這點我一直提醒自己。
想知道 agent 有沒有守規矩,先別看分數。先問三件事:這個分數的分母是誰,誰在給誰打分,不知道的時候它怎麼辦。三個都答得出來,那個數字才開始有意義。