跳到正文
AI Engineer(youtube.com)· Daksh Gupta·· 4 小時前精選AI 評分85

如何打造 AI 程式碼審查代理——Greptile 創辦人 Daksh Gupta

如何打造 AI 程式碼審查代理——Greptile 創辦人 Daksh Gupta

AI 導讀

Greptile 創辦人 Daksh Gupta 詳述如何打造 PR 審查代理,主張整理歷史 PR 資料集、把大部分 Token 導向較便宜的模型,並將前沿模型保留給關鍵子任務,才是罕見災難性 bug 偵測得以奏效的關鍵。

🎙️

Podcast 專家音訊節目

收錄於 888news Podcast 智庫專區,包含精華摘要與上市公司即時行情

推薦理由

本講座詳細說明 AI 程式碼審查代理常見失敗模式、提示設計技巧與五步改進路徑,提供實作指引與成本評估,對欲落實此技術的工程師與產品經理具備高度參考價值,並示範如何將代理成本控制在每 PR 3–25 美元內。

正文 · AI 翻譯

Greptile 共同創辦人 Daksh Gupta 認為,多數自建 AI 程式碼審查代理的公司,幾天內就能做出可用的展示版本,但接下來就會開始漏抓 bug、誤判脈絡、推論成本失控,還會讓 pull request 淹沒在大量吹毛求疵的意見中。他的演講本質上是一份實作指南:針對特定 bug 型別設計提示、用歷史 PR 資料集衡量抓錯率、模型反轉、程式碼庫索引,以及沙箱化的端到端測試。整集節目幾乎全在講這些做法;推銷 Greptile 自家產品的段落只佔開頭與結尾幾分鐘。

Gupta 來自一家大規模審查 pull request 的公司——他說 GitHub 上約 1% 的 pull request 都流經 Greptile,涵蓋的程式碼庫包括輝達的 CUDA 與 Coinbase 的錢包程式碼。他把這場演講定位成:Greptile 會怎麼跟需求過於特殊、產品無法滿足的潛在客戶說明,同時也是一份給所有正在評估審查代理的人的採購清單。讀者讀完應該能掌握具體的失敗模式、背後的數字,以及五步改進路徑。

基本審查代理幾天就能做出來,然後以五種可預測的方式失敗

最小可行的做法很直接:一個沙箱(向廠商購買或在 Firecracker 上自建)、沙箱內一個寫程式的代理(Codex 或 Claude Code,或 OpenCode、Pi 這類開源框架以保持模型獨立性)、一個 GitHub 或 GitLab 的 PR webhook 把 diff 送給代理,再用 GitHub 的審查 API 把意見貼回去。PR 開啟五分鐘後就有回饋。Gupta 說,很多人以為審查代理這樣就夠了。

接下來就是失敗清單,也是整場演講的主幹:

失敗模式會發生什麼事Gupta 指出的原因
漏抓 bug災難級缺陷通過審查「bug 是碎形般的無限」——搜尋空間永遠收斂不了
誤判脈絡代理誤解程式碼庫、某個函式庫或某個服務的運作方式對微服務時代累積上千個 repo 的公司尤其嚴重
成本每審一個 pull request 花 3 到 25 美元Token 花費默默累積
吹毛求疵技術上正確但過於挑剔的意見雙重傷害:人會自動忽略,而寫程式的代理「沒有辨別力」,會把每則意見都照單全收,產出「防禦性強到令人痛苦」的程式碼
非確定性同一個 PR 每重跑一次就找到新問題bug 看似無窮,代理永遠能抓到新東西

Gupta 最強調吹毛求疵的問題,因為它會複合放大:審查代理的輸出會餵給寫程式的代理,所以低品質的意見不只是煩人,還會讓程式碼品質變差。

提示要指名 bug 型別,並明確定義什麼叫吹毛求疵

最容易下手的修正就是提示。先從「審查這個 PR,並以 GitHub API schema 格式輸出意見」這類指令出發,然後朝兩個方向調整:找出特定型別的 bug,以及略過吹毛求疵。Gupta 建議挖內部故障與事故資料,整理出這個程式碼庫最容易產生的 bug 型別清單,再把這些型別寫進提示。另外,提示必須定義什麼算吹毛求疵——他舉的例子是要求單一元件做三層防禦,或是對稍微粗糙的錯誤處理大做文章。

陷阱在於,提示只要小改,意見數量就會劇烈波動,而審查者無法揭露反事實。用 Gupta 的話說,驗證代理「能告訴你有 bug,但很不幸地,它沒辦法告訴你沒有 bug」。依他的資料科學估算,大約每 1,000 行程式碼就有 1 行含災難級 bug,所以某個 bug 類別若被悄悄漏掉,可能很久都不會被發現。

歷史 PR 資料集是唯一能確認代理有沒有用的方法

要解決提示改動無法衡量的問題,就得靠一份標註過的歷史 pull request 資料集——對會把每起事故都建檔的公司來說並不難。拿任何候選版本的審查代理去跑這些 PR,衡量它抓到已知 bug 的比例,提示調校就從猜測變成量測。

限制在於漂移。Gupta 說 80–90% 的 bug 是重複過去的錯誤,但隨著寫程式的代理進步,它們會產生全新的失敗,所以資料集必須即時更新。覆蓋率才是真正的瓶頸:沒有數百萬個 pull request,單一公司根本取樣不到足夠的 bug 型別。這正是他劃分內部工具與 Greptile 界線的地方——Greptile 在橫跨多家公司的大型語料上測試,因此能「在邊際上再榨出一點點效能」。他也承認,內部團隊用自己的資料也能走得「相當遠」。

反轉模型:同一個模型審查,抓到的 bug 更少

Gupta 早先的研究(他引用 2026 年初在舊金山 AI Engineer 的一場演講)發現,Claude 與 GPT 模型的失敗方式不同。據他所述,Claude 模型產生差一錯誤(off-by-one error)的機率約是 GPT 的三倍,而 GPT 模型產生驗證繞過(auth bypass)的機率明顯更高——他歸因於後訓練留下的痕跡。因此,用寫出程式碼的模型來審查,抓到的 bug 會比較少,因為生成與審查會在同一處失手。在 Greptile 的測試中,反轉模型讓抓錯率提高 10%,他把它說成事故少了 10%。

判斷 PR 是哪個模型寫的,約 80% 的情況很容易,其餘則很難。Codex 會把分支命名為 codex/branch-name;Claude 會在 PR 描述與 commit message 裡寫「co-authored by Claude」。剩下 20%——手動建立的分支、混用工具——就得靠啟發式規則、內部記錄工程師用哪些代理的清單,或開發者機器上的遙測資料。

Grep 既不精準又昂貴;程式碼庫知識庫自己就能回本

Gupta 反駁「grep 已經解決程式碼庫脈絡問題」這種說法。他的論點有兩部分。第一是精準度:grep 讀取的檔案遠超過實際所需。第二是宏觀成本——他聲稱去年 GDP 成長中有個位數百分點來自推論,其中很大一部分是寫程式的代理,而寫程式代理的 Token 大多花在同樣三種操作上:grep、讀檔、寫入快取。他還語帶諷刺地補了一句「按 Token 計費的公司有反向誘因」。

Greptile 的替代方案是內部知識庫,把程式碼庫的每個部分都建檔——以驗證為例,包括它怎麼運作、有哪些流程、流程圖,以及牽涉到的每個檔案。背後的動機案例是偵測驗證繞過,這需要具體知道某條程式碼路徑是否位於已驗證的環境中。Greptile 把它延伸成「活的 wiki」,把各種脈絡來源去中介化:程式碼、生產環境遙測與日誌、檔案,以及 Linear 工單。這個 wiki 既提供脈絡,也讓搜尋更精準,代理「永遠不會讀到它不需要讀的檔案」。

程式碼正確也可能錯:檔案與工單提供意圖

Gupta 把「壞 PR」的定義從 bug 擴大到品質與意圖。他的例子是把 Slack 當 IDE 用:一、兩句話的需求幾乎沒有表達出意圖,寫程式的代理不是誤讀指令,就是無法化解歧義。結果就是程式碼正確,但仍然是錯的。解方是更多脈絡——JIRA 與 Linear 工單,加上 Confluence、Notion 或任何存放檔案的地方——因為很多人類寫出好程式碼的隱性知識默默在起作用,沒有這些脈絡的代理「就是不知道發生了什麼事」。

在滿載的沙箱裡做端到端測試,幾乎已經解決

有些缺陷在 diff 裡看不出來。Gupta 的例子是:React 的改動讀起來沒問題,卻讓某個控制項在 iPhone 上被藏起來。Greptile 的答案是可設定、相依套件齊全的 VM 沙箱,能啟動客戶的完整技術堆疊,由代理透過 computer use 操作應用程式,或對 API 端點做壓力測試。他說 computer use 在目前的 GPT 與 Opus 世代進步很大,「我認為端到端 QA 第一次快要被解決了」。

兩個前提決定成敗:應用程式要有檔案化的流程,以及建置指令碼要簡單到代理能自己把整套堆疊架起來。Greptile 派駐前線工程師協助客戶處理這件事,Gupta 說這是最棘手的部分之一——除非公司本來就有好的開發機,那「恭喜你在 Stripe 上班」。必備的元件是:一臺開發機、用 PR 分支的相依套件跑起應用程式,以及一份流程地圖(驗證程式碼、註冊流程等),這樣視覺模型才能抓到像按鈕技術上存在、卻在 iPhone 上被藏起來或在摺疊機上掉到摺線以下的問題。

把 80% 的 Token 導向便宜模型——但前提是有資料集可以驗證

就算代理做得再好,每次審查也要 3 到 20 美元,所以最後一個槓桿是推論資源的分配。Gupta 仍認為前沿模型優於開源模型,不過「橡皮筋正在拉緊」。Greptile 目前的分法是約 20% 用前沿模型處理最關鍵的任務,較小的模型負責探索性讀取這條長尾。以一個示意性的路由為例:小模型找脈絡,輕量的 computer-use 模型測使用者流程,前沿模型分析 bug、套用審查流程並提交。實務上 Greptile 跑大約 20 個子任務,每個都有自己的模型組合,由一個小型研究團隊持續重新調整分配。

flowchart TD
    A["PR webhook 觸發"] --> B["小模型:尋找脈絡"]
    B --> C["程式碼庫 wiki 與索引"]
    C --> D["輕量 computer-use 模型:在沙箱中測試流程"]
    D --> E["前沿模型:分析 bug 並套用審查流程"]
    E --> F["前沿模型:提交審查意見"]
    F --> G["寫程式的代理處理意見"]

Gupta 警告,若沒有優質資料集,將子代理替換為廉價模型看似免費:代理會悄悄下降,你必須等到它遺漏某項、造成事故時才會被發現。他亦建議使用便宜的決策或重排序模型(他特別提到 Jev 以及一個 Decisions API)來決定哪些脈絡片段要放入前沿模型的快取,並稱那個快取是最昂貴且最稀缺的資源。

結尾的張力是結構性的。Gupta 自己的建議——用歷史 PR 進行衡量、反轉模型、索引程式碼庫、架設沙箱、依子任務分配推論——描述的是一套需研究團隊及數百萬 PR 語料才能運作良好的方案。這正是他說內部工具無法填補的缺口,也是他願意協助任何嘗試者的原因:「若你選擇不自行實作,也可直接使用我們的產品,與此相比是免費的。」每 1,000 行程式碼就有 1 行災難級 bug 的比例,以及模型反轉帶來 10% 增益,這兩項在其他公司的程式碼庫上是否成立,才是值得追蹤的重點;兩者皆為 Greptile 自家數字,未提供外部來源。

來源: AI Engineer (youtube.com)
開啟原文