AI 讓寫程式變便宜之後,瓶頸搬到了 Code Review:22 萬個 PR 的實證分析
本文大綱
這篇文章適合你,如果你是…
- 技術主管 / 架構師: 團隊導入 coding agent 之後,PR 數量暴增但東西沒有更快上線,你需要知道問題出在哪、以及怎麼量測
- 資深工程師: 你的日常正在從「寫 code」變成「審 code」,而且愈審愈累,你想知道這是不是普遍現象、有沒有系統解法
- 開源專案維護者: 你正在被 AI 生成的 PR 淹沒,想知道其他專案怎麼應對、哪些做法有實證支持
1. 前言:問題場景
Hook 開場
2026 年 3 月 14 日,Jazzband 宣布熄燈。
這不是一個沒人用的玩具專案。Jazzband 十年間維護 84 個 Python 專案——django-debug-toolbar、pip-tools、prettytable、sorl-thumbnail——月下載量超過 1.5 億次,3,135 名成員遍及南極洲以外的每一個大陸,累積約 93,000 顆 GitHub star,發布過 1,312 個 PyPI 版本。
它不是因為沒人用而死的。它是因為沒有人審得完而死的。官方公告裡寫得很直白:GitHub 的「slopocalypse」——AI 生成垃圾 PR 的洪水——讓 Jazzband「開放成員 + 共享 push 權限」的模式不再安全。公告中引用的數字是:只有十分之一的 AI 生成 PR 達到專案標準。
從系統架構的角度看,這件事一點也不意外,甚至是可以預測的。這是一個教科書等級的約束理論(Theory of Constraints)案例:
一條管線的總吞吐,由最慢的環節決定。過去二十年,軟體交付最慢的環節一直是「把程式碼寫出來」。AI 把這個環節的邊際成本壓到趨近於零——一個 agent 可以同時開十個 PR,凌晨三點也不會累。但下游的審查環節,服務率幾乎沒有變:一個人一次還是只能認真讀一個 diff,而且讀別人寫的 code 比讀自己寫的貴得多。
到達率暴增、服務率不變。接下來會發生什麼,Little's Law 早就寫好了答案。
而數據確實對上了。Faros AI 追蹤 22,000 名開發者的 telemetry 顯示,PR 審查時間的中位數上升了 441.5%。CircleCI 分析 2,873 萬個 workflow 後發現,中位數團隊的分支活動增加 15%,但主幹(main branch)的產出反而下降 7%。
程式碼確實被寫出來了。它只是卡在合併之前。
解決方案預告
這篇文章不打算再寫一篇「AI slop 好可怕」的情緒文。我想做三件更有用的事:
- 用一手學術研究(不是互相抄襲的二手部落格)證明這個瓶頸是真的、以及它的真實形狀
- 推翻一個最直覺但錯誤的解釋——「因為 AI 寫得爛」
- 給出一份基於實證數據的任務分工表,和一套把審查從「人力」重構成「管線」的做法
文章承諾
- 五份一手研究的完整拆解(涵蓋 22 萬個 PR、5 種 coding agent)
- 學術數據 vs 廠商 telemetry 的正面對決——它們互相打架,而這件事本身很有意義
- 一份實證的 agent 任務分工表(哪些放手、哪些別碰)
- 可直接落地的四種解法與量測指令
- 公開更正兩處在中英文圈廣泛流傳的數據歸屬錯誤
讀者收穫
讀完這篇文章,你將能夠:
- 判斷你的團隊是否已經進入「審查瓶頸」,並用三個具體指標量測出來
- 依據實證數據決定「哪些任務該派給 agent、哪些不該」
- 辨識四種在審查瓶頸下最危險的反模式(包括你可能正在做的那個)
- 在別人引用網路數字時,知道哪些數字是錯的、為什麼錯
1.5 TL;DR
- 瓶頸已經位移:審查時間中位數 +441.5%(Faros,22,000 開發者),主幹產出 −7% 但分支活動 +15%(CircleCI,2,873 萬 workflow)
- 不是因為 AI 寫得爛:22 萬個 PR 的研究顯示,agentic PR 的缺陷傾向與人類相當或更低;被拒絕的 PR 中只有 35.7% 是真正的 agent 失敗
- 真正的危險是審查在偷偷降級:78.9% 的 agentic PR 只有單人審查,而且單審(81.2%)與多審(80.3%)的合併率幾乎沒差——多一雙眼睛沒有改變任何結果
- agent 有明確的能力邊界:CI 設定、相依套件、授權類任務合併率 >0.90;一進入 function implementation、LLM integration 就掉到 0.60 以下
- 不要引用任何外部數字當基準:學術說 65%、廠商說 32.7%,差 2.5 倍。唯一有意義的是量測你自己的管線
2. 核心概念解釋
2.1 什麼是「審查瓶頸」
定義:在 AI coding 普及後,軟體交付系統的限制因素從「產出程式碼的速度」,位移到「人類確認程式碼是否可安全合併的速度」。
我喜歡用一個比喻:你把工廠的沖壓機換成了雷射切割,產能翻十倍,但品管站還是那三個人拿著游標卡尺。
結果不會是「產能翻十倍」。結果會是三選一:
- 半成品堆滿倉庫(PR 佇列爆炸)
- 品管開始隨便看(審查降級)
- 或者最糟的組合——兩者同時發生,而且儀表板上看起來一切正常
2.2 為什麼這是結構必然,不是工具問題
四個機制疊加,缺一不可:
① 產能不對稱
生成端的邊際成本趨近於零。審查端的邊際成本幾乎不變——它受限於人類的閱讀速度與注意力,而這兩者在過去五萬年沒什麼進展。
② 佇列非線性爆炸
排隊理論的基本結果:當系統利用率逼近 100%,等待時間會指數上升而非線性上升。這解釋了一個關鍵觀察——「等待被審」的時間漲得比「實際審查」的時間兇得多。LinearB 的數據正是如此:AI PR 的等待時間是未輔助 PR 的約 5 倍(約 1,000+ 分鐘 vs 約 200 分鐘)。
③ 系統會偷偷降低服務標準
這是最容易被忽略、也最危險的一點。當佇列壓力超過臨界,人類系統不會乖乖排隊——它會降低單位服務成本來維持吞吐。表現形式就是:單人審查、快速 approve、掃過去而不是讀進去。
吞吐看起來維持住了,但驗證強度被偷偷拿掉了。而這件事不會出現在任何 DORA 指標上。
④ 不對稱的認知成本
讀一段不是自己寫的 code,成本遠高於讀自己寫的。而 AI PR 又普遍更大——LinearB P75 數據:未輔助 157 行,AI 輔助 400+ 行。單位審查成本因此進一步上升。
2.3 關鍵術語表
| 術語 | 英文 | 說明 |
|---|---|---|
| 約束理論 | Theory of Constraints | 系統吞吐由最慢環節決定;優化非約束環節只會累積在制品,不會提升總吞吐 |
| 撿起時間 | Pickup Time | PR 開出到「第一次有人開始審」的等待時間。本主題最靈敏的指標 |
| 審查時間 | Review Time | 開始審到結束的時間。必須與 pickup time 分開看,否則會得出完全相反的結論 |
| 加速甩尾 | Acceleration Whiplash | Faros 提出:上游被 AI 加速、下游仍是人類節奏,系統被自己的產出反噬 |
| Agentic PR | Agentic Pull Request | 由 agent 自主開立的 PR。與「人類用 AI 輔助後自己開的 PR」統計特性不同,常被混為一談 |
| 橡皮圖章審查 | Rubber-stamp review | 形式上 approve、實質未驗證。審查瓶頸下最危險的適應行為 |
| AI slop | AI slop | 大量、表面合理但實質低品質的 AI 產出 |
視覺素材 1:概念示意圖——「沖壓機 vs 品管站」的產能不對稱示意
3. 五份一手研究的深度拆解(本文核心)
資料品質聲明:本節嚴格區分三層證據——① Tier 1 學術研究(arXiv / MSR 2026,有明確母體與方法)② Tier 2 廠商 telemetry(母體大但非同儕審查、判定標準未公開)③ Tier 3 生態系事件。兩層之間的數字不可直接相加或相除。
3.1 目前規模最大的 agentic PR 縱貫研究
來源:Mazloomzadeh, Morovati, Khomh, How Do AI Coding Agents Contribute to Software Development?, arXiv:2607.21832(2026-07-23 投稿)
原理簡述:分析 220,612 個已關閉 PR,來自 489 個 Python repo(stars ≥ 100),其中 agentic PR 9,428 個(7,293 合併、2,135 被拒),涵蓋 OpenAI Codex、GitHub Copilot、Claude Code、Cursor、Devin 五種 agent,資料截至 2025-08-10。主題模型分類經 100 個 PR 人工驗證,87% 正確,Cohen's κ = 84.2%。
發現一:不同 agent 的合併率差距接近兩倍
| Agent | 合併機率 |
|---|---|
| Claude Code | 84.3% |
| OpenAI Codex | 73.5% |
| Cursor | 63.9% |
| GitHub Copilot | 59.6% |
| Devin | 43.0% |
說白了:「AI 寫的 code」根本不是一個同質類別。Claude Code 和 Devin 之間差了 41 個百分點。任何把所有 agent 混在一起算的統計,都會被組合比例(mix)帶偏——這也是後面 §5 數據矛盾的原因之一。
發現二:合併率明顯低於人類,而且沒有隨時間改善
- Agentic PR 各季合併率:Q1 65.4%、Q2 63.7%、Q3 68.2%、Q4 67.7%
- 論文明言:沒有任何一組成對比較達到統計顯著
- 人類 PR 穩定在 0.850 ~ 0.856
這是對「等下一代模型就好了」的直接反證。 在整個觀測窗內,模型世代確實在更新,但 agentic PR 的整體合併率沒有實質提升。如果問題出在模型能力,這條線應該要往上走。它沒有。
發現三:agent 的貢獻高度集中在低風險雜務
出現頻率前三:文件(documentation)、相依套件管理(dependency)、測試(testing)
最少:token 管理、授權合規
| 合併率 | 任務類型 |
|---|---|
| ≥0.80,多數季度 >0.90 | GitHub Action workflow、CI & build、asset management、dependency、hook management、license、token management |
| ≤ 約 0.60 | LLM integration、model evaluation、JSON template、function implementation |
這是全文最有實務價值的一張表。 它是一份實證的分工說明書:愈接近真正的功能實作,合併率掉得愈明顯。 我在 §4 會把它轉成可直接執行的紅黃綠分區。
發現四(反直覺,但必須誠實面對)
論文指出:agentic PR 的缺陷傾向(defect proneness)與人類 PR 相當或更低,多數差異不具統計顯著性。 兩者在 commit 數、貢獻者數、變更檔案數、程式碼行數上的差異「實務量級有限」。
Before/After 對比(Tier 3):論文另外觀察到,後期季度的 agentic PR 整合更順暢,反映的不是模型變強(見發現二),而是開發者累積了與 agent 協作的經驗。改善來自人的一側,不是模型的一側。
這推翻了最直覺的解釋。 如果 agentic PR 的品質不比人類差,為什麼合併率低 20 個百分點?答案不在程式碼裡——在流程裡。下一份研究接手回答。
3.2 「被拒絕」嚴重高估了 agent 的失敗率
來源:Peralta 等 11 位作者, Why Are Agentic Pull Requests Merged or Rejected?, arXiv:2605.22534(2026-05-21,已被 MSR 2026 接受)
方法:11,048 個已關閉 agentic PR → 篩出 9,799 個經人類審查者 → 717 個案例人工檢閱,還原真實的決策理由。
被拒絕的 PR,理由分布:
| 拒絕原因 | 佔比 |
|---|---|
| 真正的 agent 失敗 | 35.7% |
| 流程 / 工作流限制(重複、時機不對、範圍外、政策不收) | 31.2% |
| 完全看不到可觀察的決策理由 | 33.1% |
被合併的 PR:
- 15.4% 需要審查者明確介入(feedback 或直接 commit)
- 5.5% 完全沒有任何互動痕跡
論文結論的原話大意是:拒絕結果實質上高估了 agent 的錯誤率,且合併/拒絕本身「在不考慮審查互動的情況下,無法可靠反映 agent 能力」。
這段有兩個殺傷力極強的意涵:
- 把「合併率」當 agent 的 KPI 是錯的。 近三分之一的拒絕根本不是 agent 寫錯,是流程不收。你用這個指標去評估工具,會得到系統性錯誤的結論。
- 那 5.5% 的「零互動合併」,是橡皮圖章的量化證據。 沒有留言、沒有 commit、沒有任何痕跡,就進主幹了。
3.3 合併之後,人類還要改多少
來源:Watanabe, Li, Kashiwa, Reid, Iida, Hassan, On the Use of Agentic Coding, arXiv:2509.14745(2025-09-18,最新版 2026-02-09)
母體:567 個 Claude Code PR,橫跨 157 個開源專案
| 指標 | 數值 |
|---|---|
| 最終被合併 | 83.8% |
| 合併且完全未再修改 | 54.9% |
| 合併但需要人類修訂 | 45.1% |
交叉驗證的價值:這裡的 83.8% 與 §3.1 中 Claude Code 的 84.3%,是兩份母體完全不同的獨立研究,給出幾乎一致的數字。這種一致性讓我對這個量級有信心——這在這個充滿互抄數字的主題裡很難得。
實務意涵:即使合併了,將近一半(45.1%)仍需要人類動手改。所以「合併率」不只高估了失敗,也低估了成本。真正的成本是「合併率 × 修訂率」的複合。
3.4 介入變少了,但每一次都更貴
來源:Khelifi(ÉTS Montréal), Ouni(ÉTS), Khemaja(University of Sousse), Behind Agentic Pull Requests, MSR 2026 Mining Challenge(AIDev dataset)
| 指標 | Agent 開的 PR | 人類開的 PR |
|---|---|---|
| 有人類介入的比例 | 52.17% | 83.59% |
介入種類分布(agent PR):
| 介入層級 | 佔比 |
|---|---|
| 指導層(guidance) | 58.02% |
| 決策層(decision) | 21.16% |
| 直接改 code | 17.05% |
| 操作層(operational) | 3.69% |
關鍵發現:agent PR 的介入次數較少,但一旦發生,需要更大的 code churn 與更長的處理時間。
論文的結論很值得引用:人機協作正在把開發者的工作「從實作轉向監督、指導與品質控制」。
這解釋了一個常見的管理誤判。 主管看到「介入率從 83.59% 掉到 52.17%」,很容易讀成「agent 變可靠了」。實際上是分布的尾端變重了——平均數下降,但少數幾個又大又難的案例吃掉更多時間。平均數在騙人。
3.5 審查層正在變薄【本週新研究】
來源:Raida, Hou(Rochester Institute of Technology),報導於 2026-07-22
母體:25,264 個 agentic PR,2025 年 5–7 月,repo stars ≥ 100,涵蓋 Copilot、Codex、Claude Code
| 發現 | 數值 |
|---|---|
| 小團隊(1–5 貢獻者)平均每季 agentic PR | 50.2 個(遠高於中大型團隊) |
| 多數 repo 每季 agentic PR | 僅 1–2 個 |
| 由單一開發者審查的 PR | 78.9% |
| 接近九成 PR | 只有一人監督、無群體參與 |
| 單一審查者的合併率 | 81.2% |
| 多審查者的合併率 | 80.3% |
這是本文最關鍵的一塊拼圖,理由是那 0.9 個百分點的差距。
如果審查真的在做實質把關,多一雙眼睛應該要改變結果——應該要抓出更多問題、拒掉更多 PR。結果幾乎完全一樣(81.2% vs 80.3%)。
**** 這強烈暗示:在很多情況下,審查已經不是決定性關卡了。它更像一道儀式,而不是一道閘門。而且注意 §3.2 的 5.5% 零互動合併——兩份獨立研究從不同角度指向同一個結論。
再加上小團隊是 agent 的重度使用者(每季 50.2 個 PR)——而小團隊恰恰是最沒有審查人力冗餘的一群。壓力最大的地方,防護最薄。
研究自陳限制(必須誠實標註):此研究只量測「立即接受與否」,revert 與長期程式碼品質不在資料集範圍內。也就是說,真實的成本可能比這些數字更高,因為「合併了但三週後被 revert」不會被算進去。
視覺素材 2:五份研究的母體與核心發現對照表
視覺素材 3:agent 合併率長條圖(Claude 84.3% → Devin 43.0%)
視覺素材 4:拒絕原因的三分圓餅圖(35.7% / 31.2% / 33.1%)
4. 廠商 telemetry:規模更大,但要小心讀
⚠️ 以下是 Tier 2 資料。母體極大,但判定標準未完全公開(例如「AI PR」如何被標記),且觀測窗與 Tier 1 不同。只看趨勢方向與量級。
4.1 Faros AI《AI Engineering Report 2026: The Acceleration Whiplash》
母體:22,000 名開發者的 telemetry
| 指標 | 變化 |
|---|---|
| 審查時間中位數 | +441.5% |
| 審查時間平均數 | +199.6% |
| 被撿起前的等待時間(中位數) | +156.6% |
Faros 早期研究(10,000+ 開發者、1,255 個團隊),高 AI 採用 vs 低採用團隊:
| 指標 | 變化 |
|---|---|
| 完成任務數 | +21% |
| 合併 PR 數 | +98% |
| PR 審查時間 | +91% |
| 平均 PR 大小 | +154% |
| 每位開發者的 bug 數 | +9% |
一個容易被略過但很重要的統計細節:注意「中位數 +441.5%」大於「平均數 +199.6%」。
通常平均數會被長尾拉高於中位數。這裡反過來,代表整個分布的主體都在往右移,而不是被少數極端案例帶動。
這是系統性惡化的訊號,不是離群值。 你不能安慰自己「那是別人家的爛專案拉高的」。
4.2 LinearB《2026 Software Engineering Benchmarks Report》
母體:810 萬個 PR、約 4,800 個工程團隊、42 個國家
| 指標 | 未使用 AI | AI 輔助 | Agentic AI |
|---|---|---|---|
| PR 大小(P75,行數) | 157 | 400+ | ~290 |
| Pickup time(等待被審) | ~200 分鐘 | ~1,000+ 分鐘(約 5 倍) | — |
| Review time(開始審之後) | 252 分鐘 | ~194 分鐘(更快) | — |
| 指標 | 數值 |
|---|---|
| 人工 PR 合併率 | 84.5% |
| AI PR 合併率 | 32.7% |
| 開發者固定使用 AI 比例 | 88.3% |
這裡有兩個必須講清楚的洞察:
① 「等待」與「審查」是往相反方向走的。
AI PR 等更久(約 5 倍),但一旦開始審,反而更快(194 vs 252 分鐘)。
表面上這像好消息。但請想一想:一個更大(400+ 行 vs 157 行)、而且不是你寫的 diff,為什麼會被更快審完?
**** 最合理的解釋是:審查者在掃,不是在讀。這是 rubber-stamp 的行為指紋,而且它與 §3.2 的 5.5% 零互動合併、§3.5 的單審多審無差異,形成三方交叉印證。
② agentic PR 比 AI 輔助 PR 更小(290 vs 400+ 行)。
反直覺,但完全合理:agent 通常被派去做界線清楚的小任務(見 §3.1 的任務分布),而人類用 AI 輔助時傾向一次堆更多東西進去。
這帶出一個實用結論:真正該被限制大小的,可能是「人類用 AI 寫的 PR」,而不是 agent 開的 PR。
4.3 CircleCI《2026 State of Software Delivery》
母體:28,738,317 個 workflow(2025 年 9 月),限定 ≥2 貢獻者且執行 ≥5 次的專案
| 指標 | 數值 |
|---|---|
| 平均 throughput 年增 | +59% |
| 前 5% 團隊 | +97% |
| 中位數團隊 | 僅 +4% |
| 後四分位團隊 | 無可量測增幅 |
| 中位數團隊:feature branch | +15% |
| 中位數團隊:main branch | −7% |
| 前 10% 團隊:feature branch / main branch | 約 +50% / +1% |
| main branch 成功率 | 70.8%(五年多來最低,CircleCI 基準為 90%) |
| 復原時間 | 72 分鐘(年增 +13%) |
這是「約束位移」最乾淨的量化證據。
分支上的活動大增(+15%),主幹上的產出卻在倒退(−7%)。程式碼確實被寫出來了,但它卡在合併之前。
同時,主幹健康度掉到五年新低(70.8%,基準 90%)——擠過去的那些,品質在下滑。
還有一個容易被忽略的分佈事實:平均 +59% 這個亮眼數字,是被前 5%(+97%)拉起來的。中位數團隊只有 +4%,後四分位完全沒有可量測的增幅。
說白了:AI 的交付紅利高度集中在少數團隊手上,而那些團隊的共同點不是用了更好的模型,是他們的管線撐得住。
視覺素材 5:CircleCI 分支 vs 主幹 throughput 對比圖(+15% vs −7%)
視覺素材 6:pickup time vs review time 的反向走勢圖
5. 數據矛盾分析:agentic PR 的合併率到底是多少?
這是我認為這個主題最有意思、也最沒有人處理的部分。
| 來源 | 數值 | 母體 |
|---|---|---|
| arXiv 2607.21832(Tier 1) | ~65% | 9,428 agentic PR,489 個 ≥100 star Python repo |
| arXiv 2509.14745(Tier 1) | 83.8% | 567 個 Claude Code PR,157 個 OSS 專案 |
| RIT 研究(Tier 1) | 81.2% / 80.3% | 25,264 agentic PR,≥100 star repo |
| LinearB(Tier 2) | 32.7% | 810 萬 PR,4,800 個企業團隊 |
最高與最低差了 2.5 倍。
大部分文章的做法是挑一個最聳動的用(通常是 32.7%)。我認為誠實列出五個可能原因更有價值:
① 母體完全不同。
Tier 1 全部限定「GitHub stars ≥ 100 的公開 repo」——這是已經有審查文化、有 CI、有貢獻規範的專案。LinearB 是企業內部團隊,包含大量沒有這些條件的組織。
② 「AI PR」的判定方式不同。
Tier 1 靠 agent 帳號 / 簽章明確識別 agentic PR。LinearB 把「AI 輔助」與「agentic」分開統計,但外界看不到標記規則。
③ 時間窗不同。
Tier 1 資料多截至 2025 年中(2607.21832 截至 2025-08-10),LinearB 是 2026 年資料。而這段期間正是 agent 使用量爆炸期——大量新手在這段時間湧入。
④ 倖存者偏差。
公開 repo 的 agentic PR 多由已經懂得怎麼用 agent 的人開出。企業內全員推廣則包含大量還在摸索的使用者。
⑤ 「關閉」的語意不同。
企業內未合併的 PR 常常只是被放棄、或被 squash 進別的分支,未必等於「被審查者拒絕」。
這個矛盾給你的真正結論
不要引用任何一個外部數字當作你團隊的基準。
這些數字之間的離散度本身就證明了:這個指標高度依賴脈絡。一個在 LinearB 母體裡「正常」的團隊,放到 arXiv 母體裡可能是災難,反之亦然。
唯一有意義的做法是:量測你自己的管線,而且分開統計 agentic 與人類 PR。
上面每一份研究,本質上都是在示範這件事該怎麼做。
6. 決策框架:實證任務分工表
6.1 紅黃綠分區(源自 §3.1 的合併率數據)
| 風險區 | 任務類型 | 實證合併率 | 建議做法 |
|---|---|---|---|
| 🟢 綠區 | CI/build 設定、GitHub Action、相依套件更新、授權合規、asset、hook 管理 | ≥0.80,常 >0.90 | 放手讓 agent 做。用 CI 當唯一 gate,不需要人眼審查 |
| 🟡 黃區 | 文件、測試、重構 | 中等(agent 使用頻率最高的區段) | 可以做,但測試必須另外驗(見 §6.3 反模式三) |
| 🔴 紅區 | function implementation、LLM integration、model evaluation、JSON template | ≤ ~0.60 | 人類主導,agent 只產草稿。這一區不要看合併率,要看 revert 率 |
6.2 決策樹(文字版)
這個任務要不要派給 agent?
│
├─ 這個變更能被 CI / type check / 靜態分析完整驗證嗎?
│ ├─ 是 → 🟢 綠區:放手做,CI 就是 gate,不排人審
│ └─ 否 → 往下
│
├─ 這個變更會改變執行期行為(business logic / 外部整合 / 資料模型)嗎?
│ ├─ 否(文件、測試、純重構)→ 🟡 黃區
│ │ └─ 限制 PR ≤ 200 行 + 人審 + 測試獨立驗證
│ └─ 是 → 往下
│
├─ 出錯的話,多久會被發現?
│ ├─ CI 立刻抓到 → 🟡 黃區處理
│ └─ 要等到生產環境 / 使用者回報 → 🔴 紅區
│ └─ agent 只產草稿,人類重寫關鍵路徑,強制 2 人審 + 明確 revert 計畫
6.3 三個真實場景
場景 A:5 人新創,重度使用 coding agent
- 環境:小團隊、無專職 reviewer、每季 agentic PR 約 50 個(正是 RIT 研究中的高風險族群)
- 推薦:把 90% 的審查責任移交給 CI。人只審紅區。強制 PR 大小上限。
- 理由:你沒有審查人力冗餘,硬要人審的結果一定是橡皮圖章——那比不審更危險,因為它製造了虛假的安全感。
場景 B:50 人的企業工程團隊,剛全員導入 AI
- 環境:有 reviewer 文化,但 PR 數量在三個月內翻倍
- 推薦:先做量測,不要先做政策。分開統計 agentic / AI 輔助 / 純人工三類 PR 的 pickup time 與 revert 率,跑滿一個月再決定。
- 理由:你現在最缺的不是規則,是能見度。看不到就管不了(見 §6.4 的量測腳本)。
場景 C:開源專案維護者,正在被 AI PR 灌爆
- 環境:外部貢獻者不受你控制,審查完全是無償勞動
- 推薦:把成本推回貢獻者端。要求 PR 附上可複現的測試、通過完整 CI 才進入人工審查佇列、明確的 AI 貢獻揭露政策。
- 理由:Jazzband 的教訓是——當到達率不受控時,唯一可持續的槓桿是提高提交門檻,而不是提高審查產能。curl、Ladybird、tldraw 走的都是這條路。
6.4 實戰最佳實踐:把審查從「人力」重構成「管線」
四種解法(依槓桿大小排序)
① 減少到達率(最有效、最常被忽略)
不是所有 agent 產出都值得成為一個 PR。在 agent 端就加 gate:
# .github/workflows/agent-gate.yml
# 基於架構原則設計:讓「開 PR」這件事本身有成本
# 目的:跑不過基本驗證的 agent 產出,根本不該進入人類的佇列
name: Agent PR Gate
on:
pull_request:
types: [opened, synchronize]
jobs:
gate:
# 只對 agent 開的 PR 生效(依你的 agent 帳號調整)
if: contains(fromJSON('["claude[bot]","copilot-swe-agent[bot]","devin-ai-integration[bot]"]'), github.actor)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# 關鍵一:PR 太大就直接擋,不讓它進入人類佇列
# 依據:LinearB P75 顯示 AI 輔助 PR 達 400+ 行,是審查成本主因
- name: Enforce PR size limit
run: |
CHANGED=$(git diff --stat origin/${{ github.base_ref }}...HEAD \
| tail -1 | awk '{print $4+$6}')
echo "Changed lines: $CHANGED"
if [ "${CHANGED:-0}" -gt 300 ]; then
echo "::error::PR 超過 300 行(實際 $CHANGED)。請拆成多個 PR。"
exit 1
fi
# 關鍵二:測試必須存在且通過——不信任 agent 自陳的「已測試」
- name: Run full test suite
run: make test
# 關鍵三:改了執行期程式碼卻沒動測試 → 標記為紅區,要求人審
- name: Detect untested runtime changes
run: |
SRC=$(git diff --name-only origin/${{ github.base_ref }}...HEAD \
| grep -E '^src/.*\.(py|ts|go)$' | wc -l)
TST=$(git diff --name-only origin/${{ github.base_ref }}...HEAD \
| grep -E '^tests?/' | wc -l)
if [ "$SRC" -gt 0 ] && [ "$TST" -eq 0 ]; then
gh pr edit ${{ github.event.number }} --add-label "needs-human-review"
fi
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
② 把審查左移進管線
用 CI、type check、靜態分析、政策檢查,取代人眼審查「機械可判定」的部分。
人只審機器判不了的東西:架構契合度、需求正確性、安全邊界、對既有不成文慣例的遵循。
**** 這是整套做法的核心哲學:人類審查是稀缺資源,就該像稀缺資源一樣被配置。 你不會讓資深架構師去人工檢查程式碼縮排,同樣的邏輯應該推廣到所有機器可判定的項目。
③ 限制 PR 大小
AI 輔助 PR 在 P75 達 400+ 行(vs 未輔助 157 行)。這是審查成本的主要來源,也是最直接的槓桿。
注意 §4.2 的發現:該被限制的主要是「人類用 AI 寫的 PR」(400+ 行),agentic PR 反而較小(~290 行)。很多團隊的政策方向搞反了。
④ 明確標記 agentic PR 並分開統計
這是所有改善的前提。看不到就管不了。
#!/usr/bin/env bash
# measure-review-bottleneck.sh
# 量測你自己管線的三個關鍵指標,分開統計 agent vs 人類
# 依賴:gh CLI (v2.40+), jq
# 用法:./measure-review-bottleneck.sh owner/repo 30
REPO="${1:?usage: $0 owner/repo [days]}"
DAYS="${2:-30}"
AGENTS="claude|copilot-swe-agent|devin-ai-integration|cursor|codex"
echo "== 量測 $REPO 最近 $DAYS 天 =="
gh pr list --repo "$REPO" --state all --limit 500 \
--json number,author,createdAt,closedAt,mergedAt,additions,deletions,reviews \
| jq --arg agents "$AGENTS" --argjson days "$DAYS" '
# 只看指定天數內建立的 PR
map(select(
(.createdAt | fromdate) > (now - ($days * 86400))
))
# 依作者是否為 agent 分兩組
| group_by(.author.login | test($agents; "i"))
| map({
# 這組是 agent 還是人類
kind: (if (.[0].author.login | test($agents; "i")) then "AGENT" else "HUMAN" end),
count: length,
merge_rate: ((map(select(.mergedAt != null)) | length) / length * 100 | round),
# pickup time:開 PR 到第一次 review 的等待(分鐘)——最靈敏的瓶頸指標
median_pickup_min: (
map(select(.reviews | length > 0)
| ((.reviews[0].submittedAt | fromdate) - (.createdAt | fromdate)) / 60)
| sort | if length == 0 then null else .[length/2 | floor] | round end
),
median_size_lines: (
map(.additions + .deletions) | sort
| if length == 0 then 0 else .[length/2 | floor] end
),
# 零互動合併率:rubber-stamp 的直接證據(對照研究中的 5.5%)
zero_review_merge_pct: (
(map(select(.mergedAt != null and (.reviews | length) == 0)) | length)
/ length * 100 | round
)
})
'
echo ""
echo "判讀:AGENT 組的 median_pickup_min 若是 HUMAN 組的 3 倍以上 → 佇列已飽和"
echo " zero_review_merge_pct 若明顯高於 5% → 橡皮圖章審查正在發生"
反模式警告:五個你可能正在做的錯事
| ❌ 常見錯誤 | ✅ 正確做法 | 依據 |
|---|---|---|
| 用「合併率」當 agent 的 KPI | 用 revert 率 + 合併後修訂率 | §3.2:31.2% 的拒絕來自流程限制、33.1% 沒有理由 |
| 把「審查時間變短」當好消息 | 搭配 pickup time 一起看;變短 + 等更久 = 掃過去 | §4.2:AI PR 開審後更快(194 vs 252 分鐘) |
| 相信 agent 附的測試 | 測試獨立驗證(mutation testing / 覆蓋率門檻) | arXiv 2605.06464:agent 初版 PR 的測試常不足且需頻繁補寫 |
| 把「介入率下降」讀成「agent 變可靠」 | 看單次介入成本,不看平均介入率 | §3.4:次數少但 churn 更大、時間更長 |
| 以為多加一個審查者就解決了 | 改變審查方式(左移進管線),不是增加審查人數 | §3.5:單審 81.2% vs 多審 80.3%,幾乎無差異 |
7. 效能調優:三個立刻可以量測的指標
如果你只有一個下午,先做這三件事:
① 分開量測 pickup time(最靈敏)
把 agentic PR 與人類 PR 的 pickup time 分開畫。如果 agent PR 的等待時間是人類 PR 的 3 倍以上,你的審查佇列已經飽和了。 這個指標比合併率靈敏得多,因為它在品質出問題之前就會亮紅燈。
② 追蹤「零互動合併率」
對照組是研究中的 5.5%。你的數字明顯更高,代表橡皮圖章審查正在發生。這是唯一能直接量化「審查降級」的指標。
③ 把 PR 大小按來源分桶
未輔助 / AI 輔助 / agentic 三類分開看 P75。對照 LinearB 的 157 / 400+ / ~290。你會很快發現該對哪一類設限——通常不是你以為的那一類。
**** 如果你的管線已經有這三個指標,下一步是建立「審查預算」概念:把團隊每週的人類審查工時當成一個固定容量,明確分配到紅黃綠三區。當綠區吃掉超過 20% 的審查預算,就是自動化沒做夠的訊號。
8. 工具與資源推薦
| 工具 | 用途 | 連結 |
|---|---|---|
| gh CLI | 撈 PR metadata 做自訂量測(見 §6.4 腳本) | https://cli.github.com/ |
| Danger JS / Danger Ruby | 在 CI 內執行 PR 政策檢查(大小、標籤、測試存在性) | https://danger.systems/ |
| Semgrep | 把「架構規範」寫成可自動檢查的規則,左移審查 | https://semgrep.dev/ |
| AIDev dataset | MSR 2026 使用的 agentic PR 資料集,可自行複現分析 | 見 MSR 2026 Mining Challenge |
| CODEOWNERS | 強制紅區檔案必須由特定人審查 | GitHub 內建 |
延伸閱讀(一手來源):
- arXiv:2607.21832 — 目前規模最大的 agentic PR 縱貫研究
- arXiv:2605.22534 — 拒絕原因的人工歸因分析(MSR 2026)
- Faros AI《AI Engineering Report 2026》— 22,000 開發者 telemetry
9. 總結與展望
一表看完全部證據
| 層級 | 來源 | 母體 | 核心發現 |
|---|---|---|---|
| Tier 1 | arXiv 2607.21832 | 220,612 PR / 489 repo | agentic 合併率 ~65% vs 人類 ~85%;缺陷傾向相當或更低;agent 間差距 84.3%→43.0% |
| Tier 1 | arXiv 2605.22534 | 11,048 PR(717 人工檢閱) | 拒絕中僅 35.7% 是真失敗;5.5% 合併零互動 |
| Tier 1 | arXiv 2509.14745 | 567 Claude Code PR | 83.8% 合併,但 45.1% 需人類修訂 |
| Tier 1 | MSR 2026 (AIDev) | — | 介入率 52.17% vs 83.59%,但單次成本更高 |
| Tier 1 | RIT 研究 | 25,264 PR | 78.9% 單人審查;單審 81.2% vs 多審 80.3% |
| Tier 2 | Faros AI | 22,000 開發者 | 審查時間中位數 +441.5% |
| Tier 2 | LinearB | 810 萬 PR | AI PR 等待 約 5 倍,但開審後更快 |
| Tier 2 | CircleCI | 2,873 萬 workflow | 分支 +15%,主幹 −7%;主幹成功率 70.8%(五年最低) |
| Tier 3 | Jazzband | 84 專案 / 月下載 1.5 億 | 因審查容量被灌爆而熄燈 |
按讀者類型的建議
- 小團隊 / 新創:你是 agent 的重度使用者,也是審查冗餘最少的一群。把賭注壓在 CI,不要壓在人審。
- 企業技術主管:先建立能見度再訂政策。分開統計三類 PR,跑滿一個月。你現在最缺的是資料,不是規則。
- 開源維護者:提高提交門檻比提高審查產能可持續。成本要推回貢獻者端。
未來趨勢(三個方向)
- 開源的預設正在從「open by default」轉向「closed by default, earn your way in」。 curl 取消 bug bounty、Ladybird / tldraw 停收外部 PR、Jazzband 熄燈——這是 30 年來 OSS 協作模式最大的一次收縮。
- 「AI 審 AI」會被大量嘗試,但它解決的是產能問題,不是信任問題。 當人類已經不讀 diff,再加一層 AI 審查只是把橡皮圖章換成自動蓋章機。真正的解法是讓機器可判定的部分變成硬性 gate。
- agentic PR 的標記與揭露會標準化。 因為沒有標記就沒有量測,沒有量測就沒有治理——這是所有工程治理的必經路徑。
今天就能開始的四步
- 跑一次 §6.4 的量測腳本,拿到你自己的 pickup time 與零互動合併率
- 用 §6.1 的紅黃綠表,把你團隊目前派給 agent 的任務重新分類
- 加一條 PR 大小上限(先從 300 行開始),觀察兩週
- 把一個「機器可判定」的審查項目從人審移進 CI——任何一個都行,重點是開始
9.5 可分享金句
「Jazzband 不是因為沒人用而死的。它是因為沒人審得完而死的。」
「AI 讓寫程式的邊際成本趨近於零,但讀程式的成本一點都沒變——瓶頸不會消失,它只會搬家。」
「更大、又不是你寫的 diff,卻被更快審完。這不是效率提升,這是橡皮圖章的指紋。」
「單人審查 81.2%、多人審查 80.3%。多一雙眼睛沒有改變任何結果——那還叫審查嗎?」
「不要引用任何外部數字當你的基準。學術說 65%、廠商說 32.7%,差 2.5 倍。唯一有意義的數字是你自己管線上的那個。」
10. 延伸思考
- 你的團隊上一次「認真讀完」一個 AI 開的 PR 是什麼時候?如果想不起來,那你們的審查流程實際上還在運作嗎?
- 如果明天起禁止人類審查任何 agent PR,只能靠 CI——你的 CI 需要補上哪三件事,才敢這樣做?這份清單,其實就是你現在真正欠的技術債。
- 你團隊裡「審查」是誰的 KPI?如果答案是「沒有人」,那它在資源競爭中一定會輸——這是不是問題的真正根源?
11. FAQ 常見問題
Q1: 這是不是就是在說「AI coding 沒用」?
完全不是。§3.1 的研究顯示 agentic PR 的缺陷傾向與人類相當或更低。問題不在 AI 的產出品質,在於下游系統沒有跟著改。這是流程債,不是工具問題。
Q2: 那我該不該繼續用 coding agent?
該。但要照 §6.1 的紅黃綠分區用。綠區(CI 設定、相依套件、授權)合併率超過 0.90,那是純粹的收益。紅區(function implementation、LLM integration)掉到 0.60 以下,那裡需要人類主導。
Q3: 為什麼學術研究說 65%、LinearB 說 32.7%?我該信哪個?
兩個都信,但都不要拿來當你的基準。母體、標記方式、時間窗都不同(詳見 §5 的五個原因)。去量你自己的。
Q4: 「審查時間 +441%」是 CircleCI 的數據嗎?
不是,這是常見的錯誤引用。 正確出處是 Faros AI《AI Engineering Report 2026》(22,000 開發者 telemetry),精確數字為中位數 +441.5%。CircleCI 的 2026 報告完全沒有 PR review time 數據。詳見 §12。
Q5: 我常看到「31% 更多 PR 未經審查就合併」,這數字可靠嗎?
我無法在 Faros 或 CircleCI 的一手材料中定位這個數字,所以本文不使用它。若要表達同一概念,請改用可查證的 arXiv 2605.22534:5.5% 的合併 PR 完全沒有互動痕跡。
Q6: 用 AI 來審查 AI 的 code,可行嗎?
可以作為分流(過濾掉明顯不合格的),但不能作為最終 gate。理由見 §9 趨勢二:當人類已經不讀 diff,再加一層 AI 審查只是把橡皮圖章換成自動蓋章機。AI reviewer 應該取代的是「機器可判定」的部分,那部分本來就該是 CI 的工作。
Q7: 小團隊沒有人力做 code review,怎麼辦?
你正是 RIT 研究中每季 50.2 個 agentic PR 的高風險族群。答案是不要假裝在做 review——把資源全押在 CI 與測試,人只審紅區。硬撐出來的橡皮圖章審查比誠實地不審更危險,因為它製造虛假的安全感。
Q8: PR 大小上限設多少合理?
先看你自己的 P75(見 §7 第三點)。參考值:LinearB 未輔助 PR 的 P75 是 157 行。我建議從 300 行開始(保留緩衝),觀察兩週後再往下收。重點是先有這條線,不是一步到位。
Q9: Jazzband 真的是被 AI 搞垮的嗎?
不能這樣簡化。官方公告同時列出「對單一管理員的結構性依賴」與「2017 年起就未解決的治理問題」。準確的說法是:AI slop 是壓垮既有結構性脆弱的最後一根稻草,不是唯一原因。
Q10: 為什麼 agentic PR 反而比「人類用 AI 輔助」的 PR 小?
因為 agent 通常被派去做界線清楚的小任務(§3.1 顯示集中在文件、相依套件、測試),而人類用 AI 輔助時傾向一次堆更多東西進去。LinearB 數據:agentic ~290 行 vs AI 輔助 400+ 行。
Q11: 這些研究的資料是什麼時候的?會不會已經過時?
必須誠實說:Tier 1 學術資料的觀測窗多在 2025 年中(arXiv 2607.21832 截至 2025-08-10),Tier 2 廠商 telemetry 是 2026 年。存在時間差。但 §3.1 發現四季之間沒有統計顯著變化,暗示這個結構性問題不會因為幾個月的模型更新而消失。
Q12: RIT 那份研究說單審多審沒差,會不會只是因為好的 PR 本來就會過?
這是很好的質疑,也是該研究的限制之一——它只量測立即接受與否,revert 與長期品質不在範圍內。所以嚴格說,它證明的是「多一位審查者沒有改變立即接受的結果」,而不是「多一位審查者完全無用」。但配合 §3.2 的 5.5% 零互動合併與 §4.2 的審查時間反常變短,三方指向同一個方向。
12. 查證更正紀錄(本文的公開勘誤)
在研究這個主題時,我發現至少三處在中英文圈廣泛流傳的數據問題。列在這裡,也歡迎讀者指正本文:
- 「審查時間 +441%」的歸屬錯誤
多篇二手部落格與 SEO 內容站把此數字歸給 CircleCI 2026 State of Software Delivery。經查證,CircleCI 該報告完全沒有 PR review time 數據。正確出處是 Faros AI《AI Engineering Report 2026》,精確數字為中位數 +441.5%。 - 「31% 更多 PR 未經審查就合併」無法追溯到一手來源
此數字廣泛流傳且常與上一條並列,但在 Faros 與 CircleCI 的一手材料中皆無法定位。本文不使用此數字。 - LinearB 的 pickup time 倍數有 4.6x / 5.3x / 2.47x 三種說法
經查一手內容:AI 輔助 PR 約 1,000+ 分鐘 vs 未輔助約 200 分鐘,約 5 倍。本文採用「約 5 倍」並附原始分鐘數。
13. 參考資料
學術研究(Tier 1)
- Mazloomzadeh, I., Morovati, M. M., Khomh, F. (2026-07-23). How Do AI Coding Agents Contribute to Software Development? An Empirical Study of Agentic Pull Requests. arXiv:2607.21832. https://arxiv.org/abs/2607.21832
- Peralta, S. R. O., et al. (2026-05-21, MSR 2026). Why Are Agentic Pull Requests Merged or Rejected? arXiv:2605.22534. https://arxiv.org/abs/2605.22534
- Watanabe, M., Li, H., Kashiwa, Y., Reid, B., Iida, H., Hassan, A. E. (2025-09-18 / rev. 2026-02-09). On the Use of Agentic Coding. arXiv:2509.14745. https://arxiv.org/abs/2509.14745
- Khelifi, S., Ouni, A., Khemaja, M. (MSR 2026). Behind Agentic Pull Requests. https://2026.msrconf.org/details/msr-2026-mining-challenge/26/
- Raida, M. N., Hou, D. (RIT, 2026-07-22 報導). 25,264 agentic PR 分析. https://www.helpnetsecurity.com/2026/07/22/users-of-ai-coding-agents/
- To What Extent Does Agent-generated Code Require Maintenance? arXiv:2605.06464. https://arxiv.org/html/2605.06464v1
- AgenticFlict: A Large-Scale Dataset of Merge Conflicts in AI Coding Agent PRs. arXiv:2604.03551. https://arxiv.org/pdf/2604.03551
廠商報告(Tier 2)
- Faros AI. AI Engineering Report 2026: The Acceleration Whiplash. https://www.faros.ai/blog/ai-acceleration-whiplash-takeaways
- Faros AI. The AI Productivity Paradox Research Report. https://www.faros.ai/blog/ai-software-engineering
- LinearB. 2026 Software Engineering Benchmarks Report. https://linearb.io/resources/software-engineering-benchmarks-report
- LinearB Dev Interrupted. Why AI-assisted PRs merge at half the rate of human code. https://linearb.io/dev-interrupted/podcast/linearb-2026-benchmarks-ai-pr-merge-rate
- CircleCI. 5 key takeaways from the 2026 State of Software Delivery. https://circleci.com/blog/five-takeaways-2026-software-delivery-report/
生態系事件(Tier 3)
- Jazzband (2026-03-14). Sunsetting Jazzband. https://jazzband.co/news/2026/03/14/sunsetting-jazzband
- The New Stack. Open source maintainers are drowning in AI-generated pull requests. https://thenewstack.io/ai-generated-code-crisis/
- codenote.net. How OSS Contribution Policies Changed in Response to AI Slop — curl, Ghostty, tldraw. https://codenote.net/en/posts/oss-ai-slop-contribution-policy-shift/


