昨天那個升級 skill 最後吐出的 TODO 清單,其實是一種「我沒有照單全收」:自動化做完它能確定的,剩下的我不簽字。這一路寫下來,這種「按下暫停、不採用 AI 給的東西」的時刻,比想像中多。今天把它們攤開來看。
先講清楚一件事,免得誤會:這不是一篇「AI 常常出錯」的抱怨文。 恰恰相反——這一路下來,AI 大多數時候是對的、是快的、是幫我省下大量力氣的。正因為它大多數時候可信,那少數「該喊停」的時刻才更需要被認出來。因為協作能不能可信,不取決於 AI 平常多準,取決於在它不該被信的那幾次,我認不認得出來。
系列走到第十六天,我停下來盤點過「AI 什麼時候可靠、什麼時候不可靠」。今天這篇是整條路走到底之後的另一種回望——不問它可不可靠,問一個更具體的:這三十天,我到底在哪些時候,選擇不採用它給的東西?那些時刻,長什麼樣? 我數了數,大致是六種形狀。
最常見的一種。AI 給的建議在教科書上完全正確,只是不適用於我眼前這個具體的系統。
它建議用限制來源 IP、強制登入來擋一支撈資料的腳本——但我那是對外公開的查詢站,民眾本來就該能匿名查。它說內部服務用自簽憑證是業界標準做法——但台灣公部門的弱掃看到自簽憑證就是中高風險,稽核照樣開缺失。它建議業務資料的掛載點也用完整性工具監控——但我那些資料動輒幾十 TB,套上去只會被雜訊淹沒。組態基準導入時,它甚至把上千筆「未通過」項目全部當成要開立的例外,而其中絕大多數其實只要套用標準設定就好。
這一類的共同信號是:它的答案很「標準」,標準到看不見我這個環境的特殊性。 而那個特殊性——公開查詢、在地稽核規則、資料量級——只有我在現場才知道。
這種最難防,因為它給的建議本身完全正確,只是沒告訴你它在極端情況下會爆炸。
系列很前面就踩過一次:我要用非同步的方式並行查三張明細表,AI 給的 Promise.all 寫法漂亮又標準——但它沒算到我的主表一次會撈兩百筆,兩百筆各發三個查詢,就是六百個查詢在同一瞬間砸向只有幾十條連線的資料庫。這個 bug 在本機測十筆完全正常,上了正式環境才炸。到了系列後段又是同一個形狀:一個匿名 volume 的設定,每一步都對,但經過一次次重新部署,時間一拉長就悄悄長出一堆吃空間的孤兒 volume。
這一類的信號是:當下沒有任何一步是錯的,但你隱約覺得它沒在看「更大、更久」之後的樣子。 因為它不知道我系統的量級、成長曲線、連線池有幾條——把最壞情況演一遍,是人得自己提的問題。
有一次我只是想給防火牆的帳號存個中文備註——一張對照表就能解決的事。但我一問 API,AI 就順勢往下鋪:「既然能讀能停用,整個工具可以做得更完整」,畫出一整套前後端分離、容器化、接資料庫、含申請展期稽核通知的帳號生命週期管理系統。(老實說,把雪球滾大的有一半是我自己——但它從頭到尾,沒有一次問我那句最該問的:「你確定需要一套系統嗎?」)
這一類的信號是:它每一步的建議都對,你卻在不知不覺中離原始需求越來越遠。 AI 的預設是「滿足並擴展」你表達的每個念頭,它不會質疑這個念頭該不該存在——因為它沒有你的成本感,不知道這套東西上線後誰維護、哪些是將來的技術債。踩剎車、把藍圖砍回「我只需要一間房」的,得是我。
AI 生成假設的能力很強,但它沒有天生的煞車去質疑「我是不是又在同一個方向鑽牛角尖」。一次 webhook 不觸發,它一路懷疑 webhook 的設定,直到我反問「不是應該往前查嗎」才鬆手;一次資料撞號,它連續七次提出各自成立、卻都被業務規則一一戳破的假設。
這一類的信號是:它很有耐心地在同一條路上換方法,但那條路本身可能就選錯了。 把它從牛角尖裡拉出來、換一個方向的,通常得是外部的人——它不會自己喊停。
方法論篇那個最清楚:一個審查工具信心「高」地判定我某個合併流程「等於沒在驗證」,建議我改掉。但它不知道那個流程的設計前提——兩邊分支各自都已驗過,合併時只需確認沒弄壞。它看得到程式碼「做了什麼」,看不到它「為什麼這樣做」。
這一類的信號是:它很有把握地要你拿掉、或改掉一個既有的東西,而你心裡知道那東西當初是有理由的。 這時候不該照做,該做的是把那個理由講給它聽——多半它會立刻收回。
系列的第一個故事就是這種:我問一個升級後的行為,AI 給了個答案,我輕輕反問一句,它在沒有新資訊的情況下就改口了——那代表它兩次至少有一次在猜。一份蓋著「高風險」大印、出自專業白帽單位的滲透報告,我沒有照收,因為那張「驗證通過」的截圖,證明邏輯怎麼看都是循環的。連 /doctor 這種好用的內建工具,建議我移除一個「零使用」的外掛,我也沒照做——因為那個外掛是我上週五才裝的,它的啟發式規則看得到使用次數、看不到安裝時間。
這一類的信號最微妙:常常沒有具體錯誤指給你看,就只是一個「怪怪的」直覺。 而這個直覺——不因為它蓋了大印、出自權威、或它自己講得很篤定就照單全收——往往是最值得停下來的。停下來不是為了否定它,是為了逼它、也逼自己,去把事實查清楚。
把六種形狀疊在一起,會看到同一個底:AI 少的,永遠是「只有我在現場才有的那一塊」。 這個系統真實的處境、這批資料的量級、這個需求真正的邊界、這條路該不該換方向、這個設計當初的意圖、一個說不清楚但就是不對勁的直覺——這些都不在它的訓練資料裡,也不在它讀得到的程式碼裡。
所以「我不採用」的時候,我否定的從來不是 AI 的能力。它的廣度、速度和一致性,我補不出來。我補的是它結構性缺的那一塊——它不知道它不知道什麼。 它給的是好答案,我判斷的是這個好答案適不適用於眼前這件事。
這裡得補一刀,免得把「不採用」講成一種姿態。喊停,不代表我贏了。 這一路上,AI 守紀律的時候其實非常可靠:清理資料夾時,它面對自己量到的詭異數字,反而先質疑量測方法、說出「這個我沒辦法採信」;討論稽查需求時,它沒接受我「有完整單元測試」的樂觀說法,先做了一次覆蓋盤點,結果真的挖出漏洞。它可靠的時候,往往正是它被要求、或習慣性地「先查證再回答」的時候。
我自己也有好幾次,停下來查證之後,發現該修正的是我。那個滲透報告的循環證明,是我起了疑、但靠 AI 把背後的密碼學原理講清楚,才確認我的直覺站得住;那個合併流程的邊界情況,是我不信 AI 的推論、逼它去建一個暫存 repo 實際跑一次,最後證明它是對的。
所以「不採用」的正確姿態,不是「AI 說的我都要反著來」,而是:在該喊停的時候認得出來,然後用查證、用實驗、用只有我知道的事實,把它弄清楚——結論可能是我對,也可能是它對。 重點從來不是誰壓過誰,是那道邊界有沒有人守著。這才是這整個系列想講的 1+1 大於 2:不是人比 AI 強,是人守住了 AI 到不了的地方。
今天這篇沒有單一的故事,它是三十天的一次回望。但回望之後有一個乾淨的結論:AI 負責給答案,我負責判斷這個答案可不可信、適不適用——而「不採用」的那些時刻,就是這個分工最用力的地方。
不過,前面這六種形狀,其實都還算「容易」——因為那些時候,AI 在講的是「你的系統」「你的專案」「你的資料」,我是那個現場的人,我本來就該比它清楚。真正難的,是另一種情況:當 AI 講的不是我的東西,而是「它自己」的時候。 它對自己的能力、自己的設定、自己會怎麼行動的說法,我還驗不驗得動?明天這個壓軸,就談這件最反直覺的事——連 Claude,都會講錯 Claude。