Salesforce软件工程智能体专家—DEI
摘要
大型语言模型(LLM)智能体在解决现实世界软件工程(SWE)问题上展现出的潜力已经不容忽视。目前,最先进的开源SWE智能体在SWE-Bench Lite测试中能够成功解决超过27%的真实GitHub问题。但有趣的是,这些复杂的智能体框架并非全能选手——它们各有侧重,在特定任务上表现亮眼,在其他任务上则可能掉链子。正是这种“偏科”现象激发了Salesforce研究团队的灵感:为什么不把它们的特长组合起来呢?于是,DEI(Diversity Empowered Intelligence)框架应运而生,它就像一个元模块,专门用来管理一群智能体,让它们协同作战。实验数据很说明问题:一组开源SWE智能体单独作战时,最大个体解决率只有27.3%,但挂上DEI后,解决率直接飙到34.3%,提升了整整25%,甚至碾压了不少闭源方案。我们表现最好的组合在SWE-Bench Lite上拿下了55%的解决率,直接登顶排行榜。这项研究为协作式AI系统如何攻克复杂软件工程难题提供了新的思路。
目录
1 简介
2 相关工作
3 集成SWE智能体的专业知识
3.1 背景说明
3.2 SWE智能体的多样性
3.3 方法论
3.3.1 软件工程师智能体问题形式化
3.3.2 我们的框架:多元化赋能智能(DEI)
3.3.3 DEIBASE:一个简单但有效的实现
4 实验
4.1 实验设置
4.1.1 基准和智能体
4.1.2 评估指标
4.2 主要结果
4.2.1 研究问题1:LLM基于SWE智能体有多种多样?
4.2.2 研究问题2:DEI对解决率有多大帮助?
4.3 消融和分析
5 结论
参考文献
1 简介
大型语言模型(LLM)最近的发展可以说是彻底改变了软件工程的玩法。最初,它们只是聊天机器人(比如Schulman等人2022年的工作,以及Team 2024年的工作),但现在已经进化成AI智能体的核心,既能理解和生成类人对话,还能在真实环境和数字世界中自主执行操作。SWE智能体就是这些AI智能体里的一个专业分支,它们把LLM的能力和软件工程工具、技术整合在一起,负责代码生成、自动化测试、项目管理等任务,目标就是识别并修复真实世界的软件问题(Zhang等人,2024年)。
本文聚焦于SWE智能体的一项具体任务:根据问题描述来解决真实的GitHub issue。在代码仓库里自动修bug,这可不是闹着玩的——你得在大规模代码库中导航,理解复杂的函数交互,揪出那些微妙的错误,最后生成正确的修复补丁。SWE智能体的动作空间极大,加上路径又长,导致不同智能体解决GitHub问题的思路千差万别,如图1所示。我们观察到,不同的SWE智能体解决的完全是不同的问题集合(见图1a的彩色网格),尽管它们的解决率差不多(图1b)。这很可能是因为每个智能体都有自己的“独门绝技”。举个例子:OpenDevin(Wang等,2024c)会明确告诉LLM先在问题里复现bug,然后在开发工作区里执行复现脚本,用运行结果来反馈生成的补丁;但其他智能体,比如Moatless Tools(Örwall,2024)和Agentless(Xia等,2024),压根不执行代码。
一个花园的美从来不会只靠一朵花。多样性——无论以何种形式——都是通往卓越的途径。
SWE智能体社区的趋势同样反映了这种多样性:没有任何一个智能体框架能在所有能力上全面称霸。正是这种百花齐放,才不断催生新想法,推动更好的智能体出现。
SWE智能体能力的多样性,直接催生了DEI(多样化增强智能)框架的诞生——它的核心就是利用不同智能体的优势。DEI通过多智能体集成系统和重新排序管道,更高效地解决更广泛的问题,如图1c所示。DEI本身是一个元模块,可以和任何现有的智能体框架集成,实现可扩展的管理和协作,打造一个更强大的多智能体软件工程组织。
图1:不同的SWE智能体(Aider、Moatless、Agentless、OpenDevin)解决的问题集差异极大(图1a的彩色网格),尽管它们的解决率相近(图1b)。我们提出的DEI委员会接收候选补丁,并尝试选出最佳的那个——类似于“神谕”选择(图1c),显著提升了解决率,优于委员会中任何单个智能体。

我们在SWE-Bench Lite上对7组候选智能体进行了DEI评估。其中3组是单个开源SWE智能体的多次运行结果,另外4组是SWE-Bench Lite排行榜上的不同智能体,包括一组纯开源智能体。实验发现,不同智能体在解决问题时的多样性非常高:一个平均解决率只有26.6%的智能体群体,如果能有一个“神谕”评审员始终选出最佳候选,它们合起来能解决54.3%的问题。作为开发多样性的第一步,DEI就能把该群体的解决率提升到34.3%(提升25%),这说明LLM确实是个出色的代码评审员。这些发现也呼应了技术行业中多样性的好处——不同的视角和技能能带来更大的创新和问题解决能力。
总结一下,我们的贡献有三点:
- ,揭示了不同智能体解决的GitHub问题类型存在显著差异,尽管整体解决率相似。这说明通过更有效地利用这些智能体的多样化专长,整体性能还有很大提升空间。
首次全面评估了SWE智能体提供的解决方案的多样性
- 本文提出了,目的就是利用SWE智能体的多样性,无缝促进具有不同专长的智能体之间的合作。通过多阶段评分和重新排序管道,DEI持续改善问题解决,在SWE-Bench Lite排行榜上实现了性能提升25%。
DEI——多智能体元策略模块
2 相关工作
这部分我们梳理一下基础语言智能体架构、近期专为软件工程开发的智能体,以及多智能体或集成方法。
基础语言智能体。
软件工程智能体。
- :构建了一个知识库图来表示代码和依赖关系,用基于蒙特卡洛树搜索的策略进行知识库探索,生成补丁来解决真实GitHub问题。
阿里巴巴灵码智能体(Ma等,2024年)
- :给智能体增加了高级代码搜索工具,比如抽象语法树和基于频谱的故障定位,增强上下文理解和问题解决能力。
AutoCodeRover(Zhang等,2024年)
- :采用预定义任务图的多智能体框架来解决GitHub问题。
Code-R(Chen等,2024年)
- :简化两阶段方法,专注于定位和修复,不依赖LLM做决策,展示了直接方法在自主软件工程中的潜力。
Agentless(Xia等,2024年)
- :一个社区贡献智能体的中心,包含CodeAct(Wang等,2024b)、浏览器智能体、GPTSwarm(Zhuo等,2024年)和特定任务的微智能体。
OpenDevin(Wang等,2024年)
- :开发了智能体计算机接口,由LM友好命令和环境反馈组成,让LM智能体能够自主使用计算机解决软件工程任务。
SWE智能体(Yang等,2024年)
多智能体和集成智能体。
第一类是静态智能体工作流(Wu等,2024年;GitHub,2023年),预定义智能体的执行流程,通过指定条件触发智能体切换。通过预定状态控制多智能体系统很稳健,但对未知状态或条件缺乏灵活性。
第二类是通过群聊实现集成(Wu等,2023年;Hong等,2024年;Wang等,2024a;Chen等,2023年)。多个智能体在群组频道中互发消息,让想法汇聚在一起。变体包括辩论(Liang等,2023年;Chan等,2023年)和基于模型的集成(Wang等,2024a)。
第三类是分层任务分配(Liu等,2024年;2023年)。将多智能体组织成分层结构有利于自上而下的任务分解,实现高效的多智能体协作。
3 集成SWE智能体的专业知识
3.1 背景说明
解决SWE-Bench中的问题。
SWE智能体。
3.2 SWE智能体的多样性
我们考虑两种类型的多样性:智能体内部多样性和智能体间多样性。
智能体内部多样性
智能体间多样性
3.3 方法论
3.3.1 软件工程师智能体问题形式化
我们根据上下文马尔可夫决策过程(CMDP)框架(Hallak等,2015)来形式化SWE智能体问题,定义为元组 M = (S, C, A, R, P, p0, ρ)。这里,S 表示状态空间,包括智能体可能遇到的所有可能状态(比如文件的当前状态)。上下文空间 C 包括相关的存储库信息和问题描述。动作空间 A 代表SWE智能体可以利用的所有潜在动作或工具(如搜索或编辑)。上下文相关的奖励函数 R:S×A×C→ℝ 根据智能体采取的动作分配分数。举个例子:如果智能体成功解决一个问题,奖励很高;如果动作导致存储库出现新错误,奖励就低。上下文相关的转移函数 P:S×A×C→Δ(S) 定义了在特定动作后存储库或信息的状态如何变化。上下文相关的初始状态分布由 p0:C→Δ(S) 表示,ρ∈Δ(C) 表示上下文分布。
给定初始环境上下文 c ~ ρ 和初始状态 s0 ~ p0(· | c),在每个时间步 t,智能体按策略 π : S×C → Δ(A) 选择动作 at ~ π(st, c),并获得奖励 R(st, at, c)。环境转移到下一个状态 st+1 ~ P(· | st, at, c),为智能体提供新的状态观测。迭代进行到时间 T,得到一条样本轨迹。SWE智能体的目标是最大化沿着轨迹的累积奖励,由价值函数捕捉。
3.3.2 我们的框架:多元化赋能智能(DEI)
很多工作都在努力实现复杂的智能体系统,以达成方程1中描述的目标。但正如第1节讨论的,这些系统在不同情境下的效果往往参差不齐。要设计一个在所有可能情境下都表现优异的单一智能体,难度极大。
形式上,假设有 N 个智能体策略 {π1, π2, ..., πN},每个策略都是为了应对特定情境 {ρ1, ρ2, ..., ρN} 而设计的。这些情境的并集是整个情境空间的子集,即 ρ1 ∪ ρ2 ∪ ... ∪ ρN ⊆ ρ。对于每个策略 πi,目标是优化在对应情境上的表现。然而,一个策略 πi 在非自身的情境 ρj (j ≠ i) 中可能表现不佳。为了解决这个问题,我们提出了DEI框架。它利用每个智能体在其各自最适合的上下文中的优势,来提升整体性能。
我们引入了一个元策略 πDEI,根据上下文最优地选择可用的智能体策略。πDEI 的目标定义为:根据观察到的上下文 c,从 {π1, π2, ..., πN} 中选择最优的智能体策略。通过为每个上下文动态选择最合适的智能体策略,DEI框架旨在最大化所有可能上下文中的期望累积奖励。
3.3.3 DEIBASE:一个简单但有效的实现
我们提出了 DEIBASE——DEI框架的一个简单而强大的实现,专门针对像 SWE-Bench 这样的问题。设置中的上下文包括存储库、相关文件和问题描述。元策略的动作空间由不同智能体框架生成的最终补丁组成,每个框架都擅长解决某个或某些方面的问题。
DEIBASE 利用一个大语言模型(LLM)作为代码审查委员会。LLM 通过分析所提议改动前后代码库的状态以及问题描述中的上下文信息来评估候选补丁。它会为每个补丁生成详细的解释,根据确定的问题、上下文和具体改动来证明修改的合理性。
当然,其他代码审查和评分方法(比如基于规则的方法)也可以整合进来,但基于LLM的委员会有独特优势。LLM 通常擅长评估解决方案——评估比生成容易时尤其如此。因此,DEIBASE 为基于LLM的SWE评估提供了一个有效基准,突出了不同SWE智能体之间的性能差异,也展示了我们方法的能力。
图2:框架概述。

如图2所示,DEIBASE为单个问题提供多个候选补丁。这些补丁可能来自同一个SWE智能体的多次运行,也可能来自多个不同的SWE智能体。DEIBASE 给每个候选补丁打分,然后选择得分最高的候选作为最可能有效的补丁。
步骤1:输入构建。
步骤2:解释生成。
问题解释
上下文解释
位置解释
补丁解释
冲突检测
步骤3:补丁评分。
4 实验
我们的实验围绕两个研究问题展开:1)基于LLM的SWE智能体在智能体内和智能体间多样性上到底有多大差异?2)DEI能在多大程度上利用这种多样性,提升这些SWE智能体的性能?
4.1 实验设置
4.1.1 基准和智能体
基准测试。
智能体。
4.1.2 评估指标
我们对智能体内部和外部多样性使用同一组指标,因为这些指标是为多个候选解决方案定义的,不要求它们来自同一个候选源。
- :衡量SWE智能体的表现,即智能体解决的问题百分比。用来衡量单个智能体和DEI的表现,以判断DEI的提升幅度。
解决率
- :衡量在智能体完全一致的最佳情况下的性能,即任何 k 个解决方案能解决的问题数量。在理想情况下,Union@k 应与 Union@1 相同。也可以看作存在一个总能选对候选者的“神谕”奖励函数 R_oracle 的情况。
Union@k
- :衡量最差情况性能,即所有 k 个解决方案都解决的问题数量。相当于存在一个“敌对”奖励函数 R_adv,它总是试图选错候选。
Intersect@k
- :衡量平均情况性能,即解决问题的平均数量,对应随机奖励函数 R_random 均匀抽样一个候选解。
A verage@k
- :衡量任何重新排序机制在从 k 个样本中选 n 个提交时解决问题的能力。重新排序机制越善于区分好坏方案,n@k 越高。对于总能选对的神谕,n@k 与 Union@k 相同;对于随机选择器,n@k 与 Union@n 相同。这里我们评估 n=1。
n@k
这些指标之间的差距能回答我们的研究问题:Union@k - Intersect@ 衡量了智能体的多样性,n@k - A verage@k 衡量了DEI在从中选出正确候选方面的帮助程度。注意,随着 k 增大,候选添加的顺序很重要,特别是当 k 个候选来自不同智能体时。实验中,我们按生成顺序添加来自单个智能体的候选,按固定顺序添加来自不同智能体的解决方案(参见附录A.1)。
4.2 主要结果
4.2.1 研究问题1:LLM基于SWE智能体有多样性吗?
为了回答这个问题,我们在图3中报告了10个不同智能体和10次单个智能体运行的“@k”指标。具体数值见表2。

图3:随着涉及更多候选解决方案,不同指标的变化情况。在所有4种场景中,Union@k和A verage@k之间存在很大差距。
从结果中能看出几点:
- 换句话说,多样性确实增强了智能。在第一个子图中,Union@k 与 A verage@k 之间的绝对/相对差异比后面三个子图大得多。对于“10个不同智能体”的设置,当 k 接近10时,解决的独特问题数量是单个智能体在组内平均解决数量的两倍。
不同智能体解决的问题比同一个智能体不同运行解决的问题更具独特性。
表1:SWE-Bench Lite中排名靠前提交的解决率。我们评估了三个由不同智能体群体组成的DEI委员会。每个DEI委员会的表现都显著优于其中最好的智能体。DEIBASE-Open由4个开源智能体组成,能击败许多闭源智能体。

4.2.2 研究问题2:DEI对提升有多大帮助?
我们将DEIBASE应用于图3中添加到组里的候选者,发现:
- 在所有子图中,对于大部分 k 值,n@k 相比于 A verage@k 都有显著提升,说明DEIBASE选择正确候选的能力远强于随机基线。
DEIBASE在大多数情况下都有帮助。
- 这与研究问题1的发现一致:由于来自多个智能体的候选有更大的改进潜力(Union@k - A verage@k),DEIBASE带来的实际改进也更大(n@k - A verage@k)。这说明在有限的候选预算下,选择不同智能体比多次运行同一个智能体更有价值。
DEIBASE在候选来自不同智能体时作用更大。
- 更大的 k 通常意味着更高的 n@k,但边际效益会递减,某些情况下增大 k 甚至可能导致性能略微下降。这表明目前的DEIBASE在大规模智能体群体上还不理想,排序机制还有改进空间。
随着 k 增大,DEIBASE的改进先增加后趋于稳定。
基于以上结论,我们组建了三个DEIBASE组,每个候选来自不同的智能体,每个实例最多有5个候选。成员和表现见表1。DEIBASE-1包含排名前2的智能体,DEIBASE-2包含5个在排行榜上表现优异的闭源智能体,DEIBASE-Open包含4个开源智能体(方便未来研究人员复现整个流程)。如表1所示,所有三个DEIBASE实例的表现都优于组中最佳候选。令人惊讶的是,DEIBASE-Open的解决率提升了7%,击败了大部分闭源系统。
表2:随着涉及更多候选解决方案,不同指标的变化情况。随着 k 增加,DEI带来的改进也显著增加。

4.3 消融和分析
为了探究框架中不同组件的有效性,我们做了一些消融实验,回答以下问题。所有消融实验都在我们自己复制的开源SWE智能体或官方生成的智能体上进行,以倡导开放科学。
问题1:DEI是否随着更多的投票而变得更好?
图4:随着为LLM提供更多评分票,DEIBASE的表现如何变化。

答案1:是的。
问题2:解释是否必要?
答案2:是的。
表3:比较DEIBASE在有和没有解释的情况下的解决率。

5 结论
本文提出了多样性增强智能(DEI),一个设计用于与任何现有SWE智能体框架集成的元策略模块,实现专业智能体之间的可扩展管理和协作,从而打造更强大的软件工程组织。通过大量评估,我们发现不同智能体在解决问题方面展现出很大的多样性:一组平均解决率只有26.6%的智能体,如果有一个总能选对候选者的“神谕”,能解决54.3%的问题。DEI是我们迈出的第一步,利用这种多样性,将该组的解决率提升到34.3%(+7%),证明LLM确实是出色的代码评审员。这些发现也映射了技术行业多样性的好处——不同的视角和技能能带来更大的创新和问题解决能力。
更广泛的影响。
-
- 关于宇宙的好的网名有哪些
- 角色扮演 | 1
- 网名