我們的應用程式中仍有大量使用 jQuery(別吵了),而我們正在逐步移除它。這並不複雜,只是將 DOM 操作和事件處理改成純 JavaScript。我們複雜的互動頁面已經使用 Vue.js,但數十個簡單的管理頁面仍散布著少量 jQuery。
於是我想:嘿,這正是 AI 代理人的完美工作。重複、機械、明確、冗長又無聊。厭倦了我自己小範圍的改寫,想試試自動代理人,我想像那些 YouTuber 一樣。
我便將我最高價的 Claude Code(Opus 4.6)指向代碼庫,倒了杯咖啡。
當然我不是隨便丟過去,我做了功課。寫了一份詳盡的 CLAUDE.md 指令說明。準備了輔助函式,例如 const _id = id => document.getElementById(id);。描述了邊界狀況,比如 jQuery 對不存在的元素很寬容,但純 JS 不行,所以我們必須使用可選鏈接。
我甚至在 HTMLElement.prototype 上寫了自訂的 fadeIn 和 fadeOut 替代方法,使用 CSS 過渡效果,讓 $(#something).fadeIn() 變成 _id(something).fadeIn()。接著我進入「計畫模式」,設置了兩個獨立代理人——一個負責寫代碼,一個負責審查。因為單一代理人已經是 2025 年的老梗了。
整體任務是編輯 67 個檔案,每個檔案約改寫 5-10 行。簡單的 AI 強化搜尋替換。
這可不是從零開始用 Rust 重寫一個該死的 C 編譯器,或什麼他們聲稱能做的。
為什麼 AI 在純 JS 和 HTML 上表現這麼差,尤其當專案裡沒有 React/Vue?舉幾個例子:
1. 它寫了 <script type="module">,然後第一行就引用 document.currentScript。currentScript 在模組裡根本不會運作!這在 MDN 頁面上有醒目的警告框。你讀遍整個網路卻跳過這部分。
2. 它用我定義的 _id("something") 簡寫去抓 HTML 中不存在的元素。自信滿滿地引用不存在的 DOM 節點。怎麼不先讀那 100 行的部分檔案?或者用 null 鏈接?我明明提示你要用這個,因為我知道會發生這種事?不不不。
3. 偶爾它意識到 getElementById 可能回傳 null(恭喜),卻寫出這種東西:onclick='var x=document.getElementById("blah"); if (x) x.doSomething();'(是的,onclick 又是另一回事)——而不是我要求的 _id("blah")?.doSomething()。這根本沒發生過。
4. 它寫出像 querySelectorAll("#123") 這樣的選擇器。CSS 選擇器不允許 ID 以數字開頭。jQuery 可以,但 CSS 不行。每個處理過自動生成 ID 的前端新手都被這坑過。這是入門必經之路。AI 跳過了這個儀式。
5. 在內聯腳本中呼叫外部 <script type="defer"> 的函式,卻不等待 DOMContentLoaded(讓延遲腳本先載入完成)。
還有更多細微問題。例如,當你用 $.html() 將 AJAX 載入的 HTML(含 script 標籤)插入文件時,jQuery 會自動執行所有 "ready" 函式——$(function) 的簡寫。用純 JS 的 createContextualFragment 或 createElement 插入 AJAX HTML 也會執行所有腳本,但會跳過 DOMContentLoaded。
我知道,連資深開發者都難以捕捉這些問題,沒什麼好抱怨的……但我還是抱著一絲小小希望,希望它能幫我省點力氣。畢竟它之前寫過那個 Rust 編譯器。
還有,為什麼不執行 "npm run test"?我們有大量測試。我甚至有一個整合測試,會用無頭瀏覽器遞迴爬完整個應用程式,逐個連結檢查 JS 錯誤。CLAUDE.md 裡都有說明。
我是不是該在歐洲早晨、還是美國還在睡覺時執行?那時 Anthropic 不會為了省電費而限制模型?
我的專案有 15 萬行程式碼。大約一半無關緊要——C# 後端、資料庫腳本、CI/CD,都在代理人根本不需碰的獨立目錄。真正的前端代碼約 3-4 萬行,主要是 HTML,其中約 20% 使用 jQuery。
我不知道該怎麼看那個「用 24 個代理人從零寫 Rust C 編譯器」的示範。是啊,我敢打賭那花的時間比用 cursor-tab 寫還多。但嘿,這推文很棒。
好啦,我剛剛有點失控,抱歉……
AI 在「空白頁面」模式下很棒。給它一張空白紙,它就像魔法一樣。它對剛寫的東西有完美的心智模型。沒有驚喜,沒有繼承決策,沒有遺留怪異。說實話,就像我們人類一樣——我們都愛綠地專案。誰不愛?但你真正賺錢的,是那些棕地專案。
一旦你指向一個真實、現有的代碼庫——即使很小——一切就崩潰了。它胡言亂語,失去焦點,三個檔案後就忘了你的指示。它發明不存在的元素。它忽略你用簡單英文寫在提示裡的限制。老實說,我對 Opus 4.6 在複雜任務上的表現感到震驚,它可是我見過最聰明的 AI……「人工智慧」?別鬧了,更像是「人工自信」。我們都遇過這種人,現在還得付 200 美元/月的費用享受這待遇。
這也正是為什麼每個想當創業家、獨立駭客、資訊商業「12 個月出 24 個新創」的兄弟們都對 AI 工具興奮不已。當然了,他們總是從零開始。綠地,沒用戶,沒遺留,沒複雜度,沒收入。AI 在這種情況下絕對是王者。
但對我們這些維護真實軟體、真實用戶付費且依賴的人來說?嗯……
我想我們的工作還能安全幾年。現在請原諒我,我得去審查那 67 個檔案了。