30 秒看懂
2024 年 4 月,Matthew Berman 介绍 Princeton 团队的 SWE-agent 及其用于浏览、编辑和测试代码的定制工具。他讨论项目报告的 SWE-bench 对比,尝试配置智能体,并让它处理自身仓库中的一个问题。 Berman 在 Apple Silicon Mac 上的本地安装失败,之后在托管环境中的运行达到成本上限后停止,修复未得到验证。作者 Carlos 的另一段演示展示了一个较早的 SymPy 基准问题通过了演示中的测试。历史命令、分数和产品对比不应视为当前文档或普遍成功率。
- 1处理问题的编程智能体SWE-agent 使用语言模型和仓库工具尝试修复软件问题。
- 2历史基准快照项目图表报告使用 GPT-4 的 SWE-agent 得分为 12.29%,Devin 为 13.84%,后者只在测试集的一个子集上评估。
- 3智能体计算机界面项目介绍了代码检查器、限定范围的文件查看器、目录搜索,以及命令无输出时的明确反馈。
- 4安装问题Berman 在 Apple Silicon Mac 上配置 Docker 失败,于是改用托管环境。
- 5运行因预算中止他的运行达到设定的成本上限;视频没有证明问题已经解决。
- 6作者的独立示例Carlos 演示一个 SymPy 矩阵问题,并报告生成的补丁通过了展示的基准测试。
要点建议
- SWE-agent 为语言模型提供专门的仓库导航、编辑、搜索和反馈工具。
- 项目展示的 SWE-bench 图表报告,使用 GPT-4 的 SWE-agent 得分为 12.29%,Devin 为 13.84%,其中 Devin 只在 25% 的测试集上评估。
- Berman 在 Apple Silicon 上的配置失败,之后的运行在修复得到验证前因成本上限中止。
- 作者单独展示的 SymPy 示例复现了一个 bug、编辑代码、重新运行示例,并报告通过基准测试。
- 基准百分比是特定评估的汇总结果,不是任意问题得到修复的精确概率。
- 2024 年的配置说明和 API 价格属于历史信息;供应商访问方式和成本取决于当前配置。
按章节阅读整理后的全文
SWE-agent 与基准测试
Berman 介绍 Princeton 项目并讨论其历史 SWE-bench 图表。图中 Devin 的结果使用了测试集的一个子集。
我介绍 SWE-agent,这是 Princeton 团队围绕智能体计算机界面设计的编程智能体项目。它的目标是为语言模型提供处理 GitHub 问题的工具:检查仓库、尝试复现问题、编辑文件并提出修复。这些是项目希望提供的能力,并不承诺每个问题都能解决。
项目展示的 SWE-bench 图表报告,使用 GPT-4 的 SWE-agent 解决了 12.29% 的问题,Devin 的结果为 13.84%。图表脚注说明 Devin 的结果只在 SWE-bench 测试集的 25% 上评估。这些由项目展示的历史结果评估范围不同,因此仅凭图表无法确定普遍适用的正面排名。

项目展示了智能体读取问题、复现涉及转换为 R 的问题、搜索相关文件并编辑可能的源文件。我对这种逐步交互印象深刻,因为模型必须在仓库中找到有用的部分,而不是在一个提示中接收整个代码库。
团队将结果部分归因于为语言模型设计的命令和反馈。我将大型仓库中寻找相关上下文的挑战与 Aider 等工具进行比较,我说 Aider 使用 Universal Ctags。问题在于如何提供足够有用的代码,同时不让模型信息过载。
为模型设计的工具
智能体计算机界面包含文件查看、搜索、编辑反馈和语法检查。Berman 考虑了理解大型仓库的挑战。

项目介绍了一个代码检查器:如果编辑引入语法错误,就会阻止该编辑继续。自定义文件查看器每次显示约 100 行,并提供滚动和文件内搜索命令。我怀疑代码片段是否总能提供足够上下文,但作者报告认为这一界面很有用。
另一个目录搜索命令会返回简洁的匹配结果;没有输出的命令则会收到明确的成功信息。我把这一套工具看作智能体的小型定制开发环境。这些界面选择由项目介绍;视频没有通过独立实验分别测量每项选择的效果。
配置环境
Berman 演示 Docker、Conda、仓库配置和凭据设置。他在 Apple Silicon 上安装失败后,转到托管环境继续。
在 2024 年的配置过程中,我先准备 Docker 和 Miniconda,在终端克隆仓库,根据环境文件创建项目的 Conda 环境并激活,然后运行设置脚本构建 Docker 镜像。这些是当时版本展示的步骤,后续版本可能不同。

尽管起初我称赞了打包好的配置,但在 Apple Silicon Mac 上,我无法解决一个与 Miniconda 有关的 Docker 错误。我转而使用 Lightning,并说明它没有赞助视频,随后在那里完成镜像构建。切换环境是我在演示中采用的变通方法,并不能证明错误的确切原因。
我在项目目录中创建密钥配置文件,并配置 GitHub token 和本次测试使用的 OpenAI 密钥。界面还列出了其他可选供应商密钥。这套配置针对演示的版本;凭据和供应商设置取决于实际环境。
中断的问题处理过程
智能体检查自身仓库中的一个问题并编辑代码。修复得到验证前,运行达到成本上限。
我指定模型、配置文件和 SWE-agent 自身仓库中的一个问题 URL 来运行智能体。这个问题涉及缺失的 `base_commit` 记录。智能体初始化环境,开始阅读问题和仓库文件。
智能体识别出报告的键错误,并使用内置查看命令浏览一个很长的文件。它滚动经过多个位置后找到相关方法,随后提出编辑并注意到一个重复设置。我觉得这一过程很有趣,但运行过程和提出的补丁并不能证明解决方案有效。

运行在超过配置的 2 美元成本上限后停止。我看到智能体作出修改的迹象,但没有完成验证来证明提出的修复解决了问题。项目的汇总基准分数不能解读为这个具体问题被修复的精确概率。
我注意到成本上限可以配置,并说希望使用本地模型来避免同样的托管 API 费用。当时我没有找到直接的本地模型选项,并推测未来版本可能让这件事更容易。本地推理仍然存在硬件和运营成本。
作者的 SymPy 演示
Carlos 展示另一个基准示例,从复现矩阵 bug 到提交补丁并展示测试结果。
另一段演示来自一位自我介绍为 Carlos 的作者,他使用 SWE-bench 中一个 SymPy 问题,涉及 `Matrix.col_insert` 的异常输出。他把问题发送给智能体,然后讲解同一示例此前的一次运行。
Carlos 展示智能体根据问题创建复现脚本,并确认异常行为。智能体搜索仓库、打开矩阵实现,并确定插入函数是值得调查的位置。

智能体发现索引问题,应用编辑并重新运行复现脚本。Carlos 说输出现在符合预期。智能体删除临时复现文件,并提交建议的代码差异以进行基准评估。


Carlos 报告,提交的补丁通过了此前失败的测试,也没有破坏 SWE-bench 评估中展示的现有测试。这是作者选择的单个演示,与我中断的运行不同,也不能保证未来的问题都能解决。
同频道的其他文章
34:21EN → 简体中文
25:50EN → 简体中文
32:20EN → 简体中文
1:03:37EN → 简体中文
0:53EN → 简体中文
0:22EN → 简体中文