我們如何透過教導模型像 Roblox 工程師那樣思考,將 AI 程式碼的接受率提升一倍
具備網域意識的程式碼智慧

儘管眾人對下一個突破性 AI 模型都感到興奮,但 Roblox 內部 AI 工具效能倍增的秘訣,並非來自新模型。 關鍵其實就蘊藏在我們的程式碼庫歷史中。透過運用多年累積的程式碼以及領域專家的審查經驗,我們在 10,000 個拉取請求 (PR) 的數據集中,將 AI 生成的 PR 建議接受率從約 30% 提升至超過 60%,並在同一期間將某個自主程式碼清理專案的評估準確度提升至 90% 以上。
彌合 AI 品質差距
在整個產業中,50% 至 60% 的編碼時間都花在軟體維護上。¹ Roblox 也不例外。
理論上,那些需求明確且問題空間受限的重複性維護任務,本應是 AI 自動化的絕佳候選對象。但在實際操作中,我們的 AI 助手卻在評估準確度與工程團隊的接受度方面面臨挑戰。
在 Roblox,問題不在於能力,而在於背景脈絡。通用模型並未歷經 Roblox 二十年的工程發展歷程。它未曾見過我們過去三年合併的 70 萬個拉取請求,也未曾從 170 萬則程式碼審查評論中學習——這些評論中,我們經驗最豐富的工程師定義並捍衛著我們的編碼標準。
忽視這段歷史的 AI 助理,無法贏得世界級工程師的信任。儘管半數 Roblox 工程師已採用 AI 驅動的助理,但在人工審查後,僅約 20% 的 AI 生成建議獲得採納。我們的季度工程生產力調查也反映了這一現實。 工程師將 AI 對生產力的影響評為 5 分制中的 4.02 分,但對 AI 程式碼品質的信心評分僅有 5 分制中的 3.09 分。簡而言之,AI 雖有助益,但信任度仍有限,特別是在傳統 C++ 及更複雜的程式碼領域。
為彌合這道認知鴻溝,我們投入資源打造了一套基於 Roblox 自身工程歷史、參照專家範例,並經嚴格評估驗證的「代理式」程式碼智慧平台。這套程式碼智慧平台不僅旨在生成程式碼建議,更旨在具備 Roblox 工程師的組織深度,進行反覆迭代。
汲取 Roblox 頂尖工程經驗
Roblox 的工程資料庫涵蓋近 20 年的提交記錄、設計文件及生產環境遙測數據,這是一套獨特且豐富的資料集,完整記錄了系統的演進歷程,以及工程師解決艱鉅難題的過程。
這套程式碼智慧平台旨在將這些資料轉化為結構化的知識圖譜,這是一項重大的工程挑戰。在龐大的多語言環境中,程式碼不僅僅是文字檔案。它是一張由建置目標、C++ 範本實例化以及動態 Lua 依賴關係所構成的複雜網絡。單純解析文字是不夠的;系統必須理解深埋於程式碼庫本身、且專屬於我們獨特架構的深層語義關係。
另一項挑戰在於追蹤與時間對齊。為了能在相互連結的系統間進行推理,代理系統必須將靜態程式碼儲存庫與雜訊較多的執行時遙測資料建立關聯,並將數百萬筆生產環境訊號回溯至產生這些訊號的特定程式碼版本——即使程式碼庫仍在持續演進。

為解決此問題,我們的策略是將版本控制、建構圖譜及執行時遙測整合為一種混合的符號-向量表示法,同時保留語法、語義及關聯性。這使程式碼智慧平台能像資深工程師那樣理解程式碼:視其為由設計理念、權衡取捨及效能數據所形塑的相互連結系統,而非孤立的文字檔案。
透過範例對齊提取專家訊號
真正的專業知識隱藏在模式、審查評論、提交歷史記錄以及微妙的程式碼慣用語中。程式碼智慧透過範例對齊引擎揭示這份隱含的智慧,讓工程師能夠蒐集理想實作或審查理由的「黃金」範例。
過去,一位資深工程師可能每週花費數小時審查拉取請求(PR),反覆標記高頻率迴圈中使用阻塞性 FetchData 呼叫的情況——這種模式在語義上看似正確,但在 Roblox 的規模下卻會造成嚴重的延遲。若專家出差或錯過錯誤,其知識便無法被應用,反模式可能潛入生產環境,進而導致我們的社群服務中斷。
透過對齊引擎,該工程師可將其判斷轉化為自然語言範例。這是一種結構化定義,結合了程式碼模式(「是什麼」)與推理(「為什麼」)。現在,系統會自動偵測阻塞呼叫、標記它、解釋延遲風險,並直接連結至關於非同步最佳實務的內部文件:
在高頻率迴圈中使用阻塞操作會導致延遲增加及執行緒耗盡。當在非同步任務中呼叫 `FetchData` 時,應警告作者注意延遲與執行緒耗盡的問題。只要該任務已透過 await 等待完成,`FetchData` 即屬可接受。提供非同步最佳實踐的直接連結:internal_guidance/async。 |
這有效地將工程師歷經多年經驗所累積的寶貴知識轉化為系統規則。系統將一次性的審查評論,轉化為永久且自動化的防護機制。
「讓對齊引擎如此強大的原因,不僅在於它能提升程式碼品質——更在於它能擴展導師指導的規模。我們將資深專家們的專業知識與直覺編碼進平台本身。這就像是讓一位資深的 Roblox 領域專家,每天、全天候與你進行配對編程。」——Tom Knych,資深技術總監
但我們的專家們手頭工作繁重,要求他們回想並寫下所有關鍵見解,即便在最佳情況下,也是一個既耗時又容易遺漏的過程。那麼,我們該如何協助他們在 Roblox 任職期間,完整記錄下這些寶貴的建議呢?
這些建議其實早已存在,散見於他們細緻的程式碼審查評論中,並銘刻在每個成功上線的 PR 之中:

我們將歷史 PR 評論導入一條處理管道,用以清理並從 Roblox 體驗中提取最具價值的主題。初期,雜訊數據充斥著無法付諸行動的評論,例如讚美或錯字修正;而有價值的反饋往往以高度依賴上下文的簡寫形式呈現。舉例來說,若不了解具體檔案與 diff 內容,像「在此處使用新模式」這樣的註解便毫無意義。系統必須將這些具體的互動轉化為可重複使用且具通用性的規則。
為解決此問題,我們採用多階段演算法,無需人工介入即可從數千個 PR 中偵測重複出現的主題。系統將歷史評論嵌入向量空間,利用貪婪聚類找出相關回饋的鄰域,並透過大型語言模型(LLM)引導的精細化處理,將其整合為高價值模式。
最終產出的是候選範例(或稱「學習要點」)的排序清單,其優先級依據出現頻率及不同審閱者引用廣度而定,並附有原始評論的引用來源。 隨後,我們的領域專家會審閱這些候選項目,必要時進行編輯,並決定哪些應被提升至知識庫作為核心最佳實踐。在首次預覽此流程後,儲存庫負責人欣喜地看到他們關注的主題浮現為關鍵指引,並立即希望將其儲存庫納入分析範圍。

最後一步是對齊代理程式,它會將所有變更與範例知識庫進行比對,藉此協助人類工程師與 AI 編碼代理程式。這種靈活的評估機制可應用於整個軟體開發生命週期:在編碼階段、合併階段,甚至透過持續改進代理程式,隨著知識庫的擴充,自主地維護 Roblox 程式碼庫。
透過這種情境學習,將 AI 行為錨定於 Roblox 標準,我們觀察到某個 AI 編碼代理在黃金評估資料集上的通過率,從 84% 躍升至 100%。我們不僅在教導 Roblox AI 如何編碼;我們更是在教導我們的 AI 如何像 Roblox 工程師那樣思考。
從負面訊號中學習
儘管範例對齊已顯著提升了我們的程式碼庫品質基準,但我們的最終目標是達到這樣的境界:AI 建議的程式碼初稿,其可信度能媲美我們最資深工程師的作品。正因如此,我們將每項被拒絕的 AI 建議、失敗的重構,或是引發回歸的合併,都視為可回饋至系統的高價值訊號。這為代理程式建立了一條管道,使其能持續改進並從錯誤中學習。
領域專家可透過詳盡的推理、思考脈絡及失敗事件的相關背景,對負面結果進行篩選與標記。這些資料隨後會進行語義嵌入並建立索引以便檢索。當我們的程式碼智慧平台提出新建議時,系統會對這些資料進行語義搜尋,調用過往的錯誤與審查者回饋,以避免重蹈覆轍。
這個封閉的回饋迴路將每次程式碼審查轉化為結構化的學習資料,透過對抗式與批評式訓練,持續精進未來代理人的行為。
建構穩健的評估框架
信任是透過可靠且可預測的行為建立而成的,而這一切始於量測。我們設計了一套專用的評估系統,用以追蹤代理程式隨時間推移的表現。

此框架包含:
- 任務層級基準:涵蓋數千項 Roblox 工程活動(如重構、測試及除錯任務)的精確度與召回率。
- 模擬框架:具備確定性結果的合成 PR,以實現可重現的評分。
- 人工介入評審小組:專家針對 AI 輸出與黃金標準實作進行對比評估。
- 執行框架:在合併代理程式改進時,相關評估會被並行化,並作為合併前持續整合 (CI) 套件的一部分執行,讓工程師對其變更充滿信心。
- 縱向指標:跨版本追蹤合併後的回歸問題、還原頻率及延遲變化。
- 全面可觀察性:自動追蹤與視覺化代理程式活動,將代理程式與 Roblox 其他部分建立關聯,並無縫銜接至線上與線下評估流程。
此系統產出的代理程式品質分數能精確追蹤隨時間變化的效能表現,使不同代理程式修訂版本與模型版本間的比較得以標準化。自從我們導入範例對齊機制與完整的評估套件後,某個 Roblox 程式碼智慧代理程式在 10,000 個 PR 資料集上的 PR 建議接受率,從約 30% 提升至超過 60%,這顯示其具備值得信賴且符合領域需求的表現。 透過相同的流程,我們的功能標誌清理代理程式將整體準確度從 46% 提升至 90% 以上。
未來展望:將專家判斷融入每項工具
我們正透過建立 MCP 層與工具封裝層來提升既有內部系統的實用性,並將程式碼智慧平台從針對特定任務的工具,演進為能維持 Roblox 程式碼庫健康的系統。
我們展望的工程未來,是將過去難以擴展的知識(如執行時情境與專家判斷)融入每項工具與工作流程。當程式碼智慧、範例對齊與可觀察性相互結合時,我們將釋放持久的優勢:更佳的品質、更快的交付,以及更健康且持續演進的程式碼庫。 我們的長期目標是讓每位工程師擁有組織記憶的力量,讓每個團隊都有信心快速交付,並讓每位工程師享有專注於創新而非維護的自由。


