這項(xiàng)由上海交通大學(xué)彭維涵、石雨靈、王宇航、張欣云、沈備軍和顧曉東(通訊作者)團(tuán)隊(duì)完成的開創(chuàng)性研究發(fā)表于2025年9月,論文編號為arXiv:2509.14635v1。有興趣深入了解的讀者可以通過該編號查詢完整論文。
代碼就像是程序員寫的"小說",每個(gè)函數(shù)和類就是其中的章節(jié)。傳統(tǒng)的AI系統(tǒng)在理解代碼時(shí),就像只能讀懂單獨(dú)的段落,卻無法理解整本小說的情節(jié)發(fā)展。上海交通大學(xué)的研究團(tuán)隊(duì)意識到了這個(gè)問題的嚴(yán)重性。當(dāng)程序員在實(shí)際工作中遇到問題時(shí),他們需要在成千上萬行代碼中找到相關(guān)信息,理解不同文件之間的關(guān)系,掌握整個(gè)軟件架構(gòu)。這就好比要理解一座復(fù)雜的城市,你不能只看單個(gè)建筑,而要了解街道如何連接、交通如何流動、各個(gè)區(qū)域如何協(xié)作。
現(xiàn)有的代碼問答系統(tǒng)就像只能看懂單個(gè)房間的室內(nèi)設(shè)計(jì)師,卻無法理解整棟樓的建筑風(fēng)格。這些系統(tǒng)在處理諸如CoSQA和CodeQA等基準(zhǔn)測試時(shí)表現(xiàn)不錯,但這些測試都聚焦于小的代碼片段,完全忽略了真實(shí)軟件開發(fā)中的復(fù)雜性。程序員實(shí)際工作時(shí)需要跨越多個(gè)文件進(jìn)行推理,理解軟件架構(gòu),在長距離的代碼依賴關(guān)系中找到答案。
研究團(tuán)隊(duì)構(gòu)建了一個(gè)名為SWE-QA的全新基準(zhǔn)測試,包含576個(gè)高質(zhì)量的問答對,涵蓋了意圖理解、跨文件推理和多跳依賴分析等多個(gè)維度。這就像是為AI系統(tǒng)設(shè)計(jì)了一套"城市規(guī)劃師"的考試,不再只是考察能否看懂單個(gè)建筑圖紙,而是要求它們理解整個(gè)城市的運(yùn)作機(jī)制。
為了構(gòu)建這個(gè)基準(zhǔn)測試,研究團(tuán)隊(duì)首先從11個(gè)熱門代碼倉庫中爬取了77100個(gè)GitHub問題。他們發(fā)現(xiàn),開發(fā)者在實(shí)際工作中提出的問題具有明顯的分類特征,于是構(gòu)建了一個(gè)兩層分類體系。第一層按照問題的主要類型分為"什么"(事實(shí)詢問)、"為什么"(因果解釋)、"在哪里"(位置識別)和"如何"(程序解釋)四大類。第二層則進(jìn)一步細(xì)化為12個(gè)具體的用戶意圖類別,比如依賴追蹤、設(shè)計(jì)理念闡述、算法分析等。
這種分類體系的建立過程就像是圖書館管理員整理書籍。研究團(tuán)隊(duì)首先隨機(jī)選取1000個(gè)問題進(jìn)行人工分析,通過反復(fù)的開放編碼過程識別出重復(fù)出現(xiàn)的模式和開發(fā)者意圖。然后使用強(qiáng)大的語言模型GPT-5對剩余的126415個(gè)問題進(jìn)行分類。結(jié)果顯示,"如何"類問題占比最高,達(dá)到35.2%,主要關(guān)注實(shí)現(xiàn)細(xì)節(jié);"在哪里"類問題緊隨其后,占28.4%,表明開發(fā)者經(jīng)常需要定位功能、數(shù)據(jù)流或特定標(biāo)識符;"為什么"類問題占23.1%,探究設(shè)計(jì)理念和目的;"什么"類問題占剩余的13.3%,尋求定義或架構(gòu)總結(jié)。
基于這個(gè)分類體系,研究團(tuán)隊(duì)為每個(gè)用戶意圖類別創(chuàng)建了抽象的種子模板。這些模板就像是問題生成的"配方",比如"從<類>類繼承的子類有哪些?"和"<模塊>在<條件>情況下如何實(shí)現(xiàn)<功能>?"這些模板捕捉了重復(fù)出現(xiàn)問題的本質(zhì),為生成多樣化、針對特定倉庫的問題實(shí)例提供了藍(lán)圖。
問題實(shí)例化的過程就像是根據(jù)菜譜制作不同口味的菜肴。研究團(tuán)隊(duì)使用tree-sitter這個(gè)語言無關(guān)的解析工具來解析每個(gè)代碼倉庫的結(jié)構(gòu),生成一個(gè)類型化的核心元素及其關(guān)系圖。這個(gè)圖包括倉庫、文件、代碼片段、類、方法、屬性、函數(shù)、參數(shù)和變量等節(jié)點(diǎn),邊則表示包含關(guān)系。每個(gè)函數(shù)還跟蹤它調(diào)用的函數(shù)和調(diào)用它的函數(shù),每個(gè)文件記錄其導(dǎo)入內(nèi)容,揭示文件間的依賴關(guān)系。
通過選擇一個(gè)焦點(diǎn)元素周圍的緊湊子圖,并將其與第一階段的種子模板結(jié)合,研究團(tuán)隊(duì)能夠生成針對特定上下文的問題。子圖提供了簽名、定義、類成員關(guān)系、文件路徑、導(dǎo)入和傳入傳出調(diào)用等信息,確保提供充足的上下文而不會讓提示過于復(fù)雜。
答案收集階段采用了檢索增強(qiáng)生成的流程。研究團(tuán)隊(duì)首先為每個(gè)問題建立目標(biāo)倉庫代碼元素的綜合索引,包括函數(shù)、類及其相互依賴關(guān)系。使用這個(gè)索引,他們通過語義相似性匹配和結(jié)構(gòu)依賴分析的組合來檢索相關(guān)的代碼片段、文檔和架構(gòu)元數(shù)據(jù),確保為答案生成提供豐富相關(guān)的上下文。
在獲得檢索到的上下文后,研究團(tuán)隊(duì)利用強(qiáng)大的語言模型,在人類專家使用Cursor等工具的協(xié)助下,生成初步答案。這個(gè)過程由強(qiáng)調(diào)事實(shí)準(zhǔn)確性、完整性和嚴(yán)格遵循提供上下文的提示指導(dǎo)。提示明確指示模型引用代碼位置,避免引入檢索材料中不存在的信息,從而最大限度地減少幻覺現(xiàn)象。
數(shù)據(jù)驗(yàn)證過程就像是出版社的編輯審核流程。所有初步的問答對都要經(jīng)過嚴(yán)格的數(shù)據(jù)驗(yàn)證過程,由熟悉目標(biāo)倉庫的經(jīng)驗(yàn)豐富的開發(fā)者進(jìn)行。在LLM驅(qū)動工具如Cursor的協(xié)助下,審查員仔細(xì)驗(yàn)證每個(gè)聲明的事實(shí)準(zhǔn)確性,評估解釋的完整性,并完善語言的清晰度和精確性。這種人在回路的方法允許進(jìn)行細(xì)致的修正,確保每個(gè)答案不僅正確而且易于理解。
經(jīng)過修訂后,問答對還要經(jīng)過最終的過濾步驟。如果問答對未能達(dá)到質(zhì)量標(biāo)準(zhǔn)就會被丟棄,過濾標(biāo)準(zhǔn)包括但不限于模糊或表述不當(dāng)?shù)膯栴}、修訂后仍然事實(shí)錯誤或不完整的答案,或者無法充分基于倉庫代碼和文檔的答案。研究團(tuán)隊(duì)還強(qiáng)制執(zhí)行跨倉庫的Level-1類別平衡,每個(gè)倉庫產(chǎn)生正好48個(gè)最終配對。
最終的SWE-QA基準(zhǔn)測試包含了來自12個(gè)多樣化Python倉庫的576個(gè)問題,這些倉庫總共包含11335個(gè)文件、19544個(gè)類、128835個(gè)函數(shù)和超過300萬行代碼。為確保問題類型的平衡表示,研究團(tuán)隊(duì)選擇了相等數(shù)量的"什么"、"為什么"、"在哪里"和"如何"問題,每個(gè)倉庫貢獻(xiàn)48個(gè)樣本。
與現(xiàn)有的代碼問答基準(zhǔn)測試相比,SWE-QA具有根本性的突破。傳統(tǒng)基準(zhǔn)測試如CoSQA、CodeQA和CS1QA專門關(guān)注孤立的代碼片段或教育環(huán)境,根本無法解決真正的倉庫級代碼模塊理解問題。即使是支持多跳推理的CodeQueries,也只在孤立的Python函數(shù)內(nèi)操作,沒有跨文件依賴關(guān)系。最近的大規(guī)模努力如ProCQA和InfiBench從StackOverflow收集數(shù)據(jù),但仍然局限于一般編程任務(wù),沒有針對倉庫結(jié)構(gòu)。
雖然CoReQA通過從GitHub問題和評論收集數(shù)據(jù)在倉庫級別操作,但它強(qiáng)調(diào)問題解決而不是代碼模塊理解。關(guān)鍵是,這些現(xiàn)有基準(zhǔn)測試都不要求模型將代碼模塊理解為倉庫內(nèi)相互連接的架構(gòu)組件。SWE-QA填補(bǔ)了這個(gè)根本空白,專門針對真正的代碼模塊理解,要求模型理解模塊如何相互作用和依賴、模塊在更廣泛代碼庫中的架構(gòu)角色,以及模塊之間的語義契約。
一、智能代理的誕生:讓AI像程序員一樣思考
為了驗(yàn)證這個(gè)基準(zhǔn)測試的有效性,研究團(tuán)隊(duì)開發(fā)了一個(gè)名為SWE-QA-Agent的智能代理系統(tǒng)。這個(gè)代理就像是一個(gè)會編程的偵探,能夠在復(fù)雜的代碼倉庫中進(jìn)行系統(tǒng)性的搜索和推理。
傳統(tǒng)的問答系統(tǒng)就像是只能查字典的學(xué)生,只能根據(jù)給定的信息片段回答問題。而SWE-QA-Agent更像是一個(gè)經(jīng)驗(yàn)豐富的程序員,會主動地在代碼庫中尋找線索,分析不同文件之間的關(guān)系,逐步構(gòu)建對整個(gè)系統(tǒng)的理解。
這個(gè)代理系統(tǒng)基于ReAct框架構(gòu)建,將推理、行動和觀察整合到一個(gè)迭代循環(huán)中。代理的認(rèn)知過程由四個(gè)基本行動驅(qū)動。ReadFile行動讓代理能夠檢查倉庫內(nèi)特定文件的內(nèi)容,這是進(jìn)行底層代碼理解的主要機(jī)制,代理可以執(zhí)行cat和grep等標(biāo)準(zhǔn)命令行工具,實(shí)現(xiàn)精確的內(nèi)容檢索和模式匹配。GetRepoStructure行動通過檢索倉庫文件和目錄結(jié)構(gòu)的層次表示來促進(jìn)高層結(jié)構(gòu)理解,通過執(zhí)行tree命令為代理提供可在整個(gè)推理過程中參考的全局上下文地圖。SearchContent行動利用檢索增強(qiáng)生成流程,使用商業(yè)級代碼嵌入模型voyage-code-3,將代理的搜索能力提升到超越簡單關(guān)鍵詞匹配的抽象概念層面。Finish行動標(biāo)志著答案任務(wù)的完成,表明代理已經(jīng)從收集的信息中綜合出最終答案或達(dá)到預(yù)定義的最大迭代次數(shù)。
代理的工作流程就像是一個(gè)熟練的偵探破案過程。首先進(jìn)行廣泛的SearchContent行動來檢索最相關(guān)的代碼片段,建立初始上下文。然后代理進(jìn)入探索和精化的循環(huán),在每一步中分析當(dāng)前上下文以形成思考,然后戰(zhàn)略性地選擇行動來獲得高層結(jié)構(gòu)概覽或檢查具體實(shí)現(xiàn)細(xì)節(jié)。每個(gè)行動的輸出作為觀察,逐步豐富代理的理解。這個(gè)迭代循環(huán)持續(xù)進(jìn)行,直到代理確定已收集足夠證據(jù)來構(gòu)建綜合答案,此時(shí)它調(diào)用Finish行動來綜合并返回最終回應(yīng)。
工作流程的關(guān)鍵原則是保持目標(biāo)導(dǎo)向,緩解上下文過載并防止無目的探索以確保效率。代理被配置為每個(gè)問題最多進(jìn)行5次推理-行動迭代,所有語言模型解碼溫度設(shè)置為0以避免隨機(jī)性的影響。
二、六大模型同臺競技:誰能真正理解代碼
研究團(tuán)隊(duì)選擇了六個(gè)廣泛認(rèn)可的大型語言模型進(jìn)行評估,包括Devstral-Small-1.1、Qwen2.5-Coder-32B-Instruct、Qwen2.5-72B-Instruct、DeepSeek-V3、GPT-4o和Claude 3.7 Sonnet。這些模型涵蓋了專有模型和開源模型,包括通用目的和代碼專門變體。此外,還包括兩個(gè)商業(yè)編程工具Tongyi Lingma和Cursor作為系統(tǒng)級基準(zhǔn)。
每個(gè)模型在四種不同設(shè)置下進(jìn)行評估。Direct設(shè)置中,模型僅接收任務(wù)指令,沒有從倉庫檢索的任何詳細(xì)上下文,這個(gè)基準(zhǔn)旨在評估模型關(guān)于目標(biāo)倉庫的內(nèi)部知識。Function Chunking RAG方法基于語義邊界對代碼進(jìn)行分區(qū),將倉庫解析為函數(shù)級塊,避免將函數(shù)拆分為單元。Sliding Window RAG方法采用滑動窗口通過將長文件分割為重疊段來提取代碼片段,這種策略有效捕獲本地和跨文件上下文。SWE-QA-Agent是研究團(tuán)隊(duì)提出的基于ReAct范式的自主代理框架,執(zhí)行迭代推理來檢索相關(guān)代碼和文檔,生成上下文感知的回應(yīng)同時(shí)保留中間推理軌跡。
評估采用了基于LLM的評價(jià)方法,使用GPT-5作為評判模型,從五個(gè)維度對答案質(zhì)量進(jìn)行評分:正確性衡量答案是否事實(shí)準(zhǔn)確,完整性衡量答案是否完全解決問題,相關(guān)性衡量答案是否與問題相關(guān),清晰度衡量答案是否結(jié)構(gòu)良好且易于理解,推理質(zhì)量衡量答案是否呈現(xiàn)連貫的推理過程。每個(gè)維度在預(yù)定義的5分量表上評分,為提高可靠性,LLM對每個(gè)實(shí)例的每個(gè)維度評估五次,通過多數(shù)投票確定最終的維度級分?jǐn)?shù),然后聚合為總體實(shí)例分?jǐn)?shù)。
實(shí)驗(yàn)結(jié)果顯示了明顯的性能差異。直接查詢語言模型而不提供倉庫上下文的基準(zhǔn)方法在所有模型上都產(chǎn)生最低分?jǐn)?shù),強(qiáng)調(diào)了基于上下文的必要性?;瑒哟翱赗AG和函數(shù)分塊RAG都通過提供相關(guān)代碼片段大幅改善性能?;诖淼姆椒⊿WE-QA-Agent通過將檢索與迭代推理相結(jié)合,在有能力的基礎(chǔ)模型上提供最強(qiáng)的提升。對于較輕量級的模型,性能通常與標(biāo)準(zhǔn)RAG相當(dāng),反映出代理規(guī)劃和工具使用引入的開銷在基礎(chǔ)模型能夠可靠遵循計(jì)劃時(shí)最有回報(bào)。
在所有模型中,Claude 3.7 Sonnet表現(xiàn)最佳,與SWE-QA-Agent結(jié)合時(shí)達(dá)到47.82的最高總分。這緊隨商業(yè)工具Cursor的45.55分。有趣的是,盡管GPT-4o聲譽(yù)良好,但與代理結(jié)合時(shí)得分39.54,不僅落后于Claude,還落后于DeepSeek V3的42.70分。這表明不同模型在軟件工程任務(wù)上具有不同的能力水平,較新的模型如Claude 3.7 Sonnet可能為代碼相關(guān)推理進(jìn)行了更好的優(yōu)化。
開源模型雖然總體上沒有超越頂級專有模型,但顯示出巨大潛力。DeepSeek V3與代理結(jié)合時(shí)看到第二大絕對改進(jìn)(+8.32),其42.70的最終得分具有很強(qiáng)的競爭力。這強(qiáng)調(diào)了代理框架帶來的重要價(jià)值,因?yàn)樗梢源蠓嵘A(chǔ)模型的能力。
商業(yè)編程工具表現(xiàn)出強(qiáng)勁性能。Cursor達(dá)到45.55的總分,成為評估中的第二佳表現(xiàn)者,僅略低于基于代理方法與Claude 3.7 Sonnet的47.82分。Tongyi Lingma也得到44.80的高分。這些工具是高度集成的系統(tǒng),可能采用高級專有語言模型和復(fù)雜的上下文檢索機(jī)制。它們令人印象深刻的結(jié)果作為基準(zhǔn),驗(yàn)證了為復(fù)雜倉庫級問答構(gòu)建集成工具增強(qiáng)系統(tǒng)的有效性。
三、人類專家的驗(yàn)證:真正的考官登場
雖然基于LLM的評價(jià)方法提供了可擴(kuò)展的評估方法,但容易受到固有偏見的影響。為了補(bǔ)充自動化指標(biāo)并獲得對答案質(zhì)量更可靠的評估,研究團(tuán)隊(duì)進(jìn)行了人類評估。他們招募了三名專業(yè)軟件工程師,每人都有四年以上的開發(fā)經(jīng)驗(yàn),且不是該論文的共同作者。研究團(tuán)隊(duì)隨機(jī)選擇了144個(gè)問題進(jìn)行這項(xiàng)研究,從12個(gè)倉庫的每個(gè)分類法類別中各抽取一個(gè)問題,構(gòu)成基準(zhǔn)測試的四分之一。
對于每個(gè)問題,參與者都會收到參考答案以及基于Claude 3.7 Sonnet模型的四種方法生成的答案:沒有上下文的基礎(chǔ)模型、函數(shù)分塊RAG、滑動窗口RAG和提出的SWE-QA-Agent。為確保公平性,答案以隨機(jī)順序呈現(xiàn),參與者不知道哪種方法生成了哪個(gè)答案。每位參與者被要求在與自動評估中使用的相同五個(gè)維度上,以10分制為144個(gè)答案評分。
人類評估的結(jié)果與基于LLM的評價(jià)結(jié)果高度一致。提出的基于代理的方法SWE-QA-Agent顯著優(yōu)于所有其他方法,達(dá)到45.51的最高總分。這證實(shí)了人類專家也發(fā)現(xiàn)代理生成的答案質(zhì)量更優(yōu)。研究團(tuán)隊(duì)觀察到,與基礎(chǔ)模型相比,SWE-QA-Agent在完整性(從4.82到8.85)和推理(從5.35到8.74)維度上有最大幅度的改進(jìn)。這表明代理的迭代檢索和推理過程在產(chǎn)生全面且邏輯合理的答案方面特別有效。雖然兩種RAG方法都顯示出比基準(zhǔn)的顯著改進(jìn),但仍然不及代理的性能,強(qiáng)調(diào)了簡單檢索對復(fù)雜倉庫級問題的局限性。
四、問題類型大揭秘:AI的強(qiáng)項(xiàng)與弱點(diǎn)
為了理解性能如何在不同類型的倉庫級問題上變化,研究團(tuán)隊(duì)使用最佳執(zhí)行方法SWE-QA-Agent進(jìn)行了分類法感知分析。結(jié)果顯示高層概念性問題和底層實(shí)現(xiàn)導(dǎo)向查詢之間存在差異。
模型在"為什么"問題上始終達(dá)到最高分?jǐn)?shù)(平均43.10),特別是"設(shè)計(jì)理念"(44.40),在與"概念/定義"相關(guān)的"什么"問題上表現(xiàn)良好(44.22)。這表明當(dāng)所需信息在自然語言中明確表達(dá)時(shí)模型表現(xiàn)出色,比如文檔字符串、注釋或架構(gòu)說明。
需要深度程序性或位置性理解的問題性能較低。"在哪里"問題產(chǎn)生最低平均分?jǐn)?shù)(37.55),其中"數(shù)據(jù)/控制流"為36.88分。要求實(shí)現(xiàn)解釋的"如何"問題(38.15)也仍然具有挑戰(zhàn)性。這些類別通常需要重建分散的邏輯,跨文件和超越內(nèi)聯(lián)文檔的隱式控制路徑,強(qiáng)調(diào)多跳代碼追蹤和依賴推理。
這種性能差異就像是讓AI參加不同科目的考試。在"文科"類的問題上,AI可以很好地理解和總結(jié)已有的文檔和注釋,就像一個(gè)善于閱讀理解的學(xué)生。但在"理科"類的問題上,需要進(jìn)行復(fù)雜的邏輯推理和多步驟分析時(shí),AI就顯得力不從心了,就像需要解復(fù)雜數(shù)學(xué)題時(shí)一樣困難。
五、代碼倉庫大比拼:哪些項(xiàng)目最難搞定
為了評估模型的泛化能力,研究團(tuán)隊(duì)分析了它們在SWE-QA中12個(gè)不同倉庫上的性能,再次使用SWE-QA-Agent方法。結(jié)果表明,雖然性能總體一致,但可能受到每個(gè)倉庫具體特征的顯著影響。
平均而言,大多數(shù)倉庫呈現(xiàn)類似的難度水平,得分聚集在40分左右。例如,django(41.90)、matplotlib(41.08)和sphinx(40.68)顯示可比較的結(jié)果。然而,研究團(tuán)隊(duì)觀察到明顯的異常值。requests倉庫平均看起來更容易(43.72)。相反,pytest(36.76)和sqlfluff(36.72)更具挑戰(zhàn)性。這種差異與代碼庫大小、架構(gòu)復(fù)雜性、插件或鉤子系統(tǒng)、API表面清晰度和增加推理深度的非常規(guī)模式等因素一致。
某些模型對倉庫特定功能比其他模型更敏感。例如,Qwen2.5-Coder-32B模型在特定倉庫上顯示出明顯的敏感性(pytest上12.78分,sqlfluff上17.06分),而在其他倉庫如requests(41.30)上表現(xiàn)出色,表明在特定風(fēng)格下的脆弱性。相比之下,頂級執(zhí)行模型如Claude 3.7 Sonnet在所有倉庫上保持高分(46.32-49.16),展示出對不同代碼庫風(fēng)格和復(fù)雜性的更強(qiáng)穩(wěn)健性。
這種差異就像是讓同一個(gè)翻譯在處理不同語言時(shí)的表現(xiàn)。有些翻譯可能精通浪漫語言系列,但在處理亞洲語言時(shí)就會遇到困難。同樣,某些AI模型可能在處理傳統(tǒng)架構(gòu)的代碼時(shí)表現(xiàn)良好,但遇到使用插件系統(tǒng)或復(fù)雜鉤子機(jī)制的項(xiàng)目時(shí)就會力不從心。
六、真實(shí)案例分析:看AI如何破解復(fù)雜問題
為了展示答案質(zhì)量的實(shí)際差異,研究團(tuán)隊(duì)研究了一個(gè)來自sqlfluff的復(fù)雜問題:"SQLFluff如何實(shí)現(xiàn)其用于自定義規(guī)則的插件系統(tǒng)?"
基準(zhǔn)滑動窗口RAG僅檢索到關(guān)于get_rules()的片段,產(chǎn)生一個(gè)錯過核心機(jī)制的通用答案。該方法只能獲得關(guān)于get_rules()函數(shù)的有限信息,導(dǎo)致答案缺乏關(guān)鍵細(xì)節(jié),無法解釋插件系統(tǒng)的真實(shí)架構(gòu)。
相比之下,SWE-QA-Agent代理發(fā)現(xiàn)了pluggy庫的使用,并檢索了更深層的上下文,包括PluginSpec和注冊流程,使模型能夠解釋實(shí)際的架構(gòu)。代理通過假設(shè)驅(qū)動的多步搜索完成這一點(diǎn)。從get_rules()開始,它推斷出一個(gè)hookspec接口并找到帶有抽象方法的PluginSpec。然后它定位插件管理器初始化和hookspec注冊,最后驗(yàn)證第三方規(guī)則的分發(fā)入口點(diǎn)發(fā)現(xiàn)。這些相互印證的片段共同支撐最終答案,涵蓋規(guī)范/鉤子、加載/協(xié)調(diào)和外部注冊,產(chǎn)生簡潔的機(jī)制級解釋,更加完整、精確和可驗(yàn)證。
這個(gè)案例就像是兩個(gè)偵探在調(diào)查同一個(gè)案件。普通的RAG方法就像是只在案發(fā)現(xiàn)場找到一個(gè)線索就匆忙下結(jié)論的新手偵探,而SWE-QA-Agent則像是經(jīng)驗(yàn)豐富的老偵探,會系統(tǒng)地收集多方面的證據(jù),分析它們之間的關(guān)聯(lián),最終得出完整準(zhǔn)確的結(jié)論。
七、實(shí)驗(yàn)設(shè)計(jì)的周密考慮:確保結(jié)果可信
研究團(tuán)隊(duì)在實(shí)驗(yàn)設(shè)計(jì)上投入了大量心思,確保結(jié)果的可信度。他們意識到數(shù)據(jù)污染是一個(gè)主要威脅,即語言模型可能在預(yù)訓(xùn)練期間遇到過基準(zhǔn)測試數(shù)據(jù),這可能夸大性能指標(biāo)并影響公平評估。為了解決這個(gè)問題,他們采用了系統(tǒng)驗(yàn)證方法,比較模型在直接回答(不檢索)和基于RAG方法之間的性能。
分析顯示這些方法之間存在實(shí)質(zhì)性的性能差距,基于RAG的方法始終優(yōu)于直接回答基準(zhǔn)。這個(gè)顯著差距表明數(shù)據(jù)污染的影響最小,因?yàn)楸晃廴镜臉颖驹趦煞N條件下都會表現(xiàn)出類似的性能。
研究團(tuán)隊(duì)還考慮到外部有效性的威脅。評估基于來自12個(gè)熱門Python倉庫的問題,雖然覆蓋了各種類型和意圖,但可能無法完全代表不同領(lǐng)域和復(fù)雜性級別的真實(shí)用戶查詢的多樣性。為了緩解這種威脅,他們仔細(xì)選擇跨越不同領(lǐng)域的倉庫,并確保問題分類法覆蓋多樣的查詢類型和復(fù)雜性級別。
基準(zhǔn)測試專門關(guān)注Python倉庫,這可能限制發(fā)現(xiàn)對其他編程語言的一般化程度。然而,提出的方法是語言無關(guān)的,不依賴Python特定功能,建議對其他編程語言具有強(qiáng)烈的可轉(zhuǎn)移性。核心檢索和推理機(jī)制應(yīng)該在不同編程范式中保持有效。
人類評估雖然由三名經(jīng)驗(yàn)豐富的軟件工程師進(jìn)行,但可能在質(zhì)量評估中引入主觀偏見。為了最小化這種威脅,研究團(tuán)隊(duì)提供了詳細(xì)的評估指南,進(jìn)行了注釋者間一致性分析,并使用多數(shù)投票進(jìn)行最終判斷。
八、相關(guān)研究的深度對比:站在巨人的肩膀上
代碼問答領(lǐng)域已經(jīng)看到了顯著的進(jìn)步,專門方法利用語言模型和預(yù)訓(xùn)練技術(shù)來處理源代碼查詢。CodeMaster采用基于預(yù)訓(xùn)練的方法,通過任務(wù)適應(yīng)自動回答代碼問題,使用語法和語義分析將代碼注釋轉(zhuǎn)換為問答對。CIQA引入了一個(gè)編碼啟發(fā)的問答模型,學(xué)習(xí)表示和利用來自GitHub等代碼倉庫的外部API,為編程任務(wù)引入了QA文本到代碼算法。
其他方法包括將自然語言查詢與代碼片段匹配的基于檢索的方法,以及針對特定領(lǐng)域問答的微調(diào)變壓器。然而,這些方法主要關(guān)注片段級理解,缺乏處理復(fù)雜倉庫范圍推理的能力。與這些在孤立代碼元素上操作的方法相比,當(dāng)前工作通過引入倉庫級上下文感知和多跳推理能力來解決現(xiàn)有代碼問答系統(tǒng)的根本局限性。
現(xiàn)有的代碼問答基準(zhǔn)測試根本無法解決真正的倉庫級代碼模塊理解。大多數(shù)現(xiàn)有工作在更有限的范圍內(nèi)操作,片段級基準(zhǔn)測試如CodeQueries和CodeQA專門關(guān)注孤立的代碼片段或單個(gè)方法。CodeQA故意采用完整的Python函數(shù)作為答案來確保功能獨(dú)立性,而CoSQA針對函數(shù)級代碼搜索,其中每個(gè)查詢映射到單個(gè)Python函數(shù),明確避免跨文件依賴。CS1QA關(guān)注入門編程教育和基于課程的示例,而不是生產(chǎn)軟件架構(gòu)。
最近的倉庫級基準(zhǔn)測試從GitHub問題討論收集數(shù)據(jù),而不是直接建模代碼模塊關(guān)系。CodeRepoQA關(guān)注預(yù)測問題中的回應(yīng),但不評估對實(shí)際代碼模塊、文件結(jié)構(gòu)或模塊間依賴的理解。CoReQA從176個(gè)倉庫的GitHub問題和評論中收集問答對,強(qiáng)調(diào)問題解決而不是代碼理解。Spyder-CodeQA僅從單個(gè)IDE倉庫提供325個(gè)問答對,而InfiBench和ProCQA關(guān)注一般編程任務(wù)或基于StackOverflow的代碼搜索,而不針對倉庫結(jié)構(gòu)。
關(guān)鍵是,這些基準(zhǔn)測試都不要求模型將代碼模塊理解為倉庫內(nèi)相互連接的架構(gòu)組件。關(guān)于模塊接口、跨模塊數(shù)據(jù)流、架構(gòu)模式或不同代碼模塊之間語義關(guān)系的問題仍然未得到解決。為了解決這個(gè)根本差距,研究團(tuán)隊(duì)提出了SWE-QA,這是一個(gè)倉庫級代碼問答基準(zhǔn)測試,專門針對真正的代碼模塊理解。
倉庫級代碼理解已經(jīng)成為現(xiàn)代軟件工程工具的關(guān)鍵能力,現(xiàn)有方法主要關(guān)注代碼生成、翻譯和問題解決。傳統(tǒng)方法使用檢索增強(qiáng)方法從倉庫收集相關(guān)代碼上下文,而更復(fù)雜的系統(tǒng)如RepoUnderstander引導(dǎo)代理進(jìn)行系統(tǒng)導(dǎo)航和分析以實(shí)現(xiàn)綜合倉庫理解。RepoFusion通過訓(xùn)練代碼模型來整合倉庫上下文以增強(qiáng)單行完成和倉庫特定理解來推進(jìn)這種范式?;趫D的方法表示代碼結(jié)構(gòu)來捕獲跨文件關(guān)系,而基于代理的系統(tǒng)利用工具使用和導(dǎo)航來利用倉庫感知編碼協(xié)助的LLM推理能力。
然而,現(xiàn)有的倉庫理解方法主要針對代碼生成和完成任務(wù),對綜合問答能力的關(guān)注有限。雖然這些方法在上下文檢索和代碼合成方面表現(xiàn)出熟練程度,但它們?nèi)狈υu估多跳推理、架構(gòu)理解和跨文件依賴分析的系統(tǒng)評估框架,這些特征是復(fù)雜倉庫級問題的特征。相比之下,當(dāng)前的SWE-QA-Agent采用專門為倉庫級問答設(shè)計(jì)的基于ReAct的代理框架,利用迭代推理、檢索和結(jié)構(gòu)化導(dǎo)航的工具,實(shí)現(xiàn)跨代碼庫的精確多跳推理。
說到底,這項(xiàng)研究就像是為AI系統(tǒng)設(shè)計(jì)了一套全新的"駕照考試"。以前的考試只要求AI能夠識別單個(gè)交通標(biāo)志,而現(xiàn)在的考試要求它們能夠在復(fù)雜的城市道路網(wǎng)絡(luò)中規(guī)劃路線,理解交通流量,掌握整個(gè)交通系統(tǒng)的運(yùn)作規(guī)律。SWE-QA基準(zhǔn)測試和SWE-QA-Agent代理系統(tǒng)的組合,為評估和提升AI系統(tǒng)在真實(shí)軟件開發(fā)環(huán)境中的能力提供了全新的工具。
這項(xiàng)研究的意義遠(yuǎn)不止于學(xué)術(shù)層面。隨著軟件系統(tǒng)變得越來越復(fù)雜,開發(fā)者需要更智能的工具來幫助他們理解和維護(hù)代碼。SWE-QA-Agent這樣的系統(tǒng)有望成為程序員的得力助手,能夠快速回答關(guān)于復(fù)雜代碼庫的問題,幫助新開發(fā)者更快地熟悉項(xiàng)目,協(xié)助經(jīng)驗(yàn)豐富的程序員解決棘手的技術(shù)問題。
雖然目前的結(jié)果顯示了巨大的進(jìn)步,但也揭示了仍存在的挑戰(zhàn)。AI系統(tǒng)在處理需要深度推理和多步驟分析的問題時(shí)還有很大改進(jìn)空間,特別是在定位功能和追蹤復(fù)雜依賴關(guān)系方面。未來的研究方向包括擴(kuò)展到更多編程語言、整合動態(tài)倉庫更新,以及進(jìn)一步提升多跳推理能力。
研究團(tuán)隊(duì)承諾將繼續(xù)改進(jìn)和擴(kuò)展這個(gè)基準(zhǔn)測試,定期添加新的倉庫以防止數(shù)據(jù)污染,并探索更多創(chuàng)新的代理設(shè)計(jì)。他們的工作為整個(gè)AI和軟件工程社區(qū)提供了寶貴的資源,推動了這個(gè)重要研究方向的發(fā)展。有興趣的研究者和開發(fā)者可以通過GitHub倉庫獲取完整的代碼和數(shù)據(jù),為這個(gè)開放的研究生態(tài)系統(tǒng)做出貢獻(xiàn)。
Q&A
Q1:SWE-QA基準(zhǔn)測試是什么?它有什么特殊之處?
A:SWE-QA是上海交通大學(xué)團(tuán)隊(duì)開發(fā)的倉庫級代碼問答基準(zhǔn)測試,包含576個(gè)高質(zhì)量問答對,涵蓋12個(gè)Python項(xiàng)目。與傳統(tǒng)只能處理代碼片段的測試不同,它要求AI理解整個(gè)代碼庫的架構(gòu)、跨文件依賴和復(fù)雜的代碼關(guān)系,就像要求AI從理解單個(gè)房間升級到理解整棟建筑的設(shè)計(jì)理念。
Q2:SWE-QA-Agent代理系統(tǒng)是如何工作的?
A:SWE-QA-Agent就像一個(gè)會編程的智能偵探,它有四種基本技能:讀取文件內(nèi)容、獲取倉庫結(jié)構(gòu)、搜索相關(guān)內(nèi)容和完成任務(wù)。它會像經(jīng)驗(yàn)豐富的程序員一樣,在代碼庫中主動尋找線索,分析不同文件間的關(guān)系,通過多輪推理逐步構(gòu)建對整個(gè)系統(tǒng)的理解,而不是簡單地查找現(xiàn)成答案。
Q3:哪些AI模型在SWE-QA測試中表現(xiàn)最好?
A:Claude 3.7 Sonnet結(jié)合SWE-QA-Agent表現(xiàn)最佳,得分47.82分,顯示出在復(fù)雜代碼推理方面的優(yōu)勢。商業(yè)工具Cursor緊隨其后得分45.55分。有趣的是,開源模型DeepSeek V3表現(xiàn)也很出色,得分42.70分,顯示出開源模型的巨大潛力。研究發(fā)現(xiàn)AI在回答概念性問題時(shí)表現(xiàn)更好,但在需要深度推理的定位和實(shí)現(xiàn)問題上仍有困難。
好文章,需要你的鼓勵
浙江大學(xué)團(tuán)隊(duì)提出動態(tài)專家搜索方法,讓AI能根據(jù)不同問題靈活調(diào)整內(nèi)部專家配置。該方法在數(shù)學(xué)、編程等任務(wù)上顯著提升推理準(zhǔn)確率,且不增加計(jì)算成本。研究發(fā)現(xiàn)不同類型問題偏愛不同專家配置,為AI推理優(yōu)化開辟新路徑。
清華大學(xué)研究團(tuán)隊(duì)提出SIRI方法,通過"壓縮-擴(kuò)張"交替訓(xùn)練策略,成功解決了大型推理模型"話多且準(zhǔn)確率低"的問題。實(shí)驗(yàn)顯示,該方法在數(shù)學(xué)競賽題上將模型準(zhǔn)確率提升43.2%的同時(shí),輸出長度減少46.9%,真正實(shí)現(xiàn)了效率與性能的雙重優(yōu)化,為AI模型訓(xùn)練提供了新思路。
南洋理工大學(xué)與騰訊聯(lián)合研究團(tuán)隊(duì)開發(fā)出Rolling Forcing技術(shù),實(shí)現(xiàn)AI視頻實(shí)時(shí)流式生成的重大突破。該技術(shù)通過滾動窗口聯(lián)合去噪、注意力錨點(diǎn)機(jī)制和高效訓(xùn)練算法三項(xiàng)創(chuàng)新,解決了長視頻生成中的錯誤累積問題,可在單GPU上以16fps速度生成多分鐘高質(zhì)量視頻,延遲僅0.76秒,質(zhì)量漂移指標(biāo)從傳統(tǒng)方法的1.66降至0.01,為交互式媒體和內(nèi)容創(chuàng)作開辟新可能。
華中科技大學(xué)研究團(tuán)隊(duì)發(fā)現(xiàn),通過讓AI模型學(xué)習(xí)解決幾何問題,能夠顯著提升其空間理解能力。他們構(gòu)建了包含約30000個(gè)幾何題目的Euclid30K數(shù)據(jù)集,使用強(qiáng)化學(xué)習(xí)方法訓(xùn)練多個(gè)AI模型。實(shí)驗(yàn)結(jié)果顯示,幾何訓(xùn)練在四個(gè)空間智能測試基準(zhǔn)上都帶來顯著提升,其中最佳模型達(dá)到49.6%準(zhǔn)確率,超越此前最好成績。這項(xiàng)研究揭示了基礎(chǔ)幾何知識對培養(yǎng)AI空間智能的重要價(jià)值。