返回文章列表
我教 AI 別當濫好人:一次差點養出「客服機器人」的故事
AI

我教 AI 別當濫好人:一次差點養出「客服機器人」的故事

客戶回報一個小 error,結果挖出三個 bug、做了一個自動監控,還順便讓我想通一件事——跟 AI 協作,我最大的價值不是打字,是踩煞車。

故事從一句「不太順」開始

那天合作夥伴阿哲在改一個客戶的網站(一間民宿),傳訊息來說:「改的時候不太順,還跳了一個 error 1。」

就這樣。沒有 stack trace、沒有截圖,就「error 1」三個字。

換作以前,我大概會開始問東問西。這次我直接跟我的 AT(AI 協作者,我都這樣叫它)說:「阿哲改那個站不順,看到 error 1,幫我看看 logs 發生什麼。」

然後我去倒了杯咖啡。

回來發現:不是一個 bug,是三個

AI 翻完聊天紀錄,給我的結論大概是這樣:

  1. 阿哲看到的那個紅色 error,是 AI 在改一段多行的多語言文字時,比對字串失敗了——它找的字被壓成一行,但檔案裡其實是跨行的,對不上。
  2. 但更妙的是:AI 當下其實自己重試、把東西改好了。阿哲看到紅字以為失敗,實際上內容是對的。一場虛驚。
  3. 而且翻 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。