用 AI 工作一陣子的人,大概都遇過這件事:同一個錯,你講過了,規則也請它記下來了,過幾天它又犯一次。

而且我不是沒有防:規則寫進了它的記憶檔、違規有計數器、還有每月的定期檢視,該有的機制都在。但七月底,我看著我的 AI 助理第三次犯下同一個錯(最後兩次只隔一天),才認真面對一個事實:「記得」跟「會做」是兩回事。而更意外的是,後來的調查發現,問題甚至不在它不記得,是我們整套「記錯誤」的系統,量尺本身壞掉了。

這篇想分享的,就是我們最後長出來的一套「AI 自我糾錯系統」的設計,以及中間最有趣的一段:我讓 AI 自己調查自己,還特別交代它「不要相信寫交班單的那個 AI」

事情是怎麼爆開的

這陣子我陸續把一些自己做的工具開源(工具箱總整理裡的那些)。發布開源軟體有一套禮儀:改了什麼要寫進更新紀錄(CHANGELOG)、打版本標籤(tag)、在 GitHub 上建立正式的發布頁(release)。這些規則早就寫在 Claude 的記憶檔裡。

七月底某天,我點開一個剛發布新版的 repo,首頁看起來什麼都沒有。我第一反應是「你沒寫 CHANGELOG」。它查了之後回報:CHANGELOG 其實寫了,tag 也打了,漏的是最後一步「建立 release」,而那恰好是訪客唯一看得到的一步。回頭一查,前兩個版本也都一樣。

隔天我請它把我全部十三個公開 repo 掃一遍,結果挖出十五個同樣的缺口。更妙的是,就在稽核到一半的時候,它又犯了第三次同型的錯。規則就寫在它的記憶裡,它也讀得到,然後照樣犯。

關鍵的一問:「你以後真的會用嗎?」

它的第一個提案很自然:寫一支腳本,把正確的發版流程整個包起來。

我問了一句:「你以後會固定呼叫這支腳本嗎?」

它想了一下,誠實地說:不會。腳本跟記憶檔的失效模式一模一樣,都要它先「想起來」才有用。這個答案讓我們改變了做法:與其多一個要記得的東西,不如加一道攔截(hook,上手系列第二篇講過的關卡概念):只要它想手動跑發版指令,動作會在當下直接被擋下來,只剩包好的正確流程能走。從「請你記得」變成「你想錯也錯不了」。

讓它調查自己,但不准相信自己

前面說過,揪錯的零件一直都在。所以問題比「沒有機制」更刁鑽:零件都在,錯還是溜過去了,到底卡在哪?

這裡我們用了一個我很喜歡的設計。當天犯錯的那個 AI session 把來龍去脈寫成一份調查交班單,但裡面明白寫著一條:

交班單裡的自我迴避條款

「不要把我的假設當成計畫——這份文件是犯錯者本人寫的,幾乎必然被它的立場影響。請先獨立驗證診斷,再決定要不要建任何東西。」

接著換一個全新的 session 接手調查,手上只有可以重跑的驗證指令,沒有前一位的結論。

做過品質改善的人應該覺得眼熟:根本原因分析(root cause analysis)的調查,本來就不該由事件當事人自己主導。當局者迷這件事,對 AI 一樣成立。

調查結果:推翻了兩個前提

獨立調查翻出來的東西,跟交班單猜的不一樣。

第一,AI 並沒有隱瞞錯誤。我原本合理懷疑:違規次數是它自己記的,它會不會少記?結果翻遍紀錄,低報只有零星幾筆,而且是「自首了但記錯地方」。其中一個規則檔裡,它老老實實記了十二次違規,好幾次我根本沒發現。誠實度不是問題。

第二,問題出在量測層。幾個具體的發現:

  • 計數無法歸屬:違規次數記在「檔案」上,但一個檔案裡合併了十幾條規則。帳面上的「違規 4 次」,追不回是哪一條規則的 4 次,這個數字沒有行動意義。
  • 偵測器本身有 bug:負責從歷史對話裡撈「使用者糾正過什麼」的程式,寫死了只看最近二十筆,而且漏看一整類訊息格式。回頭驗證時發現,最關鍵的那筆證據,它從結構上就不可能抓到
  • 記錯帳本:有三筆真正的違規,被寫進了另一本記「工具摩擦」的帳,正好躲過所有檢查。
  • 還有一個反轉:交班單斷言「這些計數完全沒有版本紀錄,無從稽核」。錯了——記憶目錄其實一直有自己的 git 版本庫,一千多筆自動存檔,稽核軌跡從頭到尾都在,只是被上層設定蓋住,連 AI 自己都不知道

換句話說:這個系統不缺零件,缺的是接線。計數器沒有人讀、偵測器壞著、帳本記錯棚。在量尺壞掉的情況下加更多自動化,只是把錯的數字算得更快而已。所以後面的修法幾乎沒有新建什麼大東西,都是把既有的零件接起來。

最後的設計:四條原則

修完之後,整套系統收斂成四條原則。它們不是 AI 專用的,你會發現每一條在醫院的品質管理裡都有對應物。

一、錯誤要記成「可歸屬的事件」,不是一個數字。每次違規記一行:日期+哪一條規則+一句事實。計數是用數的,不是用手改的。(對應:異常事件通報寫事件經過,不是只在統計表上加一。)

二、同一條規則違反兩次以上,就要問「能不能寫成程式硬擋」。每月檢視時,系統會自動列出「違反兩次以上、而且還沒有程式在擋」的規則清單,逼出一個決定:做成攔截、或明確標記「這條只能靠判斷」。不允許無限期地「下次注意」。(對應:防呆設計。病人安全的介入效果階層裡,「教育與提醒」效果墊底、「強制功能(forcing function)」最強:與其要求小心,不如讓錯誤做不出來。)

三、稽核要「乾淨時安靜、壞掉時大聲」。現在每週有一支程式自動掃過全部公開 repo:全部乾淨就只默默留一行紀錄;有缺口、或者稽核本身掛掉,才會推播到我手機。零雜訊,警報才有意義。順帶一提,「稽核程式自己壞掉也要大聲」這條很重要:一個安靜地死掉的警報系統,比沒有警報更危險

四、規則升級成程式的同時,把規則的文字刪掉。某條規則一旦有程式在硬擋,記憶檔裡那一大段描述就只留一行指標。不然規則檔越寫越長,AI 每次能認真讀完的比例就越低(上手系列第三篇講過規則要定期刪,這裡是同一件事的強制版)。規則的數量本身,就是規則失效的原因之一。

反思

整理完才發現,這套東西我們在醫院早就熟到不能再熟:異常事件通報、根本原因分析、防呆、獨立稽核。差別只是對象從人換成了 AI。

但有一個地方 AI 比人好用:對人,我們最多只能改流程、貼提醒;對 AI,你真的可以把「下次注意」改寫成「下次做不到」。這次整套修下來,最有感的不是哪個技術環節,而是那句「你以後真的會用嗎」:很多我們以為的解法,其實只是把「要記得的事」換個地方放。這個問題拿來問自己的工作流程,一樣鋒利。

可以帶走的:交班單模板

如果你也想讓自己的 AI 調查某個重複發生的問題,可以直接把下面這段餵給它(這就是我們實際用的格式的濃縮版):

交班單規格(直接複製給你的 AI)

請把這個問題寫成一份調查交班單,交給下一個獨立的 session 處理,要求:

  1. 事實與假設分開寫:發生了什麼(含日期)是一區,你猜為什麼是另一區。
  2. 明寫一條:「本文作者是當事者,假設不可直接採信;接手者必須先獨立驗證診斷,再決定要不要動手。」
  3. 附上可以直接重跑的驗證指令,讓接手者能自己檢查每一個主張。
  4. 列出接手者必須尊重的限制條件(時間、資源、已知的地雷)。
  5. 允許的結論包含「什麼都不用建,現狀就是對的」。

也歡迎分享你們是怎麼讓 AI(或自己)不再重複犯同一個錯的,我很想收集大家的做法~