← 所有文章

代理取代的是審查者,而非審查本身

2026年6月,以自動化程式修復聞名的軟體工程研究者Martin Monperrus發表了一篇論文,題為《程式碼審查的終結:程式碼代理取代人類檢查》(The End of Code Review: Coding Agents Supersede Human Inspection)。其論點是,程式碼代理已跨越某個能力門檻,使得在合併前讓人類逐行檢視差異不再是必要的品質關卡,而那種代理寫程式碼、人類仍是強制審查者的常見配置,已是一條死胡同。1

這篇論文的正確之處超出其批評者願意承認的範圍,但在一個關鍵之處明確錯了。代理確實取代了審查者:那位逐行閱讀差異、尋找缺陷的人類,所做的工作如今由一組代理做得更好,而且能涵蓋每一次提交。但論文把這個角色與審查本身混為一談。當您真正執行它所開出的代理流程時,人類的工作並未消失。它轉移了,從檢查程式碼,轉為掌握程式碼本應滿足的意圖。 我正在執行這套流程。審查者正在消亡。審查則往上層移動。

我想認真看待這篇論文,因為大多數回應不會如此。反射式的回覆是「但代理會產生幻覺」,而Monperrus早已承認這一點。誠實的論辯,得從承認他正確之處開始。

摘要

  • Monperrus主張程式碼代理已終結對人類程式碼審查的需求,因為審查的每一項目標(缺陷偵測、風格、安全性、知識傳遞)由代理服務得更好也更便宜,而人類的審查能量無法隨著代理驅動的產出量擴展。1
  • 他正確地指出,那個強制性的人類核准勾選框已經結束,也正確地指出,代理進行系統性檢查的能力勝過一位疲憊的人類粗略瀏覽龐大差異。
  • 他對此並不天真:論文承認了幻覺、提示注入、安全盲點的相關性,並將人類保留給高風險、新穎、受監管以及涉及倫理的變更。1
  • 落差在於,他把人類殘餘的角色視為一小組需要升級處理的例外。在生產環境中,這個角色是承重的核心:代理會針對它被賦予的規格進行最佳化,而撰寫並掌握那份規格,是不可化約的人類行為。
  • 審查者這個角色正在被自動化。但審查——理解為關於軟體是否符合其用途的判斷——正轉移到代理無法跟隨之處。

論文正確之處

Monperrus奠基於Bacchelli與Bird對團隊為何審查程式碼的羅列:缺陷偵測、風格與標準的執行、知識傳遞、團隊認知,再加上安全性這第五個面向。12 他的做法是逐一取每個目標,論證代理能服務得更好。代理檢查每一次提交,不會疲倦,也沒有時區延遲。它們列舉漏洞類別的系統性勝過人類臨時掃過一遍。它們在合併時生成架構摘要與更新後的文件。論文援引SWE-bench的能力曲線來論證門檻已跨越的主張:從2023年該基準推出時,最佳模型解決不到2%的真實GitHub議題,到2025年底頂尖代理超過70%。13

我對這部分毫無異議,因為我每天都看著它運作。我的自主建構迴圈執行一道三審查者關卡:在程式碼合併前,由各自獨立的代理檢查正確性、慣例與安全性,第二道迴圈則把實作送往一個獨立模型進行對抗性審查。這些代理會抓出真實的缺陷,而且是在每一次變更時都抓,而非僅在人類有空的那幾次變更。在本站,先於本文發表的兩篇貼文,各自都通過了一個代理評估器,它依照評分標準為其打分,並標出我隨後必須修正的具體事實問題。論文宣稱代理能產出可付諸行動、結構化的審查輸出,足以媲美一位受過訓練的審查者——這對我而言並非臆測。這是我的家常便飯。

產出量的論點同樣正確,而這部分常被人低估。一位由代理輔助的開發者,每天產出的拉取請求多於人類審查能量所能吸收的量。當寫程式者快速而審查者是人類時,審查佇列就成了束縛的限制因素,審查也退化為在時間壓力下走過場的形式。1 Monperrus正確地指出,那種天真的安排——代理寫、人類橡皮圖章式核准——並未提供任何真實的保證。一個因為程式碼看起來正確、測試也通過就核准的人類,並不是在審查。他是在簽名。

他所描述的流程,正是我在執行的流程

論文用以取代人類審查的,並不是「信任單一模型」。而是一條代理在環的驗證流程:多個獨立的代理,理想上是不同的模型,產出經過校準、結構化的簽核(測試覆蓋率、安全掃描、以JSON或SARIF這個靜態分析結果的標準交換格式呈現的推理軌跡),而非非正式的留言串,並指示代理在不確定時棄權,把人類保留給困難的案例。1

換上不同的名稱,這正是我建構並書寫了一年的架構。我曾主張代理的拉取請求需要更小的審查面,主張自動化審查需要異議,而非單一自信的裁判,也主張結構化證據的審查包正在取代非正式的差異留言。所以我並非在反對這條流程。我曾協助為它辯護。我所論辯的是,當流程存在之後,留給人類的是什麼,因為我活在那個答案之中,而它並非論文所給出的答案。

論點崩解之處:審查從來不只是檢查

Monperrus把人類保留給高風險變更、新穎架構、受監管的程式碼路徑,以及倫理判斷,並將這些框定為升級處理:當代理標記出來時,才轉交給某個人的例外。1 這個框架讓人類的角色聽起來像是一條原本自動化的產線上的罕見中斷。

實際執行這條產線,學到的卻是相反的道理。代理不會生成自己的目的。它針對被交付的規格進行最佳化,而在每一次重要的變更上,總得有人在代理能對照任何東西進行檢查之前,先決定「正確」意味著什麼。論文自己在討論章節承認了這條界線:代理為技術品質指標進行最佳化,並不可靠地具備能力去察覺某項遙測變更違反了使用者合理的隱私期待,或某項排序微調放大了偏見。1 這被呈現為一種邊緣處的限制。它並不在邊緣。「這項變更是否符合我們真正想要的」這個問題,端坐在每一次非瑣碎合併的中心,而這恰恰是一個依規格校準的代理無法針對規格本身提出的問題。

在我於本文之前所發布的那兩篇貼文上,我具體感受到了這一點。代理審查者為它們打分,並各自抓出一處事實上的過度宣稱:一篇是未經查證的機構性主張,另一篇是錯誤歸屬的統計數字。抓出來的是代理。修正則不是。決定如何如實地修正一處過度宣稱,哪一個來源實際支持該主張,那句話誠實的版本究竟為何,這需要關於意圖的判斷,而評分標準能標記它,卻無法解決它。代理發現了某處不對。是人類決定了「對」看起來該是什麼樣子。那樣的分工就是轉移,而它發生在例行的內容上,而非受監管的邊緣案例。

所以人類並未離開這個迴圈。人類從迴圈的末端移到了起點。審查過去是最後的檢查點,一個人檢視完成的程式碼。在代理流程中,檢查被自動化,而不可化約的人類工作移到了前端:把意圖明確指定到足以讓代理有真確的東西可供對照驗證,並在交付的結果符合規格卻錯失重點時,承擔其後果。當責無法委託給一個為指標最佳化的系統,因為當責是甘願刻意承擔錯誤並為之負責的意願。

這項主張誠實的版本

剝去標題的挑釁,可站得住腳的主張比「程式碼審查的終結」要狹窄。可站得住腳的主張,是人類作為差異檢查者與強制核准勾選框的終結。那個角色確實已經結束,而為了維護一套令人安心的儀式而假裝並非如此,本身就是另一種不誠實。把人類留在檢查席上充當門面、核准他們實際上無法審視的代理程式碼,這樣的團隊早已失去了他們自以為擁有的保證。

但「程式碼審查」始終是一個代稱詞。它指稱一個檢查點,意指的卻是一項判斷:這項變更是否做了我們需要的事,是否安全,是否以一種我們能背書的方式完成。把檢查點自動化,判斷並不會蒸發。它轉移到入口處的意圖規格,與出口處的當責,而在一個以代理速度推進的團隊裡,它變得更重要,而非更不重要,因為代理會忠實而迅速地建構規格所說的一切,包括錯誤的東西。寫程式者愈快,瓶頸就愈在於知道該要求什麼。Monperrus正確地指出審查者正被取代。但他錯在認為審查正在終結。審查正移往代理無法佔據的那一個席位。

重點摘要

給工程領導者: - 別再把人類審查配置為差異檢查。代理做得更好且持續不斷;在代理程式碼上的人類核准勾選框,是保證的門面戲。 - 把那份人類能量重新分配到意圖規格與當責,這正是審查中決定「符合規格是否等於符合事實」的部分。

給開發者工具的打造者: - 建構論文所描述的群集式審查流程:多個模型、經過校準的棄權、結構化簽核。審查者之間的異議才是訊號。 - 設計流程的前端,而不只是關卡。價值最高的面,是人類把意圖轉化為代理能對照驗證的規格之處。

給工程師: - 您的審查技能並未變得一文不值;它只是換了地址。價值從在差異中找出錯誤,轉移到定義程式碼本應做的事,並掌握其結果。

常見問題

這篇論文是否意味著人類程式碼審查已經結束?

人類作為逐行差異檢查者與強制核准者,這個角色已經結束,這是論文最有力的一點:代理進行系統性檢查的能力更好,而且涵蓋每一次提交。不會結束的,是程式碼審查所代稱的那項判斷,也就是一項變更是否符合其實際用途。那項判斷轉移到指定意圖與掌握後果,而非消失。

Monperrus實際上主張什麼?

他主張程式碼代理如今能以更低的成本與更高的產出量,服務程式碼審查所宣稱的每一項目標(缺陷偵測、風格、知識傳遞、安全性),而把人類維持為代理所寫程式碼的強制審查者是一條死胡同,因為它不提供任何真實的保證,也無法擴展。他提出一個產出結構化簽核的代理群集,並把人類保留給高風險與倫理案例。這是一篇立場論文,而非實證研究。1

論點最薄弱之處在哪裡?

在於把人類殘餘的角色當成罕見的升級處理。在實務上,人類的角色在每一次非瑣碎的變更上都是承重的,因為代理為一份它無法撰寫或質疑的規格進行最佳化。定義規格並為結果負責是核心工作,而非邊緣案例。

團隊是否應該在代理的拉取請求上保留一道人類核准步驟?

別當成檢查的門面戲。如果人類無法真正審視變更,那道核准就是簽名,而非審查。更好的做法是把人類的心力投注在上游,精確地指定意圖,並投注在下游,掌握交付的結果,同時讓一個代理群集去做檢查。


來源

  • Martin Monperrus,〈程式碼審查的終結:程式碼代理取代人類檢查〉(The End of Code Review: Coding Agents Supersede Human Inspection),arXiv,2026年6月11日:arxiv.org/abs/2606.13175。一篇綜合既有能力證據的立場論文;它羅列出Bacchelli與Bird提出的程式碼審查目標,援引SWE-bench能力曲線,並討論包括幻覺、提示注入與倫理當責在內的限制。
  • Alberto Bacchelli與Christian Bird,〈現代程式碼審查的期望、成果與挑戰〉(Expectations, Outcomes, and Challenges of Modern Code Review),ICSE 2013,本論文所奠基的審查目標分類法之實證來源:Microsoft Research
  • Carlos E. Jimenez et al.,〈SWE-bench:語言模型能否解決真實世界的GitHub議題?〉(SWE-bench: Can Language Models Resolve Real-World GitHub Issues?),ICLR 2024,能力曲線背後的基準(最佳模型在推出時解決1.96%):arxiv.org/abs/2310.06770
  • 出自生產經驗、關於代理審查的相關文章:更小的審查面審查需要異議審查包,以及那道三審查者關卡正是本文所描述執行流程的自主建構迴圈

  1. Martin Monperrus,〈程式碼審查的終結:程式碼代理取代人類檢查〉(The End of Code Review: Coding Agents Supersede Human Inspection),arXiv:2606.13175(2026年6月11日)。該論文羅列出程式碼審查的目標(缺陷偵測、風格與標準、知識傳遞、團隊認知,再加上安全性),主張代理以更低的成本與更高的產出量服務每一項目標,並針對代理寫/人類審查的安排提出兩項主張:它不提供真正的保證,因為人類對貌似合理的程式碼橡皮圖章式核准;它也無法擴展,因為審查能量成了瓶頸。它提出一個代理在環的流程(群集審查、經校準的棄權、結構化的JSON/SARIF簽核),並把人類的升級處理保留給高風險、新穎、受監管以及涉及倫理的變更,而它明確指出自身的限制,包括幻覺、安全盲點的相關性、提示注入,以及為指標最佳化的代理無法做出倫理判斷。作者表明這是一篇立場論文,而非新的實證研究。 

  2. Alberto Bacchelli與Christian Bird,〈現代程式碼審查的期望、成果與挑戰〉(Expectations, Outcomes, and Challenges of Modern Code Review),2013年國際軟體工程會議論文集(ICSE 2013),712-721頁。這項實證研究,基於對Microsoft開發者的觀察、訪談與調查,發現審查所宣稱的動機(找出缺陷)在實務上往往不及知識傳遞與團隊認知,而這正是Monperrus用以建構其逐目標論證的分類法。 

  3. Carlos E. Jimenez、John Yang、Alexander Wettig、Shunyu Yao、Kexin Pei、Ofir Press與Karthik Narasimhan,〈SWE-bench:語言模型能否解決真實世界的GitHub議題?〉(SWE-bench: Can Language Models Resolve Real-World GitHub Issues?),ICLR 2024,arXiv:2310.06770。在該基準推出時,最佳模型(Claude 2)解決了2,294項真實GitHub議題任務中的1.96%;到2025年底,頂尖代理在公開排行榜上超過70%,這正是論文用以論證門檻已跨越的能力曲線。 

相關文章

AI程式碼代理需要更小的審查介面

AI程式碼代理用龐大的差異壓垮審查者。更小的審查介面能讓工程師在合併前保持投入、聚焦驗證,並對結果負責。

2 分鐘閱讀

情境壓縮是一項決策,而非一道門檻

程式撰寫代理在計數器觸發時壓縮情境,而非在安全的停頓點。2026 年的一篇論文顯示,由模型決定的壓縮可削減 30 至 70% 的成本。

1 分鐘閱讀

你的 AI 代理寫程式碼的速度比你閱讀的速度還快

本週有五個研究團隊發表了關於同一個問題的論文:AI 代理產生程式碼的速度遠超開發者理解它的速度。債務累積在你的腦中。

4 分鐘閱讀