出品 | 51CTO技术栈(微信号:blog51cto)
华人又来炸场了!昨天,普林斯顿的CS/NLP硕士生John Yang在Github上开源了一款堪比Devin的利器。不到一天,就在Github上斩获了1.3k 星,异常生猛。据悉,4月10日,详细的技术论文就会公开!
图片
1.让语言模型秒变编程Agent!
SWE-agent是一款用于自主解决Github存储库问题的新系统,在SWE-bench上取得了与Devin相似的准确度,平均耗时只有93s,而且重要的是,开源!!!
图片
此外,SWE-agent 通过与专用终端交互来工作,这使得它能够:
- 打开、滚动和搜索文件
- 使用自动语法检查编辑特定行
- 编写并执行测试 这个定制的界面对于良好的性能至关重要!
图片
2.大模型虽好,但也需要叠加Buff
要知道,目前如果只是简单地将 LM 连接到普通的 bash 终端效果并不好。
大模型需要精心设计的代理计算机界面(类似于人类喜欢良好的 UI 设计)才能更好地发挥威力!即使强如GPT-4,良好的代理计算机设计也很重要。
例如,当大模型弄乱缩进时,SWE-agent的编辑器会阻止它并提供反馈!
另外,团队还发现了一个重要的数字经验:对于查看文件,让 SWE-agent 一次仅查看 100 行比让它查看 200 或 300 行要好,而且比让它查看整个文件要好得多。所谓的“长文本”能力在这里好像不好用了。
SWE-agent团队的厉害之处在于,他们设计了一种代理计算机交互接口(ACI),让大模型有一个专属的定制界面。
图片
SWE-agent 将大模型(例如 GPT-4)转变为软件工程代理,可以修复真实 GitHub 存储库中的错误和问题。在完整的SWE-bench测试集上,SWE-agent 解决了12.29%的问题,在完整的测试集上实现了最先进的性能。
图片
3.Agent必备:代理计算机接口 (ACI)
通过设计简单的以大模型为中心的命令和反馈格式来实现这些结果,使大模型更容易浏览存储库、查看、编辑和执行代码文件。团队将其称为代理计算机接口(ACI),并构建 SWE 代理存储库,以便轻松迭代存储库级编码代理的 ACI 设计。
图片
大家都知道,再好的语言模型,也都需要良好的提示工程。Agent也一样,同样需要良好的ACI设计,这样可以带来更好的结果。正如我们在论文中所示,没有经过良好调整的 ACI 的基线代理的表现比 SWE 代理差得多。
在Agent-计算机界面设计过程中,SWE-agent 团队总结了几个非常有用的经验:
第一,团队添加了一个在发出编辑命令时运行的 linter,并且如果代码语法不正确,则不会让编辑命令通过。
第二,为Agent提供了一个专门构建的文件查看器,而不仅仅是cat文件。团队发现此文件查看器在每轮仅显示 100 行时效果最佳。我们构建的文件编辑器具有用于上下滚动以及在文件中执行搜索的命令。
第三,还为Agent提供了专门构建的全目录字符串搜索命令。团队发现该工具简洁地列出匹配项非常重要 - 我们只需列出至少有一个匹配项的每个文件。事实证明,向模型显示有关每场比赛的更多上下文对于模型来说太混乱了。
第四,当命令的输出为空时,我们会返回一条消息,指出“您的命令已成功运行,但未产生任何输出”。
来看看实际演示,全程无炒作!
安装也很简单,Docker+Miniconda,外加一个激活命令行:conda activate swe-agent
就可以快速体验。具体来说,运行./setup.sh以创建swe-agentdocker 镜像,然后配置文件keys.cfg也需要改动填充一下:
OPENAI_API_KEY: 'OpenAI API Key Here if using OpenAI Model (optional)'
ANTHROPIC_API_KEY: 'Anthropic API Key Here if using Anthropic Model (optional)'
GITHUB_TOKEN: 'GitHub Token Here (required)'
4.用法简单:推理和评估两个步骤
SWE-agent 管道有两个步骤:推理和评估。非常简单,第一步(推理)就是向SWE agent输入GitHub问题并返回尝试修复它的拉取请求;第二步(评估,目前仅适用于 SWE-bench 基准测试中的问题)就是评估拉取请求,看看它是否确实可以解决问题。
不管你是想跑在Github还是SWE-bench上,都会有相应的命令。
推理
对任何GitHub 问题的推理:使用此脚本,你可以在任何 GitHub 问题上运行 SWE-agent!
python run.py --model_name gpt4 \
--data_path https://github.com/pvlib/pvlib-python/issues/1603 --config_fi
SWE-bench 上的推理:在SWE-bench Lite上运行 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 基准集中的问题。要评估生成的拉取请求:
cd evaluation/
./run_eval.sh <predictions_path>
5.JimFan:提示工程2.0也许没那么重要了!
对于这一发布,英伟达高级研究经理JimFan认为,非常棒!单纯靠GPT4命令行工具进行更好手动设计就可以达到媲美Devin的精确度,没有魔法,没有炒作。
此外,Jim认为当GPT5到来时,也许指令遵循、工具使用,长上下文会更好。也许所谓“提示工程2.0”不再那么重要了!
图片
知识补充:
SWE Bench旨在提供一组不同的代码库问题,这些问题可以使用回购单元测试进行验证。完整的SWE台架测试拆分包括12个python存储库中的2294个问题提交对。
自发布以来,对于大多数在SWE工作台上进行评估的系统来说,运行每个实例可能需要大量的时间和计算。官方还发现,SWE工作台可能是一个特别困难的基准,从长远来看,这对评估LMs很有用,但对试图在短期内取得进展的系统来说却令人沮丧。
为了解决这些问题,SWE-bench发布了一个规范子集SWE-bench Lite。SWE-bench Lite包括SWE bench中的300个实例,这些实例经过采样后更加独立,重点是评估功能性错误修复。