AIxiv專欄是機器之心釋出學術、技術內容的欄目。過去數年,機器之心AIxiv專欄接收報導了2000多篇內容,覆蓋全球各大高校與企業的頂級實驗室,有效促進了學術交流與傳播。如果您有優秀的工作想要分享,歡迎投稿或者聯絡報導。投稿郵箱:liyazhou@jiqizhixin.com;zhaoyunfeng@jiqizhixin.com
本篇綜述的作者包括來自復旦大學 CodeWisdom 團隊的研究生劉俊偉、王愷欣、陳逸軒和彭鑫教授、婁一翎青年副研究員,以及南洋理工大學的陳震鵬研究員和伊利諾伊大學厄巴納 - 香檳分校(UIUC)的張令明教授。
自從首個全自動 AI 軟體工程師 Devin 問世以來,面向軟體工程的 AI 智慧體廣受關注、層出不窮,例如最近的 Genie、Replit、Cursor 等,它們正在對傳統軟體開發的正規化產生著深刻影響。基於大模型的 AI 智慧體(LLM-based Agents,後簡稱 Agent)透過增強推理、記憶、規劃以及使用擴充工具的能力,極大地提升了大模型解決複雜軟體開發維護任務的能力,為進一步實現自動化、智慧化的軟體開發提供了新思路。AI 智慧體正在成為軟體工程領域的研究新熱潮。
復旦大學 CodeWisdom 團隊聯合南洋理工大學、UIUC 共同對 106 篇相關文獻進行梳理和解讀,分別從軟體工程和 Agent 兩個視角全面展現了 Agent 在軟體工程領域的最新進展。從軟體工程視角,該綜述梳理了 Agent 在軟體開發全週期各個任務上的應用現狀;從 Agent 視角,該綜述展示了目前應用於軟體工程領域的 Agent 的基礎架構、多智慧體設計模式以及人機協同模式。最後,該綜述展望了 Agent 在軟體工程領域的研究機會與發展方向。
論文地址:https://arxiv.org/pdf/2409.02977
Agent4SE 論文列表:https://github.com/FudanSELab/Agent4SE-Paper-List
一、Agent 覆蓋軟體開發維護全流程
如圖 1 所示,目前 Agent 已基本覆蓋了軟體開發和維護的全流程,不僅可以解決某個特定的軟體開發環節(例如靜態檢查和測試),而且在應對更復雜的端到端的軟體開發和維護任務上也表現出了巨大潛力,包括:
端到端軟體開發(End-to-end Software Development):Agent 透過執行多種開發子任務,包括需求工程、設計、程式碼生成和質量保證(包括靜態檢查和測試等),完成從需求到最終程式的全流程開發。
端到端軟體維護(End-to-end Software Maintenance):Agent 支援多種維護活動,如故障定位、修復和特性維護,完成從問題報告到補丁生成的端到端維護。
圖 1: 軟體開發與維護任務流程上的 Agent 分佈
端到端軟體開發
目前面向端到端軟體開發的 Agent 主要模擬真實的軟體開發團隊,設計不同的軟體開發角色,互相協作共同完成軟體開發任務。
表 1: 面向端到端軟體開發任務的 Agent 文獻列表
其中,有些 Agent 在工作流設計上主要遵循了現實軟體開發中常見的軟體過程模型,包括瀑布模型和敏捷開發(測試驅動開發和 Scrum)。
圖 2: 面向端到端軟體開發的 Agent 中採用的過程模型
端到端軟體維護
目前,面向端到端軟體維護任務的 Agent 遵循著 “缺陷定位 - 補丁生成 - 補丁驗證” 的基本工作流程;在此基礎上,不同 Agent 選擇性地引入了預處理、故障重現、任務分解、補丁排名等步驟。
表 2: 面向端到端軟體維護任務的 Agent 文獻列表
圖 3: 面向端到端軟體維護任務的 Agent 中常用的工作流
這類 Agent 往往以 SWE-bench 及其衍生的資料集作為評測基準。
圖 4: 端到端維護軟體任務的資料集演化示意圖
特定的軟體開發 / 維護任務
除了端到端的軟體開發和維護任務,目前 Agent 在面向單個特定的軟體開發或維護環節也有著廣泛應用,包括需求工程、程式碼生成、程式碼靜態檢查、測試、缺陷定位與修復等。該綜述梳理了面向特定不同軟體開發 / 維護任務的 Agent 的工作流。
圖 5: 面向特定軟體開發 / 維護環節的 Agent 工作流
二、面向軟體工程的 Agent 設計
根據 Agent 的基礎結構劃分(即 規劃(Planning)、記憶(Memory)、感知(Perception)、行動(Action)),該綜述進一步總結目前面向軟體開發和維護的 Agent 在每部分的設計特點。
Agent 中的常用工具
為了進一步提升 Agent 在軟體開發和維護任務上的能力,目前 Agent 的行動模組中整合和使用了大量的工具,主要包括搜尋、檔案操作、靜態程式分析、動態分析、測試、版本管理工具等。
圖 6: 面向軟體開發和維護的 Agent 中的常用工具分類
人機協作正規化
目前在面向軟體開發維護任務上,開發者和 Agent 的協作主要發生在規劃、需求工程、開發和評估四個環節。主要的協同方式,是由人類提供反饋,引導、澄清或直接糾正 Agent 的輸出。
圖 7:面向軟體開發和維護任務的 Human-Agent 協作正規化
三、未來的研究方向
該綜述進一步探討了面向軟體開發和維護的 Agent 的未來研究方向。
更全面的評測基準和更真實的評測資料。當前針對軟工任務的 Agent 的評測主要集中在其端到端解決特定任務的能力上,缺少對決策過程和失敗原因的深入分析,以及對魯棒性等可信指標以及效率指標的關注。此外,當前用於評測 Agent 的資料集也存在一些問題,如邏輯過於簡化,與現實場景相差較遠等。因此,設計更多樣化的評估指標和構建更高質量、更現實的資料集基準是準確評估 Agent 能力的重要方向。
探索人機協同新正規化。當前針對軟工任務的 Agent 人機協同主要侷限於需求工程、設計、測試評估等環節,同時缺少對高效友好的互動介面的系統研究。因此,未來研究可關注於擴充人機協同的應用場景,以及提供更加流暢的人機協作模式。
多模態感知。目前針對軟工任務的 Agent 主要依賴於文字或視覺感知。探索和整合多樣化的感知模態,如語音命令或使用者手勢,會顯著提高 Agent 編碼助手的靈活性和可訪問性。
將 Agent 應用於更多軟工任務。儘管現有的 Agent 已經被部署在各種軟工任務中,但一些關鍵階段(如設計、驗證和功能維護)仍未被充分探索,為這些階段開發 Agent 系統可能會面臨各方面的新挑戰。
訓練面向軟體工程的基座大模型。目前 Agent 通常構建在以通用資料或者程式碼資料為主要訓練資料的大模型之上,而軟體開發的全週期往往涉及設計、架構、開發者討論、程式動態執行、歷史演化等程式碼以外的重要資訊。有效利用這些資訊可以構建面向軟體工程領域的基座大模型,從而在此基礎上構建更強大的面向軟體開發與維護的 Agent。
將軟體工程領域知識融入 Agent 設計。正如最近 Agentless 研究所揭示,流程複雜且高度自主的 Agent 在某些軟體維護任務上的效果不如基於傳統缺陷定位和程式修復流程所設計的簡單工作流。軟體工程領域的經典方法論和思想對於設計 Agent 的工作流有著重要的借鑑和指導意義,可以進一步提高 Agent 解決方案的有效性、魯棒性和效率。