精選文章

讓 AI 交件前自己跑一次自檢:五個問題,和一條允許它寫「無」的規則

先說一件我聽到之後有點發涼的事。

AI 幫我寫了一個工具,用來更新某個線上頁面的內容。程式能跑、測試也過、回報寫著「已完成」。
問題是,那個工具在最正常的用法下,會靜默刪掉底下的子頁面。不會報錯,不會警告,log 上一片綠。

更麻煩的是,AI 當時已經在把這個工具推薦給其他 AI Agent 使用了。

最後攔下它的不是寫程式的那一方,是另一個要用它的 agent,在按下執行之前自己多查了一步。

問題不在 AI 會出錯,在它不知道自己該檢查什麼

事後我想了很久,這件事真正的教訓不是「AI 不可靠」。
AI 當然會出錯,人也會。真正的問題是:它把「改完能跑」當成「做對了」,然後就收工了。

而這正好是人類工程師最常犯的同一個錯。差別在於,資深的人身上會有一份沒寫下來的檢查清單,
交件前會在腦子裡跑一遍:這真的解到問題了嗎?我驗到哪一步?會不會弄壞別的地方?誰在用這個?

AI 沒有那份清單。除非你給它。

那份清單長這樣

這段直接貼進你的 AI 助理的系統指令就能用(Claude Code 的 CLAUDE.md、
或任何工具的 custom instructions、system prompt 都可以)。
之後它每次做完開發、優化、修 bug 這類工作,會在回報後面自動附上自檢。

每次完成「開發/優化/解 bug」類任務,寫回報之前先跑以下自檢,
並把結果附在回報末尾,分成兩段:

## 第一段:對結果的 review(五問,逐問回答)

1. 原本要解的問題,真的解掉了嗎?
   對照「當初的需求」,不是對照「我做了什麼」。做完不等於做對。

2. 驗證了什麼、怎麼驗的、還有什麼【沒驗】?
   沒驗的明說,並區分驗證等級:單元測試過、真實資料跑過、上線驗過,
   這三件事完全不同。別讓「改完了」聽起來像「驗過了」。

3. 這次改動新引入了什麼風險?
   預設值安全嗎?有沒有破壞既有行為?
   失敗時會不會是「安靜的」(log 看起來成功、實際沒做到)?

4. 有沒有留下不一致?
   文件、註解、其他呼叫端、另一台機器、排程……
   凡是「改了 A 卻該連動沒連動的 B」都算。

5. 誰在用這個東西?他們知道改了嗎?
   使用方不是我,就要主動通知;通知內容寫「對方視角的用法變化」,
   不是「我做了什麼」。給自己的追蹤待辦不能替代給對方的通知。

## 第二段:還能怎麼優化

最多 2 到 3 條,每條具體可執行,並標「值不值得現在做」。
沒有值得改的就寫「無」,不要為了有產出而發明建議。

五個問題,各攔一種翻車

這五問不是隨便湊的,每一問都對應一種我真的遇過的狀況:

問題 攔的是什麼
1 假完成。程式跑起來了,但當初要解的問題還在
2 假驗證。「改完了」被聽成「驗過了」;單元測試全過,真跑第一輪就炸
3 危險預設與安靜失敗。正常用法就毀資料,或 log 漂亮但根本沒做到
4 半套改動。程式改了文件沒改,這台改了那台沒改
5 沉默升級。工具修好了,正在用的人渾然不知,繼續踩舊坑

第 5 問是後來才補上的。因為修好一個工具之後,我又忘了通知正在用它的人。
自己給自己開了追蹤待辦,卻沒發一則訊息給對方。這兩件事看起來像同一件,其實是兩件。

整份東西裡最重要的,是允許它寫「無」

AI 有很強的產出偏誤,也可以說是討好。你叫它「每次都給我優化建議」,
它就會每次都生出三條建議給你,哪怕這次真的沒什麼好改的。
於是那個欄位很快就變成一段每次都要滑過去的罐頭文字,你也就不看了。

明文允許它寫「無」,這個欄位才會從例行公事變回真訊號。

實測下來,它真的會寫「無」。而正因為它會寫「無」,
當它某次寫出三條建議的時候,那三條就值得你停下來認真看。

這是很反直覺的一件事:你要它少講一點,它講的話才有分量。

順序也是設計的一部分

最後一個容易被忽略的細節:這段 prompt 寫的是「寫回報之前先跑自檢」。

這個順序有意義。自檢跑在前面,回報的內容會被自檢的結果修正,
它會回頭改掉自己剛剛想寫的那句「已完成並驗證」。
反過來,先寫完結論再補一段自檢,那就只是在文件末尾貼一張免責聲明。

你今天就能做的

把上面那段複製進你的 AI 助理設定裡,就這樣。
不用改流程、不用裝東西,下一次它交件的時候你就會看到差別。

然後注意觀察一件事:第一次看到它在建議欄寫「無」的時候,
你會有點意外,接著你會開始相信它其他時候寫的東西。

用 AI 可以,被 AI 用母湯。

留言