SWE Agent
原理、架构与设计思想
轻量级语言模型代理框架,实现自动化软件工程
基本概念与功能
SWE Agent是一个轻量级框架,连接语言模型(LM)到操作系统和shell进程,通过代理-计算机接口(ACI)实现自动化软件工程任务。其核心功能包括:
- 文件编辑:允许语言模型直接编辑代码文件,实现代码修改和重构
- 命令执行:执行shell命令,运行测试、安装依赖和构建项目
- 多模态支持:处理包含图像和视频的软件问题,支持视觉内容分析
- 跨语言通用性:不依赖特定编程语言,可适应Python、JavaScript等多种语言环境
GitHub Issue
语言模型
(LM)
(LM)
修复补丁
SWE Agent的设计目标是创建一个通用、灵活的软件工程代理系统,能够处理各种类型的软件问题,从简单的bug修复到复杂的功能开发。通过将语言模型与计算机环境直接连接,SWE Agent使AI系统能够像人类开发者一样与代码库交互,理解问题并生成解决方案。
核心架构设计
SWE Agent的核心是代理-计算机接口(ACI),它为语言模型提供了一套工具和命令,使其能够与计算机环境交互。ACI架构包含以下关键组件:
消息处理
解析语言模型的输出,提取命令和参数,转换为可执行的操作
命令执行
执行解析后的命令,如文件编辑或shell操作,并捕获执行结果
结果反馈
将命令执行结果返回给语言模型,形成闭环,支持迭代优化
历史管理
维护交互历史,支持长上下文对话,避免信息丢失
SWE Agent提供三种配置,以适应不同的软件工程任务:
code
SWE-agent Base
原始版本,最初设计用于评估Python和SWE-bench任务。提供基本的文件编辑和shell命令执行功能。
javascript
SWE-agent JS
扩展Base版本,增加JavaScript编辑错误检测功能,使用ESLint进行语法检查和错误提示。
image
SWE-agent M
多模态版本,提供Web浏览器、截图和图像查看功能,支持处理包含视觉元素的软件问题。
"SWE-agent是一个轻量级框架,连接语言模型到操作系统和shell进程。它集成了一个文本基础的代理-计算机接口(ACI),使语言模型能够编辑文件并执行shell命令。"
工作原理
SWE Agent通过ACI与语言模型交互,实现自动化软件工程任务。其工作流程如下:
1
问题理解
解析GitHub issue,理解问题描述和上下文,包括文本和图像内容
2
环境探索
探索代码库结构,定位相关文件和函数,理解代码组织方式
3
方案生成
基于问题理解和环境探索,生成修复方案或功能实现代码
4
验证迭代
执行测试验证方案有效性,根据反馈迭代优化,直到问题解决
# SWE Agent工作流程伪代码
def swe_agent_workflow(github_issue):
# 1. 初始化环境和上下文
environment = setup_environment(github_issue.repository)
context = initialize_context(github_issue.description, github_issue.images)
# 2. 循环交互直到问题解决
while not issue_resolved:
# 3. 语言模型生成行动
action = language_model.generate_action(context)
# 4. 解析并执行行动
command = parse_action(action)
result = execute_command(command, environment)
# 5. 更新上下文和历史
context = update_context(context, result)
history = update_history(history, action, result)
# 6. 检查是否解决
issue_resolved = check_resolution(environment)
return generate_patch(environment)
SWE Agent支持多种命令,使语言模型能够与计算机环境交互:
基本命令: edit(编辑文件)、read(读取文件)、search(搜索内容)、run(执行shell命令)
多模态命令: open_webpage(打开网页)、screenshot(截取屏幕)、open_image(查看图像)
这些命令通过ACI转换为实际操作,使语言模型能够像人类开发者一样与代码库交互,理解问题并生成解决方案。SWE Agent的交互式方法允许语言模型根据执行结果调整策略,形成闭环优化过程。
设计思想
SWE Agent的设计体现了以下几个关键原则:
- 交互优先:强调语言模型与环境的交互,而不是固定的问题解决流程。采用"LM优先"的方法,专注于构建增强LM导航和操作环境能力的工具。
- 语言无关性:不依赖特定的编程语言或工具,使其能够适应不同类型的软件工程任务。这种设计使SWE Agent能够轻松从Python扩展到JavaScript等其他语言。
- 模块化架构:采用高度模块化的设计,各组件职责明确,便于维护和扩展。ACI作为核心接口,可以灵活添加新的命令和功能。
- 多模态支持:认识到软件工程问题常常包含视觉元素,设计了对图像和视频的支持,使语言模型能够处理更广泛的软件问题。
- 迭代优化:通过反馈循环不断优化解决方案,语言模型可以观察其操作的结果,并根据反馈调整策略。
SWE Agent设计优势
check_circle
灵活性
不依赖固定的工作流程,能够适应不同类型的软件工程任务和编程语言
check_circle
通用性
语言模型作为核心决策者,能够处理各种复杂和不可预见的问题
check_circle
多模态能力
支持处理包含图像和视频的软件问题,扩展了应用范围
传统系统局限性
cancel
固定流程
如Agentless、AutoCodeRover等采用固定的"定位-修复"工作流程,缺乏灵活性
cancel
语言依赖
严重依赖特定语言的解析工具,如Python的ast模块,难以跨语言使用
cancel
单一模态
大多只支持文本输入,无法处理包含视觉元素的软件问题
"我们的结果表明,通用性是构建LM系统的一个理想但被忽视的属性。SWE-agent的优越性能和Agentless的定位困难表明,解决问题的负担应该留在LM上,而不是被卸载到手动设计的流水线中。"
在SWE-bench M中的表现
SWE-bench Multimodal (SWE-bench M)是一个评估AI系统在视觉软件领域泛化能力的基准测试,包含617个来自17个JavaScript库的任务实例,每个实例至少包含一个图像。在这个基准测试中,SWE Agent表现出色:
| 系统 | 模型 | 解决率 (%) | 平均成本 ($) |
|---|---|---|---|
| SWE-agent M | GPT-4o | 12.2 | 2.94 |
| SWE-agent M | Claude 3.5 Sonnet | 11.4 | 3.11 |
| SWE-agent JS | GPT-4o | 9.2 | 0.99 |
| SWE-agent JS | Claude 3.5 Sonnet | 12.0 | 3.11 |
| Agentless JS | GPT-4o | 3.1 | 0.38 |
| RAG | GPT-4o | 6.0 | 0.17 |
SWE Agent在SWE-bench M中的成功可以归因于以下几个因素:
- 视觉理解能力:SWE-agent M能够处理图像和视频,这对于解决包含视觉元素的软件问题至关重要。研究表明,当模型无法访问视觉信息时,性能显著下降。
- 语言灵活性:与依赖特定语言解析工具的系统不同,SWE Agent不依赖Python特定的模块,使其能够更好地适应JavaScript的不同编程范式。
- 交互式问题解决:SWE Agent允许语言模型通过交互式探索来解决问题,而不是遵循固定的流程,这对于处理复杂和多变的软件问题更为有效。
"我们的分析发现,表现最好的SWE-bench系统在SWE-bench M上表现不佳,这揭示了视觉问题解决和跨语言泛化的局限性。最后,我们表明SWE-agent的灵活语言无关特性使其能够在SWE-bench M上大幅优于替代方案,解决了12%的任务实例,而下一个最佳系统只有6%。"
登录后可参与表态
讨论回复
0 条回复还没有人回复,快来发表你的看法吧!