开源AI程序员SWE-Agent的实现方法

1 引子

前几天,AI 编程机器人 Devin 引起了热议。传言称:程序员的饭碗就要丢了。这两天,一个类似功能的产品 SWE-Agent 开源,在 SWE-Bench 上实现了与 Devin 类似的效果。下面让我们来看看 AI 程序员的具体实现方法。

2 信息

  • 地址:https://github.com/princeton-nlp/SWE-agent
  • 功能:修复 Github 库 Issue 中的问题。

3 原理

作者提出了:Agent-Computer Interface (ACI) 代理计算机接口。优化了 Agent 与计算机之间的衔接,使LLM 能够访问、查看、编辑和执行代码文件

贡献如下:

  • 添加了编辑时运行命令的 Linter,如果语法不正确,则不允许编辑命令通过。
  • 为 Agent 提供了文件查看器,在每个回合只显示 100 行时,查看器效果最佳。作者构建的查看器支持上下文滚动,并且可以在文件中进行搜索。
  • 为 Agent 提供了专门构建全目录字符串搜索命令,并发现以简洁的方式列出匹配项很重要。因为每次向模型展示每个匹配项反而会给模型带来更大混乱。
  • 当命令的输出为空时,将返回一条消息指出:命令已成功运行,但未产生任何输出。

4 安装使用

PLAINTEXT

1
2
3
4
$ git clone https://github.com/princeton-nlp/SWE-agent
$ cd SWE-agent
$ ./setup.sh # 安装 docker 环境,用于Agent调试程序,image 不到 1G。
# 运行方法详见 README.md

在运行时,将 github issue 地址提供给推理工具,该工具将尝试解决问题。setup.sh 文件创建了一个简单的运行环境,Agent 可以在此修改和调试程序,而不会影响宿主机环境。有关与 docker 的交互,请参见下面的代码分析部分。

5 代码分析

整个项目包含 3500 行 Python 代码和 700 行 Shell 代码。其中核心部分是 sweagent 目录下的 2200 行 Python 代码。每个重要的地方都有 README 文件,非常贴心。

可能是由于代码场景与聊天场景存在明显差异,因此未使用 langchain 等库,并且依赖的库数量较少。上下文和记忆主要是自己实现的。这里主要关注作为“接口”时 Agent 如何与环境进行交互。似乎所有交互都在 sweagent 目录实现。

  • sweagent/evviroment
    • swe_env.py:主要是与 docker 环境交互,以操作 shell 命令为主;flake8 检查代码;好像是用 popen 方式实现了与 docker 内部更为复杂的交互操作。
    • utils.py:操作 docker 的工具函数。
  • sweagent/agent 则是与大模型交互部分
    • agents.py:主调入口,调用编辑器,运行代码的程序,其中 Agent 为核心类。
    • models.py:底层支持 gpt,claude, llama 等多种 LLM。
    • command.py:运行命令。
    • parsing.py:解析 LLM 返回结果。
    • history_processors.py:记录执行历史。

6 观后感

之前对 agent 与系统交互只有个模糊的概念,从 SWE-Agent 代码里可以看到具体的实现方法。

公平地说,GitHub issue 中有些问题并不容易解决,因为涉及到复杂的运行环境和前后操作,以及只能在特定条件下才能复现,而 SWE-Bench 相对简化了这些问题,提供了评测的基线,内眼可见最近 AI 在这个领域进步,进一步证明了大型模型的能力,并指明了未来努力的方向。

不过 GitHub 上那些受欢迎的代码通常适用于各种情况,而大多数程序员每天面对的只是固定环境和较小规模的代码。所以他解决我们日常问题可能也够用了。

从 SWE-Agent 中可以看到,并非一定需要颠覆性改变,而是通过解决关键性问题、进行小改进以及多次尝试所积累的经验方法,加在一起效果就是好。

展望一下:参考 RAG 到 RAG2.0,通过微调模型来优化搜索的方法。后面 Agent 用得多了,大概也会关注通过微调模型让 Agent 更好工作的逻辑。见前文:强化学习+大模型_总结篇;另外,在看 Devin 介绍视频的时候,还看到一些 Devin 连网搜索资料和操作浏览器的功能。最近也有很多人在跟进这方面的研究,估计后面也会成为一个热点。

对于程序员和设计者来说,后面可能也面临角度的转换:可能不只关注如何实现一个完整的系统,更多地关注如何将各种功能包装成高内聚的模块,并且做好接口和文档,以便将其与 Agent 集成到更大的系统中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/800401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抖音电商罗盘品牌人群运营策略指南

【干货资料持续更新,以防走丢】 抖音电商罗盘品牌人群运营策略指南 部分资料预览 资料部分是网络整理,仅供学习参考。 抖音运营资料合集(完整资料包含以下内容) 目录 品牌人群运营策略,旨在帮助品牌通过精细化运营提…

深度学习笔记【订阅前必读】

一、同款pdf版本笔记使用情况 pytorch深度学习(共计169页,基于本人听完B站小土堆PyTorch深度学习快速入门教程所写) 发现这一份B站小土堆Pytorch深度学习笔记连985、211等高校同学都在使用(语雀在线版,笔记带评论) 二、笔记获取优…

vscode连接远程服务器一直需要输密码,但是连不上

问题:vscode连接远程服务器一直需要输密码,但是连不上。 解决办法:kill 掉该远程服务器,然后再重新连接 操作: windows: ctrlshiftp mac:cmdshiftp 调出指令,然后选择“Remote SSH:Kill Vscode Serve…

【代码随想录】day37:递增数字,监控二叉树

递增数字 def monotoneIncreasingDigits(self, n):""":type n: int:rtype: int"""# 找到不递增的位置i对应的数字k,前一个数字-1,后面都变为9,# 后序遍历nlist(str(n))for i in range(len(n)-1,0,-1):# 如果不递增if n[i]…

SpringMVC--概述 / 入门

目录 1. SpringMVC简介 2. 配置&入门 2.1. 开发环境 2.2. 创建maven工程 2.3. 手动创建 web.xml 2.4. 配置web.xml 2.4.1. 默认配置方式 2.4.2. 扩展配置方式 2.5. 创建请求控制器 2.6. 创建springMVC的配置文件 2.7. 测试 HelloWorld 2.7.1. 实现对首页的访问…

基于java+springboot+vue实现的教学辅助系统(文末源码+Lw)23-225

摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱,出错率高,信息安全性差&#…

健康元 穿越周期看底色

中国创新药正在迈进2.0时代。 进入2024年之后,越来越多的国内创新药企开始主动调整研发管线,缩减研发开支,甚至是直接被“溢出”了市场。 在“风向标”的融资端,过去的2023年也是中国创新药融资市场连续第二年出现一二级市场融资…

逆向入门:为CTF国赛而战day03

今天来做几道题目。 环境准备:ida ,Exeinfo,万能脱壳器(后面有写资源) 强推,亲测有效CTF小工具下载整理_ctf工具御剑下载-CSDN博客 [网站BUUCTF] 目录 题目一 题目二三 题目4:新年快乐 题目一 easyre题解_easyr…

电脑硬件 - 硬盘

硬盘是一台电脑的数据中心,存放着我们用户的所有文件和数据 对于一块硬盘,其重要指标:顺序读写能力,随机读写能力 顺序读写影响大文件的拷贝,随机读写影响大量小文件的拷贝(打开软件的快慢) 因…

【算法详解】双指针

双指针 常见的双指针有两种形式,一种是对撞指针,一种是左右指针。 1. 双指针简介 双指针(Two Pointers):指的是在遍历元素的过程中,不是使用单个指针进行访问,而是使用两个指针进行访问&#…

chrome google浏览器添加插件扩展失败怎么办,无法从该网站添加应用、扩展程序和用户脚本确定,

无法从该网站添加应用、扩展程序和用户脚本确定 chrome google浏览器添加插件扩展失败怎么办,无法从该网站添加应用、扩展程序和用户脚本确定, 需要打开调试模式 chrome://extensions/

第32篇:实时时钟

Q:本期我们使用BCD计数器设计实现分--秒--厘秒实时时钟。 A:实时时钟设计:在2个七段数码管上显示分钟(从0到59),在2个七段数码管显示秒(从0到59),在2个七段数码管上显示…

信息工程大学第五届超越杯程序设计竞赛(同步赛)vp

目录 A.遗失的旋律 C.财政大臣 D.实验室有多少人 E.在雾中寻宁静 F.不规则的轮回 G.完美数字 M.Monikas game A.遗失的旋律 思路&#xff1a;模拟即可 代码如下&#xff1a; #include<bits/stdc.h>using namespace std; #define fs first #define sc second #de…

目标检测——RCNN系列学习(一)

前置知识 包括&#xff1a;非极大值抑制&#xff08;NMS&#xff09;、selective search等 RCNN [1311.2524] Rich feature hierarchies for accurate object detection and semantic segmentation (arxiv.org)https://arxiv.org/abs/1311.2524 1.网络训练 2.推理流程 3.总…

Vant使用自定义图标(阿里图标)

前言 阿里图标官网 备用地址&#xff1a; https://www.iconfont.cn/ 添加图标 1、进入官网添加图标&#xff0c;如箭头所示 2、复制如图选中的文件&#xff0c;粘贴项目中的src/assets/icon_font/目录下 3、在main.js引入图标css //引入自定义图标 import /assets/icon_fon…

基于springboot教师人事档案管理系统,2024年最新基于web的毕业设计题目代码

管理员 教师端 目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 研究现状 2 1.3 研究意义 3 第2章 相关技术 4 2.1 系统开发平台 5 2.2 平台开发相关技术 6 第3章 系统分析 7 3.1 系统目标 8 3.2系统流程和逻辑 9 第4章系统概要设计 10 4…

Linux虚拟主机中如何进行扫描检查恶意软件

看到论坛中有网友留言想要知道Linux虚拟主机上是否有扫描检测工具可以检测病毒文件或者恶意软件的。因为想要知道是否有此功能&#xff0c;以便他后去购买产品是可以更清晰的去咨询以及了解。正如这边是有使用Hostease提供商的Linux 虚拟主机&#xff0c;而cPanel中如何进行扫描…

012——LED模块驱动开发(基于I.MX6uLL)

目录 一、 硬件原理图 二、 驱动程序 三、 应用程序 四、 Makefile 五、操作 一、 硬件原理图 又是非常经典的点灯环节 &#xff0c;每次学新语言第一步都是hello world&#xff0c;拿到新板子或者学习新的操作系统&#xff0c;第一步就是点灯。 LED 的驱动方式&#xff0…

2024年阿里云优惠券(代金券)在哪里领取?

阿里云作为国内领先的云计算服务提供商&#xff0c;不仅提供了稳定、高效的云服务&#xff0c;还时常推出各种优惠活动&#xff0c;以此来吸引用户上云。其中&#xff0c;阿里云优惠券就是一种常见的优惠方式。那么&#xff0c;在2024年&#xff0c;我们该如何领取阿里云优惠券…

[开源] 基于GRU的时间序列预测模型python代码

基于GRU的时间序列预测模型python代码分享给大家&#xff0c;记得点赞哦 #!/usr/bin/env python # coding: utf-8import time time_start time.time() import numpy as np import matplotlib.pyplot as plt import pandas as pd import math from keras.models import Sequent…