Aitrainee | 公众号:AI进修生
🌟SWE-agent 将llm(例如GPT-4)转变为 软件工程代理 ,它会处理 GitHub 问题并尝试使用 GPT-4 或你选择的 LLM 自动修复它。
Github:https://github.com/princeton-nlp/SWE-agent/
Hello,大家好啊,你可能还记得认知实验室的 Devin ,这家公司正在寻求 20 亿美元 的估值,目标是打造世界上 第一个人工智能软件工程师 。虽然有几个开源项目(比如 Thea 和 open Devin)试图复制 Devin 的功能,但我们一直没有关于这些开源项目性能的数据。直到现在,出现了一个新的开源项目叫做 SWE-agent ,它代表软件工程代理,表现非常接近 Devin。
在 SWE-bench 测试中,Devin 的 最高精度是 13.86% 。SWE-agent 的表现非常接近这一数值,甚至可能在某些情况下表现得更好。Devin 团队测试了 25% 的 SWE 基准测试数据,而 SWE-agent 在整个数据集上表现良好。更棒的是,SWE-agent 只需要大约 93 秒 就能完成任务,而 Devin 需要 大约 5 分钟 。
SWE-agent 的工作原理是通过设计简单的 LM-centric 命令和反馈格式,让大模型更容易浏览仓库、查看、编辑和执行代码文件。我们称之为 🤖 Agent-Computer Interface (ACI) 。
就像语言模型需要好的提示工程一样,好的 ACI 设计 也能大大提升代理的效果。我们的研究显示,没有经过精心调试的 ACI 的基础代理表现远不如 SWE-agent。
在设计 ACI 的过程中,项目研究团队发现了一些非常有用的功能,并把它们集成到了 SWE-agent 中:
-
- 语法检查 :当编辑命令发出时,我们会运行一个 linter,如果代码语法不正确,编辑命令不会通过。
-
- 专用文件查看器 :我们为代理配备了一个特别设计的文件查看器,而不是简单地显示文件内容。这个查看器每次只显示 100 行,并且有上下滚动和搜索命令。
-
- 全目录字符串搜索命令 :这个工具可以简洁地列出每个有匹配项的文件。我们发现,如果显示太多上下文,模型反而会感到困惑。
-
- 命令反馈 :当命令没有输出时,我们会返回一条消息:“Your command ran successfully and did not produce any output.”
这个项目由普林斯顿大学的研究人员开发和维护,完全开源。他们还有一个 Discord 服务器和演示网站,大家可以去看看。从实现的角度来看,SWE-agent 非常简单和优雅。
目前,SWE-agent 专注于 GitHub repos ,未来可能会扩展到其他软件工程任务。
现如何设置和使用 SWE-agent?
-
当 SWE-agent 收到一个问题时,它会提出一个计划,比如首先复制所描述的错误。
-
它会创建一个新的文件来重现这个错误,然后运行代码看看能不能遇到同样的问题。
-
确认问题后,它会一步步找到解决方案,查看代码,找到问题所在,修复问题,最后发出拉取请求。
✨ 演示&教程
✨ 使用 SWE-agent 作为开发工具
提供了一个命令行工具和一个图形网页界面:
除了从源码安装 SWE-agent,你也可以直接使用 Docker 运行该软件。
-
- 安装 Docker,然后在本地启动 Docker。
-
- 运行
docker pull sweagent/swe-agent:latest
- 运行
-
- 将你的 API 令牌添加到文件
keys.cfg
中,如 此处 所述,或者将它们作为环境变量传递。
- 将你的 API 令牌添加到文件
运行命令行界面
假设你在当前目录中创建了 keys.cfg
,运行
docker run
--
rm
-
it
-
v
/
var
/
run
/
docker
.
sock
:/
var
/
run
/
docker
.
sock \
-
v $
(
pwd
)/
keys
.
cfg
:/
app
/
keys
.
cfg \
sweagent
/
swe
-
agent
-
run
:
latest \
python run
.
py
--
image\_name
=
sweagent
/
swe
-
agent
:
latest \
--
model\_name gpt4 \
--
data\_path https
://
github
.
com
/
pvlib
/
pvlib
-
python
/
issues
/
1603
\
--
config\_file config
/
default\_from\_url
.
yaml
--
skip\_existing
=
False
!!! 提示 "Windows" 如果你在 Windows 上使用 Docker,使用 -v //var/run/docker.sock:/var/run/docker.sock
(双斜杠)进行转义(更多信息)。
如果你想以环境变量的形式传递密钥,使用
docker run
--
rm
-
it
-
v
/
var
/
run
/
docker
.
sock
:/
var
/
run
/
docker
.
sock \
-
e GITHUB\_TOKEN
=
"yourgithubtoken"
\
-
e OPENAI\_API\_KEY
=
"youropenaikey"
\
sweagent
/
swe
-
agent
-
run
:
latest \
# 以上命令的其余部分
!!! 警告 "获取更新" 尽管镜像 sweagent/swe-agent:latest
具有 latest
标签, 但它并不会在你每次运行 docker run
时自动更新。相反, 你需要手动运行
```bash
docker pull sweagent/swe-agent-run:latest
docker pull sweagent/swe-agent:latest
```
定期更新。
!!! 提示 "检索生成的文件" 可选的 --rm
标志会在命令终止后删除 Docker 容器。因此,要从容器中检索文件(例如生成的补丁文件),请移除此标志。
运行 Web 服务器
!!! 提示 "提示" 请同时阅读上一节中的提示,了解如何传递环境变量和保持最新。
要运行 Web 服务器,请确保转发端口 3000:
docker run
-
p
3000
:
3000
-
it
-
v
/
var
/
run
/
docker
.
sock
:/
var
/
run
/
docker
.
sock \
-
v $
(
pwd
)/
keys
.
cfg
:/
app
/
keys
.
cfg \
sweagent
/
swe
-
agent
-
run
:
latest bash start\_web\_ui
.
sh
!!! 提示 "更多提示" 如果遇到问题,请参阅 安装问题部分 获取更多帮助。
知音难求,自我修炼亦艰
抓住前沿技术的机遇,与我们一起成为创新的超级个体
(把握AIGC时代的个人力量)
点这里👇关注我,记得标星哦~
一键三连「分享」、「点赞」和「在看」
科技前沿进展日日相见 ~