前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SWE-agent 可修复GitHub问题的AI代理

SWE-agent 可修复GitHub问题的AI代理

作者头像
山行AI
发布2024-04-11 19:24:48
3520
发布2024-04-11 19:24:48
举报
文章被收录于专栏:山行AI

SWE-agent

👋 概述

SWE-agent 将 LMs(例如 GPT-4)转变为软件工程代理,可以修复真实 GitHub 仓库中的错误和问题。

在 SWE-bench[1] 上,SWE-agent 解决了 12.29% 的问题,达到了全测试集上的最佳性能。

SWE-agent 由普林斯顿大学的研究人员构建和维护。

✨ 代理-计算机接口(ACI)

我们通过设计简单的以 LM 为中心的命令和反馈格式来实现这些结果,使 LM 更容易浏览仓库、查看、编辑和执行代码文件。我们称之为代理-计算机接口(ACI),并构建 SWE-agent 仓库以便于在仓库级编码代理上迭代 ACI 设计。

就像典型的语言模型需要良好的提示工程一样,良好的 ACI 设计在使用代理时能带来更好的结果。正如我们在论文中展示的那样,没有经过良好调优的 ACI 的基线代理比 SWE-agent 表现得更差。

SWE-agent 包含了我们发现在代理-计算机接口设计过程中极为有用的特性:

1.我们添加了一个在发出编辑命令时运行的代码检查器,如果代码语法不正确,则不允许编辑命令通过。2.我们为代理提供了一个特殊构建的文件查看器,而不是让它只是列出文件内容。我们发现,当每次显示仅 100 行时,此文件查看器效果最佳。我们构建的文件编辑器具有上下滚动和在文件内进行搜索的命令。3.我们为代理提供了一个特殊构建的全目录字符串搜索命令。我们发现,对于此工具,简洁地列出匹配项非常重要——我们只列出了至少有一个匹配项的每个文件。为模型展示更多关于每个匹配的上下文证明对模型来说太混乱了。4.当命令没有输出时,我们返回一条消息,说“您的命令已成功运行且没有产生任何输出。”

请阅读我们的论文了解更多详情[2] [即将发布!]。

代码语言:javascript
复制
@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:latest3.将您的 API 令牌添加到文件 keys.cfg 中,如下所述

然后运行

代码语言:javascript
复制
请在运行此命令之前删除所有注释(以 '#' 开头的行)!
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(双斜杠)进行转义(更多信息)。

🐍 使用 conda 的设置(开发版本)

要安装开发版本:

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 .

🔑 添加你的API密钥/令牌

对于conda设置, 在这个仓库的根目录创建一个keys.cfg文件,并用你的API密钥填充它。

代码语言:javascript
复制
GITHUB_TOKEN: '这里填写GitHub Token(必填)'
OPENAI_API_KEY: '如果使用OpenAI模型,这里填写OpenAI API密钥(可选)'

如果你使用docker,可以使用-e选项将密钥传递给docker容器。

🔎 更多不同密钥的选项(点击展开) 参考以下链接,获取Anthropic、OpenAI和Github令牌的教程。

🔥 快速开始:解决现实生活中的GitHub问题!

使用这个脚本,你可以在任何GitHub问题上运行SWE-agent!

代码语言:javascript
复制
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并生成补丁。

代码语言:javascript
复制
python run.py --model_name gpt4 \
  --per_instance_cost_limit 2.00 \
  --config_file ./config/default.yaml

如果你想在SWE-bench的单个问题上运行,请使用--instance_filter选项,如下所示:

代码语言:javascript
复制
python run.py --model_name gpt4 \
  --instance_filter marshmallow-code__marshmallow-1359

🧪 评估

这一步仅适用于来自SWE-bench集的问题。要评估生成的拉取请求:

代码语言:javascript
复制
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,如对您有帮助,请帮忙点赞、关注、转发。

References

[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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 山行AI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SWE-agent
  • 👋 概述
    • ✨ 代理-计算机接口(ACI)
    • 🚀 设置
      • 🏎️ 快速设置 + 运行
        • 警告
        • 提示
      • 🐍 使用 conda 的设置(开发版本)
        • 警告
      • 🔑 添加你的API密钥/令牌
        • 提示
        • 提示
        • 警告
    • 🔥 快速开始:解决现实生活中的GitHub问题!
    • 💽 基准测试
      • 👩‍💻 推断
        • 🧪 评估
          • 其他
            • References
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档