科研快訊丨軟件工程智能體最新綜述來了!《Agents in SE: Survey, Landscape, and Vision》
本篇綜述的作者包括必贏3003no1線路檢測(cè)中心的鄭子彬教授、王焱林助理教授、陳嘉弛助理教授、研究生黃炎賢、鐘宛君、華為云的王千祥、馬宇馳老師、中科院楊敏副研究員、廈門大學(xué)李輝副教授、以及西安交通大學(xué)博士研究生石恩升。
近年來,大語言模型(LLM)取得了令人矚目的成就,并被廣泛應(yīng)用于各種下游任務(wù),尤其是在軟件工程(SE)領(lǐng)域的各個(gè)任務(wù)中。許多將大模型與軟工領(lǐng)域相結(jié)合的研究都顯式或隱式地涉及到了智能體的概念。基于大模型的智能體能夠感知外界環(huán)境信息并將其轉(zhuǎn)化成大模型能夠理解和處理的模式,借助其記憶、推理、檢索、學(xué)習(xí)、交互等能力,大模型能夠在各類下游任務(wù)中取得更好的表現(xiàn)。目前還缺乏相關(guān)的工作對(duì)軟工領(lǐng)域中基于大模型的智能體發(fā)展現(xiàn)狀進(jìn)行梳理。
必贏3003no1線路檢測(cè)中心聯(lián)合華為云、中科院、廈門大學(xué)以及西安交通大學(xué)共同對(duì)115篇相關(guān)的文獻(xiàn)進(jìn)行梳理,構(gòu)造了軟工領(lǐng)域中基于大模型的智能體框架。該綜述深入探討了軟件工程與智能體技術(shù)融合所面臨的主要挑戰(zhàn),同時(shí)總結(jié)了未來研究中潛在的機(jī)遇。


論文地址:
https://arxiv.org/abs/2409.09030
論文列表:
https://github.com/DeepSoftwareAnalytics/Awesome-Agent4SE
01軟工領(lǐng)域中基于大語言模型的智能體框架
如Figure 2所示,基于大模型的智能體包含三個(gè)關(guān)鍵模塊:感知、記憶和動(dòng)作。其中,感知模塊接收各種模態(tài)的外部環(huán)境信息,并將其轉(zhuǎn)換為大模型可以理解和處理的輸入形式。動(dòng)作模塊包括內(nèi)部動(dòng)作和外部動(dòng)作,分別負(fù)責(zé)根據(jù)大模型的輸入做出推理決策和根據(jù)與外部環(huán)境交互獲得的反饋優(yōu)化決策。記憶模塊包括語義記憶、情景記憶和程序記憶,可以提供額外的有用信息來幫助大模型做出推理決策。同時(shí),動(dòng)作模塊還可以通過學(xué)習(xí)動(dòng)作來更新記憶模塊中的不同記憶,為推理和檢索動(dòng)作提供更有效的記憶信息。此外,多智能體協(xié)作由多個(gè)負(fù)責(zé)部分任務(wù)的單個(gè)智能體組成,通過協(xié)作合作共同完成同一復(fù)雜任務(wù)。

感知模塊
感知模塊連接基于大模型的智能體與外部環(huán)境,是處理外部輸入的核心模塊。它可以處理文本、視覺、聽覺等不同模態(tài)的輸入,并將其轉(zhuǎn)換為基于大模型的智能體能夠理解和處理的嵌入向量格式,為基于大模型的智能體的推理和決策行為奠定基礎(chǔ)。與自然語言處理(NLP)領(lǐng)域中的文本輸入格式不同,考慮到代碼的特點(diǎn),軟工中的文本輸入格式除了基于代碼序列的輸入以外,還有如抽象語法樹(AST)、控制流圖(CFG)等基于樹或圖結(jié)構(gòu)以及混合類型的輸入。
記憶模塊
記憶模塊包括語義記憶、情景記憶和程序記憶,它們可以提供額外的有用信息來幫助大模型進(jìn)行推理決策。
(1)語義記憶(Semantic Memory)
語義記憶指基于大模型的智能體的常識(shí)或公認(rèn)的世界知識(shí)等,通常存儲(chǔ)在外部知識(shí)檢索庫中。外部知識(shí)檢索庫中可存儲(chǔ)文檔、庫、API等其他類型的信息。其中,文檔和API是外部知識(shí)庫中最常見的信息類型。通過增加相關(guān)的文檔和API知識(shí),智能體能夠更好地理解問題和做出推理決策。
(2)情景記憶(Episodic Memory)
情景記憶指的是與當(dāng)前問題相關(guān)的內(nèi)容以及來自先前決策過程的經(jīng)驗(yàn)信息等。與當(dāng)前問題相關(guān)的內(nèi)容(例如在搜索數(shù)據(jù)庫中找到的相關(guān)信息、上下文學(xué)習(xí)(ICL)技術(shù)提供的樣本等)可以為基于大模型的智能體推理提供額外的知識(shí)來更好地理解問題,先前決策過程的經(jīng)驗(yàn)信息則能夠?yàn)榛诖竽P偷闹悄荏w進(jìn)行推理決策提供參考。因此,許多工作將此類信息引入到基于大模型的智能體的推理過程中,提高推理效率和質(zhì)量。
(3)程序記憶(Procedural Memory)
程序記憶包括隱性知識(shí)和顯性知識(shí)。其中,隱性知識(shí)存儲(chǔ)在大模型參數(shù)中?,F(xiàn)有的工作通常通過大量數(shù)據(jù)訓(xùn)練模型,得到具有豐富隱性知識(shí)的預(yù)訓(xùn)練大模型來完成各種下游任務(wù)顯性知識(shí);或者,用高質(zhì)量的數(shù)據(jù)預(yù)料對(duì)已有的預(yù)訓(xùn)練大模型進(jìn)行微調(diào)得到表現(xiàn)更好的微調(diào)模型。顯性知識(shí)主要存儲(chǔ)在預(yù)先定義的智能體代碼(Agent code)中,使得智能體能夠自動(dòng)運(yùn)行,進(jìn)行獨(dú)立推理和決策。智能體代碼指的是驅(qū)動(dòng)智能體運(yùn)行、指導(dǎo)其行為和決策的程序或算法。
動(dòng)作模塊
(1)內(nèi)部動(dòng)作
內(nèi)部動(dòng)作包括推理、檢索和學(xué)習(xí)動(dòng)作。其中,推理動(dòng)作負(fù)責(zé)根據(jù)基于大模型的智能體的輸入進(jìn)行問題分析、推理和決策。檢索動(dòng)作可以從知識(shí)庫中檢索相關(guān)信息,輔助推理動(dòng)作做出正確決策。學(xué)習(xí)動(dòng)作則是通過學(xué)習(xí)和更新語義、程序和情景記憶,不斷學(xué)習(xí)和更新知識(shí),從而提高推理和決策的質(zhì)量和效率。
推理動(dòng)作:嚴(yán)謹(jǐn)?shù)耐评磉^程是基于大模型的智能體完成任務(wù)的關(guān)鍵,而思維鏈(CoT)是最主流的有效推理方式。借助思維鏈,大模型可以深入理解問題,分解復(fù)雜任務(wù),并生成高質(zhì)量的答案。如Figure 3所示,現(xiàn)有工作探索了不同形式的思維鏈,包括樸素思維鏈/計(jì)劃)(Native CoT/Plan)、結(jié)構(gòu)化的思維鏈(SCoT)、頭腦風(fēng)暴(Brainstorming)、樹形思維鏈(Tree CoT)等。具體地,樸素思維鏈/計(jì)劃是在提示(prompt)中讓大模型逐步思考,生成的回答中給出分析問題的具體過程并逐步解決問題(如Figure 3中(a)所示)??紤]到代碼的特性,一些工作提出了結(jié)構(gòu)化的推理模式來引入代碼的結(jié)構(gòu)信息,得到結(jié)構(gòu)化的思維鏈。結(jié)構(gòu)化的思維鏈以偽代碼的形式呈現(xiàn)推理過程,涉及循環(huán)、分支等邏輯結(jié)構(gòu)(如Figure 3中的(b)所示)。在提示中讓智能體進(jìn)行頭腦風(fēng)暴,利用算法、數(shù)據(jù)結(jié)構(gòu)以及數(shù)學(xué)等知識(shí)給出解決問題的關(guān)鍵詞,例如Figure 3中(c)給出了解決問題可行的算法作為頭腦風(fēng)暴的結(jié)果。樹形的思維鏈動(dòng)態(tài)地探索和更新思維鏈,樹中的節(jié)點(diǎn)涉及已完成、新建、新推斷、待定等多種狀態(tài)(如Figure 3中(d)所示)。

檢索動(dòng)作:檢索動(dòng)作可以從知識(shí)庫中檢索相關(guān)信息,以輔助推理動(dòng)作做出正確的決策。檢索所用的輸入和檢索得到的輸出內(nèi)容有不同的類型。如Table 1所示,輸入和輸出可以是文本、代碼,也可以是同時(shí)包含文本和代碼的混合信息?,F(xiàn)有的檢索方法可分為基于稀疏的檢索(sparse-based)、基于密集的檢索(dense-based)和其他方法。Figure 4分別展示了基于稀疏的檢索和基于密集的檢索流程?;诿芗臋z索方法將輸入轉(zhuǎn)換為高維向量,然后比較語義相似度以選擇具有最高相似度的k個(gè)樣本;而基于稀疏的檢索方法計(jì)算BM25或TF-IDF等指標(biāo)來評(píng)估樣本之間的文本相似度。此外,還有計(jì)算自然語言文本之間的編輯距離或代碼片段的AST等其他的檢索方法。


基于密集和基于稀疏的檢索方法是兩種最主流的檢索方法。其中,密集型檢索技術(shù)通常比稀疏型檢索方法具有更好的性能。但稀疏型檢索可以在達(dá)到與密集型檢索相當(dāng)?shù)男阅芩降幕A(chǔ)上獲得更高的檢索效率。因此,更多的工作選擇采用稀疏型檢索方法。
學(xué)習(xí)動(dòng)作:學(xué)習(xí)動(dòng)作是通過學(xué)習(xí)和更新語義和程序記憶,不斷地學(xué)習(xí)和更新知識(shí),從而提高推理和決策的質(zhì)量和效率。(1)用知識(shí)更新語義記憶。語義記憶主要存在于存儲(chǔ)基本世界知識(shí)的知識(shí)庫中,可以通過利用已識(shí)別的代碼知識(shí)更新知識(shí)庫或構(gòu)建新的知識(shí)庫來更新語義記憶。(2)更新隱性知識(shí)。由于隱性知識(shí)存儲(chǔ)在大模型參數(shù)中,因此可以通過微調(diào)模型來更新大模型參數(shù),從而更新隱性知識(shí)。(3)更新智能體代碼。基于大模型的智能體將相應(yīng)的提示構(gòu)建為智能體代碼,以規(guī)范智能體如何感知環(huán)境、推理和決策以及執(zhí)行動(dòng)作。許多工作使用指令調(diào)優(yōu)技術(shù)將大模型的輸出與輸入指令對(duì)齊。
(2)外部動(dòng)作
與開發(fā)者或其他智能體交互:智能體可以與開發(fā)者或其他智能體進(jìn)行交互,并在交互過程中獲得豐富的信息作為反饋,擴(kuò)展智能體的知識(shí)范圍并對(duì)生成的回答進(jìn)行優(yōu)化和修正。
與數(shù)字系統(tǒng)交互:智能體可以與數(shù)字化系統(tǒng)(比如OJ平臺(tái)、網(wǎng)頁、編譯器等外部工具)進(jìn)行交互,交互過程中獲得的信息可以作為反饋來優(yōu)化自身。其中,編譯器是最常見的外部工具之一,已有許多工作用編譯器編譯基于大模型的智能體生成的代碼,并將編譯得到的錯(cuò)誤信息作為反饋信息對(duì)代碼進(jìn)行優(yōu)化。
02挑戰(zhàn)和未來研究方向
本文中進(jìn)一步分析了軟工技術(shù)與智能體技術(shù)結(jié)合的現(xiàn)有挑戰(zhàn)并總結(jié)了一些未來研究中存在的機(jī)遇。
對(duì)感知模塊探索的缺乏
在介紹感知模塊時(shí)提到,軟工領(lǐng)域中探索基于大模型的智能體感知模塊的工作還很缺乏。與自然語言不同,代碼是一種特殊的表示,可以作為普通文本處理,也可以轉(zhuǎn)換為具有代碼特征的中間表示,例如 AST、CFG 等。現(xiàn)有工作通常將代碼視為普通文本,忽略了代碼特性,建模得到的代碼表示中的信息不足,限制了基于大模型的智能體在代碼相關(guān)的下游任務(wù)上的表現(xiàn)。此外,軟工領(lǐng)域中目前還缺乏對(duì)視覺和聽覺輸入模態(tài)的探索。探索如何高效建模感知模塊中基于樹/圖、視覺或聽覺等輸入模態(tài)是未來研究可行的方向之一。
基于大模型的智能體的角色扮演能力
一方面,基于大模型的智能體通常需要在不同任務(wù)中扮演不同的角色,每個(gè)角色都需要特定的技能。例如,智能體在生成代碼時(shí)扮演代碼生成器的角色,測(cè)試代碼時(shí)則扮演代碼測(cè)試員的角色。另一方面,智能體有時(shí)可能需要同時(shí)扮演多個(gè)不同角色,具備多種不同能力。例如,在代碼生成場(chǎng)景中,智能體需要同時(shí)扮演代碼生成器和代碼測(cè)試員兩個(gè)角色,具備生成和測(cè)試代碼的能力。軟工領(lǐng)域中存在各種已有大模型學(xué)習(xí)得不夠充分的小眾任務(wù)和需要智能體具備多種能力的復(fù)雜任務(wù),例如測(cè)試生成場(chǎng)景、前端開發(fā)、倉庫級(jí)代碼生成等。因此,研究如何使智能體有效地適應(yīng)新角色和管理多角色性能需求也是未來工作的一個(gè)可行方向。
公認(rèn)知識(shí)檢索庫的欠缺
外部知識(shí)檢索庫既是智能體語義記憶模塊中的重要組成部分,也是智能體交互的重要外部工具之一。在NLP領(lǐng)域,有維基百科(Wikipedia)等公認(rèn)的大型知識(shí)庫作為外部檢索庫。但在軟工領(lǐng)域,目前尚無權(quán)威的、公認(rèn)的包含豐富代碼相關(guān)知識(shí)(如各類編程語言的基本語法、各類常用算法、數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)相關(guān)知識(shí)等)的知識(shí)庫。未來研究中的一個(gè)可行方向是開發(fā)一個(gè)大型的權(quán)威代碼知識(shí)庫,并將其作為智能體的外部檢索庫,為智能體推理決策提供額外的信息,從而提高推理和決策過程的質(zhì)量和效率。
基于大模型的智能體中的幻覺問題
大模型作為基于大模型的智能體的認(rèn)知核心,其整體性能影響著智能體在各種任務(wù)中的表現(xiàn)。已有的工作表明基于大模型的智能體中可能會(huì)存在幻覺問題,例如,在做代碼生成任務(wù)時(shí)生成不存在的API。智能體性能和幻覺緩解之間存在雙向關(guān)系:幻覺問題的緩解可以提高智能體的整體表現(xiàn),同時(shí)智能體的優(yōu)化也能夠反向緩解基于大模型的智能體的幻覺。雖然目前已有一系列工作致力于研究大模型的幻覺,但解決基于大模型的智能體中的幻覺問題仍然存在挑戰(zhàn)。探索基于大模型的智能體中存在哪些類型的幻覺、深入分析這些幻覺的原因以及提出有效的幻覺緩解方法是未來研究中存在的機(jī)遇之一。
多智能體協(xié)同合作的效率問題
在多智能體協(xié)作過程中,各個(gè)智能體需要扮演不同的角色來完成特定的任務(wù),然后將各個(gè)智能體的決策結(jié)果結(jié)合起來,共同解決更為復(fù)雜的目標(biāo)。但這一過程往往需要每個(gè)智能體投入大量的計(jì)算資源,造成資源的浪費(fèi)和效率的降低。此外,各個(gè)單智能體之間各種信息的同步和共享也引入了額外的通信成本,影響協(xié)作的實(shí)時(shí)性和響應(yīng)速度。有效管理和分配計(jì)算資源、最小化智能體間通信成本、減少各個(gè)智能體的推理開銷是提升多智能體協(xié)作效率的關(guān)鍵挑戰(zhàn),這些問題的解決為未來的研究提供了重要的機(jī)會(huì)。
基于大模型的智能體中軟工技術(shù)的應(yīng)用
智能體與軟工領(lǐng)域之間存在互惠互利的關(guān)系,不僅智能體技術(shù)能夠應(yīng)用于軟工領(lǐng)域,軟工領(lǐng)域的技術(shù)(尤其是編碼技術(shù))也可以應(yīng)用到智能體中,推動(dòng)智能體領(lǐng)域的發(fā)展。例如,軟件測(cè)試技術(shù)可以用于識(shí)別基于大模型的智能體中的異常行為和潛在缺陷。軟件工具(如 API 和庫)的改進(jìn)也可以提高基于大模型的智能體(尤其是對(duì)于那些具有工具使用能力的智能體)的性能。此外,智能體系統(tǒng)的管理可以借鑒軟件包管理技術(shù)。例如,可以應(yīng)用版本控制來監(jiān)視和協(xié)調(diào)智能體系統(tǒng)中不同智能體之間的更新,從而增強(qiáng)兼容性和系統(tǒng)完整性。目前這方面的研究仍然有限,探索將更復(fù)雜的軟工技術(shù)融入智能體系統(tǒng)有助于推動(dòng)這兩個(gè)領(lǐng)域的進(jìn)步,是未來研究的可行方向之一。
綜上,本綜述對(duì)智能體技術(shù)與軟工領(lǐng)域結(jié)合的相關(guān)工作進(jìn)行了分析和梳理,構(gòu)造了包含感知、記憶、動(dòng)作三個(gè)核心模塊的軟工領(lǐng)域智能體框架,總結(jié)軟工技術(shù)與智能體技術(shù)結(jié)合存在的挑戰(zhàn)并給出了一些未來研究中存在的機(jī)遇。相信本綜述能夠?yàn)橹悄荏w和軟工領(lǐng)域的發(fā)展起到促進(jìn)作用。