週五下午,一位工程師把一張 issue 指派給 coding agent,然後去開會。issue 是工程團隊記錄需求的工作單,這一張寫著「會員匯出要支援 Excel」;coding agent 則是能自己讀程式、改程式的 AI 工具。一小時後回來,pull request 已經在等他,也就是一組等待審查與合併的程式修改:改了十四個檔案,多了兩個相依套件,測試全綠。他打開 diff,也就是修改前後的逐行差異,捲了三個畫面,發現自己分不出哪些改動是需求要的、哪些是 agent 順手做的。最後他關掉 PR,自己重寫。

這種結局很常見,問題多半不在 agent 寫得差。交出去的那張 issue 只寫了「要做到什麼」,沒寫「第一步做完會長什麼樣子」。

這個缺口最近變得更要緊。2026 年 9 月 1 日,GitHub 宣布內建的 AI 程式審查功能 Copilot code review,可以在管理員授權後直接核准 pull request,而且這個核准會計入儲存庫(repo)規定的必要審查人數。寫程式的是 AI,核准的也可以是 AI,人還能把關的位置就往前移到交出任務的那一刻:交出去之前,你寫得出第一個可以單獨審查的 diff 嗎?寫不出來,這張 issue 就還不該交給 agent 實作。

做完和能被檢查是兩回事

Coding agent 的能力確實已經到了可以「做完」的程度。依 GitHub 文件的說明,它自家的 Copilot coding agent 會在雲端環境裡研究 repo、規劃改動、修改檔案、執行測試與 linter(自動檢查程式寫法的工具),自己建立 branch(獨立的修改分支)、寫 commit(每一次修改的紀錄)訊息、推上去,最後開出 pull request。另一個例子是新創公司 Cognition 開發的 Devin,一個標榜能獨立完成工程任務的 coding agent。Cognition 執行長 Scott Wu 今年 5 月接受 TechCrunch 訪問時提到,公司工程師提交的程式碼有 89% 是由 Devin 提交的,他形容 Devin 的程度介於初階和中階工程師之間。

從這些描述很容易推出一個結論:既然它能從 issue 一路做到 PR,就把整個功能交給它。這個推論漏掉一件事:做完和能被檢查是兩回事。

一個動了十四個檔案的 PR,就算每一行都正確,審查的人也得先把 agent 的思路重建一遍,才判斷得了。重建不出來,就只剩兩個選擇:照單全收,或整個退回。前者讓沒人真正看懂的程式碼進了 main,後者把 agent 的一小時和自己的半小時一起丟掉。

Scott Wu 在同一篇訪問裡說,要做什麼「應該永遠由人決定」。問題在於,如果這個決定只發生在最後看 PR 的時候,人能做的其實只有接受或拒絕,談不上決定。

審查成本跟著 diff 的範圍走

審查一段程式碼要花多少力氣,看的是它同時動了幾件事。一個只改一個模組、附一個測試的 diff,審查者知道該從哪裡看起,也知道看到什麼算對。一個同時改資料結構、介面、設定和文件的 diff,光是決定先看哪個檔案就要花時間,而每多一個被改到的地方,就多一個需要確認的假設。

Agent 讓這件事更明顯,因為它常常「順手」。為了讓測試通過,它可能調整測試本身;為了讓新函式好用,它可能順便重構旁邊的程式碼。單看每個動作都說得通,合在一起就成了一個沒人要求過、也沒人審查過的設計決定。

工具本身也在提醒這一點。GitHub 文件寫明,Copilot coding agent 每個任務只開一個 pull request,一次只在一個 branch、一個 repo 裡工作,單次執行有 59 分鐘的上限,而且它的輸出可能不正確或不安全,進正式環境前要經過審查和測試。這些限制都在告訴使用者同一件事:交給它的任務,大小要讓人看得完。

廣告

寫不出第一個 diff 的任務,先不要交

所以,指派之前先在 issue 裡寫一行:「第一個 diff 只改__,用__證明它是對的。」

寫得出來的例子:「匯出功能新增 Excel 格式。第一個 diff 只在 exporter 模組加上 xlsx 輸出,用『十筆會員資料匯出後欄位與 CSV 版一致』的測試證明。」這樣的 issue 可以交出去,並要求 agent 做到這個 diff 就停下來,等人看過再繼續。

寫不出來的時候,通常卡在三種原因之一:

  • 需求還沒定。 產品要的是 Excel 還是 Google Sheets 還沒決定,agent 只能自己猜。
  • 沒有東西能證明對錯。 相關流程沒有測試,任何改動都只能靠人肉眼判斷。
  • 改動天生跨很多地方。 權限、付款、登入、刪除、資料遷移,牽一處就動全身。

這三種情況下,agent 仍然有用,只是用途要換:讓它讀程式碼、列出會受影響的檔案、草擬測試、比較兩種做法的優缺點。這些產出不會進 main,錯了也只是浪費一點時間,卻能幫人更快把需求想清楚。等那一行寫得出來,再把實作交出去。

這條規則也有代價。拆得越小,PR 越多,審查的次數也越多。對已經有完整測試、改法高度重複的工作,例如大量升級相依套件,或依固定規則替一批函式改名,一次整批交出去反而更有效率;Scott Wu 說 agent 最適合接手的長尾維護工作,多半就是這一類。判斷依據仍然是同一個:說得出怎麼驗證。「全部測試通過、建置成功、行為沒變」能證明一次大量升級,那就適合整批交。

AI 也能核准之後,要守住的三個位置

Copilot 的核准功能目前是公開預覽,預設關閉,由管理員在企業、組織或 repo 層級開啟,repo 管理員還可以指定 Copilot 能核准哪些檔案路徑。如果打開了,同一個 repo 就可能出現一條完全沒有人經手的路徑:agent 寫、AI 核准、合併條件滿足。

要讓人留在流程裡,可以守住三個位置:

  1. 會讓 agent 實作的路徑,不要同時開放 Copilot 核准。 尤其是權限、付款、資料遷移相關的目錄,核准一定要由人來。
  2. 在 issue 範本加一欄「第一個 diff」。 這一欄寫不出來的 issue,自動歸到「只做研究」。
  3. 一次只放行一步。 第一個 diff 合併之後,才讓 agent 接下一步,每一步都附上它用來證明的測試。如果你習慣在手機上批准 agent 的下一步,這個原則更要守住,參考〈用手機合併 AI 改的程式之前,讓儲存庫的規則替你把關〉。

拆小還有一個好處:每一段的上下文更短,失敗時要重做的也更少,帳單比較不容易失控,原因在〈AI 長任務的帳單,多半花在重試和重讀上下文〉。

下一張要指派給 agent 的 issue,先補上那一行:第一個 diff 只改哪裡、用哪個測試證明。寫得出來,就交出去;寫不出來,那張 issue 需要的是人先把需求想清楚。

AI 整理卡

請 AI 幫你判斷這張 issue 能不能交給 coding agent 這段提示詞會先問清楚 issue 的狀況,再試著寫出第一個可審查的 diff;寫不出來時,改建議 agent 現在能先做的研究工作。

我想判斷一張 issue 能不能直接交給 coding agent(例如 Copilot coding agent 或 Devin)實作。
判斷標準來自這篇文章:https://boosterminiclass.com/posts/coding-agents-need-human-checkpoints/
能交出去的任務,必須寫得出「第一個可以單獨審查的 diff」:它只改哪些檔案或模組,以及用哪一個測試證明它是對的。

請先問我 3 個問題:
1. 這張 issue 的完成條件是什麼,有沒有還沒定案的產品決定;
2. 相關程式碼目前有沒有測試可以證明它的行為;
3. 這次改動會不會碰到權限、付款、登入、刪除或資料遷移。

根據我的回答,請輸出:
- 一行判斷:可以交出去/先拆小再交/只讓 agent 做研究;
- 如果可以交:用一句話寫出第一個 diff 的範圍和驗證用的測試,讓我直接貼進 issue;
- 如果還不行:說明卡在哪一個原因,以及 agent 現在可以先做的研究工作(例如列出受影響的檔案、草擬測試、比較兩種做法)。
不要替我假設不存在的測試或程式結構;資訊不夠就繼續問我。

AI 的建議只能幫你把問題問完整,要不要交出去,仍由負責這個 repo 的人決定。

廣告

Share

分享這篇微課

如果這篇剛好解開一個工作卡點,可以分享給也在判斷 AI 怎麼用的人。

參考來源