SWE-agent 将 LMs(例如 GPT-4)转变为软件工程代理,可以修复真实 GitHub 仓库中的错误和问题。
在 SWE-bench[1] 上,SWE-agent 解决了 12.29% 的问题,达到了全测试集上的最佳性能。
SWE-agent 由普林斯顿大学的研究人员构建和维护。
我们通过设计简单的以 LM 为中心的命令和反馈格式来实现这些结果,使 LM 更容易浏览仓库、查看、编辑和执行代码文件。我们称之为代理-计算机接口(ACI),并构建 SWE-agent 仓库以便于在仓库级编码代理上迭代 ACI 设计。
就像典型的语言模型需要良好的提示工程一样,良好的 ACI 设计在使用代理时能带来更好的结果。正如我们在论文中展示的那样,没有经过良好调优的 ACI 的基线代理比 SWE-agent 表现得更差。
SWE-agent 包含了我们发现在代理-计算机接口设计过程中极为有用的特性:
1.我们添加了一个在发出编辑命令时运行的代码检查器,如果代码语法不正确,则不允许编辑命令通过。2.我们为代理提供了一个特殊构建的文件查看器,而不是让它只是列出文件内容。我们发现,当每次显示仅 100 行时,此文件查看器效果最佳。我们构建的文件编辑器具有上下滚动和在文件内进行搜索的命令。3.我们为代理提供了一个特殊构建的全目录字符串搜索命令。我们发现,对于此工具,简洁地列出匹配项非常重要——我们只列出了至少有一个匹配项的每个文件。为模型展示更多关于每个匹配的上下文证明对模型来说太混乱了。4.当命令没有输出时,我们返回一条消息,说“您的命令已成功运行且没有产生任何输出。”
请阅读我们的论文了解更多详情[2] [即将发布!]。
@misc{yang2024sweagent,
title={SWE-agent: 代理计算机接口使软件工程语言模型成为可能},
author={John Yang 和 Carlos E. Jimenez 和 Alexander Wettig 和 Shunyu Yao 和 Karthik Narasimhan 和 Ofir Press},
year={2024},
}
我们在 Docker Hub 上的容器当前仅提供 arm64 架构。如果您在其他架构上运行,请使用下一节的带 conda 的设置说明。
您可以直接使用 Docker 运行软件。
1.安装 Docker[3],然后在本地启动 Docker。2.运行 docker pull sweagent/swe-agent:latest
3.将您的 API 令牌添加到文件 keys.cfg
中,如下所述
然后运行
请在运行此命令之前删除所有注释(以 '#' 开头的行)!
docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock
# 将 /xxxx/keys.cfg 替换为您的密钥的路径
-v /xxxx/keys.cfg:/app/keys.cfg
sweagent/swe-agent-run:latest
python run.py --image_name=sweagent/swe-agent:latest
# 命令的其余部分如快速启动/基准测试部分所示,
# 例如运行特定的 GitHub 问题
--model_name gpt4
--data_path https://github.com/pvlib/pvlib-python/issues/1603
--config_file config/default_from_url.yaml --skip_existing=False
•有关不同 API 密钥/令牌的更多信息,请参阅下文。•如果您在 Windows 上使用 docker,请使用 -v //var/run/docker.sock:/var/run/docker.sock
(双斜杠)进行转义(更多信息)。
要安装开发版本:
1.安装 Docker[4],然后在本地启动 Docker。2.克隆此仓库3.安装 Miniconda[5],然后使用 conda env create -f environment.yml
创建 swe-agent 环境4.使用 conda activate swe-agent
激活。5.运行 ./setup.sh
以创建 swe-agent docker 镜像。6.在此仓库的根目录下创建一个 keys.cfg
文件(见下文)
•预计在 Windows 上会遇到一些问题(我们正在解决)。。与此同时,只需使用 Docker(见上文)。如果您想要最新版本,您还可以使用此仓库根目录下的 Dockerfile 构建自己的 swe-agent-run
容器,运行 docker build -t sweagent/swe-agent-run:latest .
对于conda设置, 在这个仓库的根目录创建一个keys.cfg
文件,并用你的API密钥填充它。
GITHUB_TOKEN: '这里填写GitHub Token(必填)'
OPENAI_API_KEY: '如果使用OpenAI模型,这里填写OpenAI API密钥(可选)'
如果你使用docker,可以使用-e
选项将密钥传递给docker容器。
🔎 更多不同密钥的选项(点击展开) 参考以下链接,获取Anthropic、OpenAI和Github令牌的教程。
使用这个脚本,你可以在任何GitHub问题上运行SWE-agent!
python run.py --model_name gpt4 \
--data_path https://github.com/pvlib/pvlib-python/issues/1603 \
--config_file config/default_from_url.yaml
如果问题已经解决,你可以通过提供--open_pr标志让代理自动打开一个PR。请负责任地使用这个功能(在你自己的仓库或经过仔细考虑后)。
运行python run.py --help
以查看所有可用选项。
查看scripts/
文件夹,了解其他有用的脚本和详细信息。 查看config/
文件夹,了解如何定义你自己的配置的详细信息! 查看sweagent/agent/
文件夹,了解配置工作流背后逻辑的详细信息。 查看sweagent/environment/
文件夹,了解SWEEnv
环境(接口+实现)的详细信息。 查看trajectories/
文件夹,了解run.py
的输出详情。
SWE-agent流程有两个步骤。首先SWE-agent接受一个输入GitHub问题,并返回试图修复它的拉取请求。我们称这一步为推断。第二步(目前,仅适用于SWE-bench基准中的问题)是评估拉取请求,以验证它确实已经解决了问题。
目前,有一小部分仓库在arm64 / aarch64架构的计算机上无法正确安装的已知问题。我们正在努力解决这个问题,但如果你想在整个SWE-bench上运行和评估,最简单的方法是使用x86机器。
在任何GitHub问题上进行推断:见上文。
在SWE-bench上进行推断:在SWE-bench Lite[6]上运行SWE-agent并生成补丁。
python run.py --model_name gpt4 \
--per_instance_cost_limit 2.00 \
--config_file ./config/default.yaml
如果你想在SWE-bench的单个问题上运行,请使用--instance_filter
选项,如下所示:
python run.py --model_name gpt4 \
--instance_filter marshmallow-code__marshmallow-1359
这一步仅适用于来自SWE-bench集的问题。要评估生成的拉取请求:
cd evaluation/
./run_eval.sh <predictions_path>
将<predictions_path>
替换为模型的预测路径,该路径应该从推断步骤生成。<predictions_path>
参数应该看起来像../trajectories/<username>/<model>-<dataset>-<hyperparams>/all_preds.jsonl
查看evaluation/
文件夹,了解评估工作的详细信息。
本文由笔者翻译整理自:https://github.com/princeton-nlp/SWE-agent,如对您有帮助,请帮忙点赞、关注、转发。
[1]
SWE-bench: https://github.com/princeton-nlp/SWE-bench
[2]
论文了解更多详情: #
[3]
安装 Docker: https://docs.docker.com/engine/install/
[4]
安装 Docker: https://docs.docker.com/engine/install/
[5]
安装 Miniconda: https://docs.anaconda.com/free/miniconda/miniconda-install/
[6]
SWE-bench Lite: https://www.swebench.com/lite.html