故事從一句「不太順」開始
那天合作夥伴阿哲在改一個客戶的網站(一間民宿),傳訊息來說:「改的時候不太順,還跳了一個 error 1。」
就這樣。沒有 stack trace、沒有截圖,就「error 1」三個字。
換作以前,我大概會開始問東問西。這次我直接跟我的 AT(AI 協作者,我都這樣叫它)說:「阿哲改那個站不順,看到 error 1,幫我看看 logs 發生什麼。」
然後我去倒了杯咖啡。
回來發現:不是一個 bug,是三個
AI 翻完聊天紀錄,給我的結論大概是這樣:
- 阿哲看到的那個紅色 error,是 AI 在改一段多行的多語言文字時,比對字串失敗了——它找的字被壓成一行,但檔案裡其實是跨行的,對不上。
- 但更妙的是:AI 當下其實自己重試、把東西改好了。阿哲看到紅字以為失敗,實際上內容是對的。一場虛驚。
- 而且翻 logs 的時候,還順手挖出另一個完全沒人發現的 crash——同一個工具在某種輸入下會直接爆掉。
我當下的反應是:「等等,所以我們有幾個 bug 是躺在 log 裡沒人知道的?」
一查,過去七天:八個錯誤,五個是同一類,全部沒人回報過。 我只知道其中一個,還是因為阿哲剛好開口。
插曲:AI 修 bug,差點製造一個更大的 bug
修第一個 bug 的時候,發生了一件我覺得很值得寫下來的事。
AI 寫了個修法,讓字串比對「寬鬆一點」,這樣多行文字也能對上。聽起來很合理。
但我這套工作流裡有個習慣:任何要動到客戶網站的改動,都要先過一個專門找碴的 reviewer(critic)。 它的工作就是用最壞的惡意去挑毛病。
結果 critic 一抓就抓到:這個「寬鬆比對」在某些情況下,會把客戶文字中間切斷——把 World 改成 Xld 那種——而且還會回報「成功」。
換句話說:AI 為了修一個讓客戶虛驚的 bug,差點寫出一個真的會默默改壞客戶內容的 bug。
如果沒有那道 critic 關卡,這東西就上線了。我們會把一個「看起來嚇人但其實沒事」的 bug,換成一個「看起來沒事但真的有事」的 bug。這買賣太虧了。
(AI 第二版修對了。但這件事我記了一筆——後面會用到。)
「不如每天自動掃?」
bug 修完,我冒出一個念頭:既然 log 裡躺著這些沒人發現的錯誤,何不每天自動掃一次,有問題就通知我?
AI 很快做了個排程任務:每天早上掃過去一天的聊天紀錄,把工具出錯的紀錄抓出來、分類、然後開一個 GitHub issue 給我。
我看了一眼它寫的「處理指引」,然後踩了煞車。
我和 AI 為了一段「處理指引」分了岔
AI 寫的指引,第一步是這樣的:
發現錯誤時,先確認受影響的客戶內容是否正確;如果沒改成功,手動幫客戶補上,或請客戶重試。
讀起來很貼心對吧?以客戶為先,出事先救火。
但我看著看著,覺得不對勁。我跟它說:
「我要的不是這個。我要修的是 AI 自己的邏輯 bug、是讓這個 AI 變得更好——不是去直接幫客戶補。」
這是整件事我覺得最值得分享的轉折,所以容我把話講清楚。
一個「發現問題就去幫客戶手動補」的系統,本質上是在訓練我自己變成客服。每天掃到錯,每天手動擦屁股。這有三個問題:
- 治標不治本。 客戶 A 的文字補好了,客戶 B、C、D 還是會踩到同一個 bug,因為 AI 的邏輯沒變。
- 不可規模化。 十個客戶我還能擦,一百個呢?
- 它會掩蓋根因。 每次手動補好,那個「成功」的假象就讓真正的 bug 多躺一天。
我要的剛好相反:每一個錯誤,都是「這個 AI 在這類請求上還不夠強」的訊號。 工具該做的,是把這個訊號攤開來,讓我去修 AI 的邏輯——讓它下次自己就能處理對。
掃描負責發現;修復永遠走「規劃 → 實作 → critic 審查」那條線。它只開 issue,絕對不自己動手改 code。
為什麼這條紅線這麼硬?還記得前面那個插曲嗎——AI 第一版的修法,自己會把客戶文字改壞。如果是「掃到 → 自動修 → 自動上線」,那個會切壞字的版本就直接進 production 了。 發現可以自動化,但「怎麼修、修得對不對」這件事,必須有人(和一個專門找碴的 reviewer)守著。
AI 聽懂了,把指引改成:
每一個錯誤,都是 AI 沒處理好的一類請求。目標是修我們的程式邏輯,讓 AI 下次處理對——這是平台的自我進化迴圈,不是客服佇列。我們不手動改客戶網站去掩蓋 AI 的錯,我們修 AI。
同一件工具,差一個方向,意義完全不同。
那麼,我到底做了什麼?
回頭看這一天:三個 bug 修掉、一個自動監控上線、一條紅線立好。
但程式碼,幾乎都不是我寫的。 查 log、寫修法、做排程、寫測試——AI 做的。
我做的是什麼?
- 我決定「去查 log」,而不是回去問阿哲一堆問題。
- 我在 critic 擋下那個會切壞字的修法時,選擇相信那道關卡,而不是嫌它囉嗦。
- 我在 AI 想當濫好人時,踩了煞車說:「方向錯了,我們是要練強自己,不是去擦屁股。」
跟 AI 協作久了我越來越確定一件事:AI 負責「勤勞」,我負責「往哪勤勞」。 它的執行力遠超過我,但「該往哪個方向努力、哪條線不能越」——那是價值判斷,是我的工作。
結尾:當然,我自己也出了幾包
為了不顯得我這天多英明,誠實招一下:
- 我其實一開始也搞錯過方向——是 AI 把「幫客戶補」寫出來,我才驚覺「咦這不是我要的」,然後才想清楚。紅線不是我天生就有,是被一段爛指引逼出來的。
- 過程中我還叫 AI 驗證一個腳本,結果它不小心對真的系統開了兩個垃圾 issue(後來清掉了)。
- 同樣的「只測了改動的部分、忘了跑完整檢查」的錯,一天內犯了兩次。
所以這套「有人踩煞車、有 reviewer 找碴」的機制,踩的從來不只是 AI 的煞車——也是我的。
而這,大概就是和 AI 一起工作最舒服的狀態:我們都會出包,但我們互相是對方的 critic。