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

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

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

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

































