
譯者 | 核子可樂
審校 | 重樓
系統(tǒng)軟件調(diào)試中自主編碼智能體的興起
隨著大語言模型的出現(xiàn),AI在軟件開發(fā)中的應(yīng)用逐漸受到關(guān)注。這些模型顯示出執(zhí)行編碼相關(guān)任務(wù)的能力,進而讓能夠協(xié)助甚至自動化傳統(tǒng)僅可由人類開發(fā)者完成的任務(wù)的自主編碼智能體成為可能。這些智能體涉及簡單的腳本編寫器乃至復(fù)雜的系統(tǒng),能夠?qū)Ш酱a庫并診斷錯誤。
最近,關(guān)注焦點進一步轉(zhuǎn)向如何讓這些智能體處理更復(fù)雜的挑戰(zhàn),尤其是那些與規(guī)模大、復(fù)雜度高的軟件環(huán)境相關(guān)的問題。其中包括基礎(chǔ)系統(tǒng)軟件,相關(guān)變更不僅需要理解當前代碼,還需要了解其架構(gòu)上下文、相互依賴項以及歷史演進過程。因此,行業(yè)對于構(gòu)建能夠在最少人工干預(yù)下進行深入推理并合成修復(fù)或更改的智能體產(chǎn)生了濃厚興趣。
大規(guī)模系統(tǒng)代碼調(diào)試的挑戰(zhàn)
更新大規(guī)模系統(tǒng)的代碼是一項多維度的挑戰(zhàn)。由于其固有的規(guī)模、復(fù)雜性和歷史深度,這類系統(tǒng)(如操作系統(tǒng)和網(wǎng)絡(luò)堆棧)往往由數(shù)千個相互依賴的文件組成,并經(jīng)過數(shù)十年間眾多貢獻者的優(yōu)化。這導(dǎo)致底層實現(xiàn)經(jīng)歷高度優(yōu)化,即使是最小的更改也可能引發(fā)連鎖反應(yīng)。此外,這些環(huán)境中的傳統(tǒng)bug描述通常以原始崩潰報告和堆棧跟蹤的形式呈現(xiàn),通常缺乏指導(dǎo)性的自然語言提示。
因此,在此類代碼中診斷和修復(fù)問題需要深入的上下文理解。這不僅要求掌握當前代碼的邏輯,還需要了解其過去的修改和全局設(shè)計約束。正是因為對廣泛的推理能力的依賴,大多數(shù)編碼智能體一直難以實現(xiàn)對這類系統(tǒng)的自動化診斷和修復(fù)。
現(xiàn)有編碼智能體在系統(tǒng)級崩潰中的局限性
目前流行的編碼智能體,如SWE-agent和OpenHands,可利用大語言模型進行自動化bug修復(fù)。然而,它們主要專注于較小的應(yīng)用級代碼庫。這些智能體通常依賴于人類提供的結(jié)構(gòu)化問題描述來縮小搜索范圍并提出解決方案。
像AutoCodeRover這樣的工具則使用基于語法的技術(shù)探索代碼庫。它們通常局限于特定語言,如Python,并避免涉及系統(tǒng)級的復(fù)雜性。此外,這些方法都沒有納入來自提交歷史的代碼演進洞察,而這對于處理大規(guī)模代碼庫中的遺留bug至關(guān)重要。雖然已有少數(shù)方法使用啟發(fā)式規(guī)則進行代碼導(dǎo)航或編輯生成,但它們無法在代碼庫中進行深入推理并考慮歷史背景,這限制了它們在解決復(fù)雜系統(tǒng)級崩潰時的實際效果。
Code Researcher:微軟推出的深度研究智能體
微軟研究院的研究人員推出了Code Researcher,這是一種專門針對系統(tǒng)級代碼調(diào)試的深度研究智能體。與之前的工具不同,該智能體不依賴預(yù)定義的缺陷文件知識,并完全以無輔助模式運行。它在Linux內(nèi)核崩潰基準測試和多媒體軟件項目上進行了測試,旨在評估其通用性。
Code Researcher在設(shè)計上具備執(zhí)行多階段策略的能力。首先,它通過各種探索性操作分析崩潰上下文,例如符號定義查找和模式搜索。接下來,它會根據(jù)積累的證據(jù)合成補丁解決方案。最后,它通過自動化測試機制驗證這些補丁。該智能體會利用工具探索代碼語義、識別函數(shù)流程并分析提交歷史。這是其他同類方案中缺失的一項關(guān)鍵創(chuàng)新。通過這一結(jié)構(gòu)化過程,代理不僅可以充當bug修復(fù)者,還作為自主研究員。它先期收集數(shù)據(jù)并形成假設(shè),而后才實際介入代碼庫。

三段式架構(gòu):分析、合成與驗證
Code Researcher的運作被分解為三個明確的階段:分析、合成和驗證。在分析階段,智能體開始處理崩潰報告并啟動迭代推理步驟。每個步驟包括調(diào)用工具搜索符號、使用正則表達式掃描代碼模式,并探索歷史提交消息和差異。例如,智能體可能會在完整的過往提交清單中搜索“內(nèi)存泄漏”一詞,以了解可能導(dǎo)致不穩(wěn)定性的代碼變更。它構(gòu)建的記憶具有結(jié)構(gòu),其中記錄所有查詢及其結(jié)果。
當確定已收集到足夠的相關(guān)上下文時,它將轉(zhuǎn)入合成階段。在此階段,它會過濾掉無關(guān)數(shù)據(jù),并通過從分解在多個文件中識別出一個或多個潛在故障片段生成補丁。在最終的驗證階段,這些補丁會針對原始崩潰場景進行測試,以驗證其有效性。只有經(jīng)過驗證的解決方案才會被推薦使用。

在Linux內(nèi)核和FFmpeg上的基準性能
在性能方面,Code Researcher相比其前身取得了顯著提升。在kBenchSyz基準測試中(一個由Syzkaller模糊測試生成的279種Linux內(nèi)核崩潰集合),在使用GPT-4o并設(shè)置5條軌跡執(zhí)行預(yù)算的情況下,Code Researcher解決了58%的崩潰問題。相比之下,SWE-agent的解決率為37.5%。平均而言,Code Researcher每條軌跡探索了10個文件,遠高于SWE-agent的1.33 個文件。
在90個案例子集中,在兩款智能體均修改了所有已知缺陷文件的情況下,Code Researcher解決了61.1%的崩潰問題,而SWE-agent的解決率為37.8%。此外,僅在補丁生成步驟中使用 o1(一種注重推理的模型)時,其解決率仍保持在 58%。這進一步證實了強大的上下文推理極大地提升了調(diào)試效果。該方法還在開源多媒體項目FFmpeg上進行了測試。在10個報告的崩潰中,其成功生成了7個防止崩潰的補丁,展示了其在內(nèi)核代碼之外的廣泛適用性。

Code Researcher項目的關(guān)鍵技術(shù)要點
- 平均每條軌跡探索10個文件,而基線方法僅為1.33個文件。
- 即使是在缺少預(yù)先指導(dǎo)的情況下,此智能體發(fā)現(xiàn)缺陷文件的能力同樣出色。
- 創(chuàng)新地使用提交歷史分析,增強了上下文推理。
- 適用于新的領(lǐng)域,如FFmpeg,在10個報告的崩潰中解決了7個。
- 使用結(jié)構(gòu)化記憶保留和篩選上下文以生成補丁。
- 表明深度推理智能體即使在擁有更多計算資源的情況下,性能同樣優(yōu)于傳統(tǒng)智能體。
- 通過實際重現(xiàn)崩潰的腳本驗證補丁,確保實際有效性。
結(jié)論:邁向自主系統(tǒng)調(diào)試的重要一步
概括來講,這項研究展示了在大規(guī)模系統(tǒng)軟件自動化調(diào)試方面的重大進展。通過將bug解決視為一個研究問題,配合探索、分析和假設(shè)檢驗,Code Researcher展示了未來自主智能體在復(fù)雜軟件維護中的發(fā)展方向。
它避免了先前工具的缺陷,能夠自主運行、全面檢查當前代碼及其歷史演變,并合成經(jīng)過驗證的解決方案。在解決率上的顯著提升,特別是在像FFmpeg這樣的陌生項目中,證明了所提出方法的健壯性和可擴展性。這表明軟件智能體不僅可以是被動響應(yīng)者,還可以作為調(diào)查助手,在以往被認為過于復(fù)雜而無法自動化的環(huán)境中做出強有力的智能決策。
原文標題:Microsoft AI Introduces Code Researcher: A Deep Research Agent for Large Systems Code and Commit History,作者:Asif Razzaq

































