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


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

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

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


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