我們找來一個棘手的老舊儲存庫——一個 14k 行的 Express + React app,沒有測試、狀態糾結成一團, 資料庫層更是藏在三層抽象之後——然後把同一份重構需求說明交給五個不同的 AI 程式設計 agent。 接著我們對比了結果的 diff。
利益揭露: Build Lab 由 Y Build 發行。這個實驗探討的是這些程式設計 agent 本身; 數字是我們自己測的,方法寫在下面。
這五個,以及它們為何不同
市場分成三種型態,我們從每一種裡都挑了:
- Claude Code——終端機優先的 agent。在公開的 SWE-bench Verified 排行榜上居首。
- OpenAI Codex (CLI)——終端機優先,token 用量明顯更精簡。
- Cursor——IDE 原生,現在有了並排的多 agent 模式。
- Aider——終端機、git 原生,外科手術式的 diff。
- Windsurf——IDE 原生,agentic 流程。
需求說明
對五個都完全一樣:「把資料層抽到一個 repository 介面後面,為每個 repository 方法加一個測試, 並且不要更動公開 API。」 接著我們測量了:完成後通過的測試數、改動的行數、公開 API 是否真的 守住、燒掉的 token、實際耗時,以及一個人工評分的品質分數。
發生了什麼
| Agent | 時間 | 測試通過 | 公開 API 守住 | 做法 |
|---|---|---|---|---|
| Claude Code | 23 min | ✓ | ✓ | 有條理的跨檔案重構,品質 9.0/10 |
| Cursor | 47 min | ✓ | ✓ | 較慢,由 IDE 引導,8.5/10 |
| Codex | 26 min | ✓ | ✓ | token 最精簡(約比 Claude Code 少 3–4 倍) |
| Aider | 19 min | 部分 | ✓ | 外科手術式、diff 最小——漏了兩個方法 |
| Windsurf | 38 min | ✓ | ✗ | 重寫了一半的層;弄壞了一個簽章 |
真正的故事在於做法的差異。Aider 做了一個十行的外科手術式改動就停了;Windsurf 重寫了 一半的 app,還悄悄改掉了一個函式簽章。Claude Code 則在最多檔案之間守住了計畫、沒有迷失方向 ——代價是跑同樣的工作要燒掉 Codex 3–4 倍的 token。
那個沒人會警告你的瓶頸
讓我們意外的是這件事:一旦你同時跑超過一個 agent,agent 就不再是瓶頸了。 圍繞著它的 一切才變成了真正的工作——哪個 session 在做什麼、誰的 diff 好了、哪個分支是哪個、從昨天到 現在又壞了什麼。Cursor 的並排多 agent 檢視會存在,正是因為序列式的審查無法規模化。同時跑 五個 agent 並沒有讓我們快上 5 倍;它讓審查變成了新的全職工作。
方法論
同一個儲存庫、同一個 commit、同一份需求說明,每個 agent 都有全新的脈絡、用預設模型。我們 每個都跑兩次,保留較好的那一次。品質由人工依固定評分標準評分(可讀性、測試的意義性、diff 範圍的紀律)。完整的 diff 與日誌:github.com/ybuild/lab-04。
結論
並不存在「最好的重構 agent」——存在的是一種剛好適合這份工作的性情。想要一份緊湊、好審查的 diff?Aider 或 Codex。一個必須保持連貫的大型跨檔案重構?Claude Code。但無論你選哪一個, 都要為那個 demo 都略過不談的部分編列預算:審查 agent 做了什麼,現在才是真正的工作。