Loading...
正在加载...
请稍候

SWE Agent:原理、架构与设计思想

✨步子哥 (steper) 2025年10月06日 15:19
SWE Agent:原理、架构与设计思想

SWE Agent

原理、架构与设计思想

轻量级语言模型代理框架,实现自动化软件工程

基本概念与功能

SWE Agent是一个轻量级框架,连接语言模型(LM)到操作系统和shell进程,通过代理-计算机接口(ACI)实现自动化软件工程任务。其核心功能包括:

  • 文件编辑:允许语言模型直接编辑代码文件,实现代码修改和重构
  • 命令执行:执行shell命令,运行测试、安装依赖和构建项目
  • 多模态支持:处理包含图像和视频的软件问题,支持视觉内容分析
  • 跨语言通用性:不依赖特定编程语言,可适应Python、JavaScript等多种语言环境
GitHub Issue
语言模型
(LM)
修复补丁

SWE Agent的设计目标是创建一个通用、灵活的软件工程代理系统,能够处理各种类型的软件问题,从简单的bug修复到复杂的功能开发。通过将语言模型与计算机环境直接连接,SWE Agent使AI系统能够像人类开发者一样与代码库交互,理解问题并生成解决方案。

核心架构设计

SWE Agent的核心是代理-计算机接口(ACI),它为语言模型提供了一套工具和命令,使其能够与计算机环境交互。ACI架构包含以下关键组件:

sync_alt
消息处理
解析语言模型的输出,提取命令和参数,转换为可执行的操作
terminal
命令执行
执行解析后的命令,如文件编辑或shell操作,并捕获执行结果
feedback
结果反馈
将命令执行结果返回给语言模型,形成闭环,支持迭代优化
history
历史管理
维护交互历史,支持长上下文对话,避免信息丢失

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表现出色:

12.2%
SWE-agent M
(GPT-4o)
11.4%
SWE-agent M
(Claude 3.5)
9.2%
SWE-agent JS
(GPT-4o)
12.0%
SWE-agent JS
(Claude 3.5)
3.1%
Agentless JS
(GPT-4o)
6.0%
RAG
(GPT-4o)
系统 模型 解决率 (%) 平均成本 ($)
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 条回复

还没有人回复,快来发表你的看法吧!