LLM as Co-pilot:AutoDev 1.0 发布,开源全流程 AI 辅助编程

四月,在那篇《AutoDev:AI 突破研发效能,探索平台工程新机遇,我们初步拟定了 AI 对于研发的影响。我们有了几个基本的假设:

  • 中大型企业将至少拥有一个私有化的大语言模型。

  • 只有构建端到端工具才能借助 AI 实现增质提效。

围绕于这些假设,我们开始构建 AutoDev,将并将它开源。也在我的博客里,写下开发中的所有心得,以期望能帮助到国内的企业构建自己的 AI 辅助编程能力。

作为一个开源项目,还是先上 GitHub 地址:https://github.com/unit-mesh/auto-dev 。也可直接在 JetBrains IDE 的插件市场搜索:AutoDev。

介绍视频:

围绕开发者体验,设计三种辅助模式

起初,我并没有一个明确的开发蓝图。作为一个天天写代码的、所谓的专家级程序员,我是看我缺什么功能便写什么功能。

随后,围绕于所有的功能,我将其总结为三种辅助模式:

35c87f6932fcd943b917bb35cbbd8065.png

自动模式:规范化的代码生成

触发方式:自动模式都在 Context Actions 下,即与上下文相关的 actions。方式自然是那个那能的快捷键:⌥⏎ (macOS) 或者 Alt+Enter (Windows/Linux)。

设计的初衷是:类似于我们在先前设计 ClickPrompt 时的一键模式。而代码并不是像网的各种炫酷的 demo,你需要考虑团队已有的软件规范和约定,否则生成的代码依旧是不可用的。于是,围绕于可配置,以及一些隐性知识的场景,我们构建了三个体现 AutoDev 的 auto 的场景:

  • 自动 CRUD。读取需求系统的需求,由一个手动编码的 agent,来不断进行交互。寻找合适的 controller,修改方法,添加新的方法等等。当前支持 Kotlin、JavaScript 语言。

  • 自动生成测试。根据选定的类、方法,一键生成测试,并自动运行(在 RunConfiguration 合适的情况下)。当前支持 JavaScript、Kotlin、Java 语言。

  • 自动代码补全。根据光标位置,自动进行代码填充。由于精力不够,在不同语言能力有些差异,在 Java 语言下,会结合读取代码规范;在 Kotlin、Java 语言会根据参数、返回值自动添加类作为上下文;在其它语言下,会通过“类似”(不要问是不是抄的)于 GitHub Copilot、JetBrains AI Assistant 的相似度算法进行计算。

每个自动模式都包含了一系列的自动上下文工作。如下图为可见的、自动代码补全的上下文示例:

90a80491458bd636bd27c31fb4c37536.png

在这个上下文里,结合了一些配置好的规范,以及 BlogController 类相关的 field、parameters、return type,诸如 BlogService 等。

除此,还有一些隐藏的上下文,诸如于,我们在 AutoDev 配置中声名的语言:

You MUST Use 中文 to return your answer!

所以,其实吧,因为只有这么两个 “中文”,目测有大概 50% 的机率不会触发,我在考虑要不要重复三遍。

伴随模式:围绕日常体验设计

在设计伴随模式时,除了围绕于自己的需求设计,还调研、参考了一系列现有工具的实现,诸如于 AI Commit 等等。

由于,伴随模式都需要等待 LLM 返回结果,所以就都扔到 AutoDev Chat 模式下了。

51e333d940fb51b5e2e88191aee150c3.png

不过,我现在发现了在 JetBrains AI Assistant 出来之后,它成了 AutoDev 的最大竞争对手,当然也是参考对象。诸如于,下图的 Explain with AI、Explain error message with AI 的体验就做得很好。在这一点上,确实有待我进一步学习的。

088ed018038400f70906d90312664623.png

像 AutoDev,你只能选中,然后再 Fix This。

除了上述的功能,你还可以用 AutoDev 来:

  • 生成提交信息

  • 生成 release note

  • 解释代码

  • 重构代码

  • …………

总之,别人有的,AutoDev 都可以有,还可以让你直接 create DDL。

聊天模式:一个边缘的功能

在腾出了时间之后,我们重新设计(其实是借鉴了 JetBrains,谁让他不支持广大的中国区用户)了 AutoDev 的 UI,并且支持一键 Chat 的方式,如图一中的 Context Actions。

所以,这就变成了这样:

8938e344f3da8f0a6212001cbec638f1.png

你可以在这里和它聊天。

LLM as Copilot 的思考

对于现阶段来说,LLM 是一个 Copilot。它不会不改变软件工程的专业分工,但增强每个专业技术,基于AI的研发工具平台辅助工程师完成任务,影响个体工作。

f5aad833917febbbaa1be1fba8d3ef0e.png

它应该解决“我懒得做”及“我重复做”的事儿,诸如于写单元测试、编写代码、解决 issue、提交代码等等。作为一个程序员,我们应该多挖一些坑,多做一些有创造性的设计。

在 AutoDev 里,我们关注的是:AI 如何更好地辅助人类完成工作,并且它应该是伴随在工程师的 IDE 旅程上,尽可能让工程师不离开 IDE 就可以工作。

而对于 LLM as Copilot 这一理念来说,越来越多的工具将完善一点。

作为一个资深的 AI 应用工程师,我们正在思考 LLM as Co-Integrator 将如何真正的提升效能。

FAQ

如何接入国产、私有化 LLM ?

在项目的源码里,我们提供了一个 Custom LLM Server 的 Python 接口示例,需要将接口转为 AutoDev 所能接受的。由于精力有限,我只测试过公司内部部署的 ChatGLM2 等模型,所以接口并不是很完善。如果大家有其它需要,可以来 GitHub issue 讨论。

为什么只有 Intellij 版本?

作为一个开发过新的语言插件、深入过 Intellij Community、Android Studio 源码,并且优化过 Harmony OS IDE 架构的人,我真的只擅长 JetBrains IDE 的开发。

什么时候会有 VS Code 版?

简单来说:短期内不会有功能一致的版本。

虽然,我也认真研究过 VS Code、X Editor 等编辑器的源码,但是兄弟姐妹们,VS Code 只是一个编辑器,不是一个 IDE 啊,它缺少太多的接口了。而如果只是简单的功能,现有的开源版本已经有很好的实现了。

除了上面的原因,还有:

其一:集成度低,开发困难。方式 1:VS Code 的 Tokenization 引擎是基于 TextMate 语法,由 Oniguruma 结合又长又臭的正则表达式实现,非常不靠谱;方式 2:基于 LSP 引擎,据我先前所试的,远景很美好。

其二:没有可供参考的代码和实现样板。如我们的 README 所提及:JetBrain plugin development is no walk in the park! Oops, we cheekily borrowed some code from the GitHub Copilot, JetBrains Community version and the super cool JetBrains AI Assistant plugin in our codebase. But fret not, we are working our magic to clean it up diligently!

所以,理想的方式是像 GitHub Copilot 一样,开发一套 IDE 无关的 Agent 机制,结合 TreeSitter 来实现编程语言相关的处理。

其它

AutoDev 的思想是将 LLM(Large Language Model)作为辅助开发者的 Copilot,通过提供辅助工具来解决一些繁琐的任务,让工程师能够更专注于有创造性的设计和思考。

欢迎加入 AutoDev 的开发:https://github.com/unit-mesh/auto-dev

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

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

相关文章

STM32入门——定时器

内容为江科大STM32标准库学习记录 TIM简介 TIM(Timer)定时器定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时&…

【Docker】性能测试监控平台搭建:InfluxDB+Grafana+Jmeter+cAdvisor

前言 在做性能测试时,如果有一个性能测试结果实时展示的页面,可以极大的提高我们对系统性能表现的掌握程度,进而提高我们的测试效率。但是我们每次打开Jmeter都会有几个硕大的字提示别用GUI模式进行负载测试,而且它自带的监视器效…

系统架构设计师-软件架构设计(7)

目录 大型网站系统架构演化 一、第一阶段:单体架构 到 第二阶段:垂直架构 二、第三阶段:使用缓存改善网站性能 1、缓存与数据库的数据一致性问题 2、缓存技术对比【MemCache与Redis】 3、Redis分布式存储方案 4、Redis集群切片的常见方式 …

c++ boost circular_buffer

boost库中的 circular_buffer顾名思义是一个循环缓冲器,其 capcity是固定的当容量满了以后,插入一个元素时,会在容器的开头或结尾处删除一个元素。 circular_buffer为了效率考虑,使用了连续内存块保存元素 使用固定内存&#x…

为什么要选择文件传输软件?有哪些最佳高速文件传输软件?

是否经历过这样的场景,正在努力地完成工作任务,但是由于制作的数据无法及时传送给合作伙伴,工作流程被打断了?这听起来很令人沮丧,对吧?可是,这种情况在现实中并不罕见。 因此,需要…

OpenCv.js(图像处理)学习历程

opencv.js官网 4.5.0文档 以下内容整理于opencv.js官网。 简介 OpenCV由Gary Bradski于1999年在英特尔创建。第一次发行是在2000年。OpenCV支持c、Python、Java等多种编程语言,支持Windows、Linux、Os X、Android、iOS等平台。基于CUDA和OpenCL的高速GPU操作接口也…

java泛型和通配符的使用

泛型机制 本质是参数化类型(与方法的形式参数比较,方法是参数化对象)。 优势:将类型检查由运行期提前到编译期。减少了很多错误。 泛型是jdk5.0的新特性。 集合中使用泛型 总结: ① 集合接口或集合类在jdk5.0时都修改为带泛型的结构② 在实例化集合类时…

Unity数字可视化学校_昼夜(三)

1、删除不需要的 UI using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class EnvControl : MonoBehaviour {//UIprivate Button btnTime;private Text txtTime; //材质public List<Material> matListnew Li…

docker中的jenkins去配置sonarQube

docker中的jenkins去配置sonarQube 1、拉取sonarQube macdeMacBook-Pro:~ mac$ docker pull sonarqube:8.9.6-community 8.9.6-community: Pulling from library/sonarqube 8572bc8fb8a3: Pull complete 702f1610d53e: Pull complete 8c951e69c28d: Pull complete f95e4f8…

Java课设--学生信息管理系统(例2)

文章目录 前提一、运行效果二、代码获取 前言 首先确定自己的JDBC连接数据库已经完成&#xff0c;不懂可以看看其他博主的解析。 我使用的是SQL Server数据库&#xff0c;数据库名称为stu,账号为sa,密码为123456 数据库的表为student表&#xff0c;内容如下&#xff1a; 一、…

Linux 信号signal处理机制

Signal机制在Linux中是一个非常常用的进程间通信机制&#xff0c;很多人在使用的时候不会考虑该机制是具体如何实现的。signal机制可以被理解成进程的软中断&#xff0c;因此&#xff0c;在实时性方面还是相对比较高的。Linux中signal机制的模型可以采用下图进行描述。 每个进程…

Selenium自动化测试框架的搭建

说 起自动化测试&#xff0c;我想大家都会有个疑问&#xff0c;要不要做自动化测试&#xff1f; 自动化测试给我们带来的收益是否会超出在建设时所投入的成本&#xff0c;这个嘛别说是我&#xff0c;即便是高手也很难回答&#xff0c;自动化测试的初衷是美好的&#xff0c;而测…

ELK、ELFK日志分析系统

菜单一、ELK简介1.1 ELK组件说明1.1.1 ElasticSearch1.1.2 Kiabana1.1.3 Logstash 1.2 可以添加的其它组件1.2.1 Filebeat1.2.2 缓存/消息队列&#xff08;redis、kafka、RabbitMQ等&#xff09;1.2.3 Fluentd 1.3 为什么要用ELK1.4 完整日志系统的基本特征1.5 ELK 的工作原理 …

Linux初识网络基础

目录 网络发展 认识“协议 ” 网络协议 OSI七层模型&#xff1a; TCP/IP五层&#xff08;或四层&#xff09;模型 网络传输基本流程 网络传输流程图&#xff1a; 数据包封装和封用 网络中的地址 认识IP地址&#xff1a; 认识MAC地址&#xff1a; 网络发展 1.独立…

【云原生】Docker-compose中所有模块学习

compose模块 模板文件是使用 Compose 的核心&#xff0c;涉及到的指令关键字也比较多。但大家不用担心&#xff0c;这里面大部分指令跟 docker run 相关参数的含义都是类似的。 默认的模板文件名称为 docker-compose.yml&#xff0c;格式为 YAML 格式。 version: "3&quo…

STM32单片机蓝牙APP宠物自动喂食器定时语音提醒喂食系统设计

实践制作DIY- GC00162---蓝牙APP宠物自动喂食器 一、功能说明&#xff1a; 基于STM32单片机设计---蓝牙APP宠物自动喂食器 二、功能说明&#xff1a; STM32F103C系列最小系统板LCD1602显示器DS1302时钟模块5个按键语音播报模块ULN2003步进电机模块LED灯板HC-05蓝牙模块&#x…

检查网站是HTTP那种协议与获取域名的ipv6地址

前言 最近在做HTTPS的应用&#xff0c;可能需要使用ipv6的地址做SLB&#xff0c;但是怎么检查配置正确&#xff0c;总不能每次都看日志吧&#xff0c;实际上客户端也很容易查看&#xff0c;总结工作经验。 检查HTTP协议版本 笔者想到了使用浏览器方式&#xff0c;或者抓包&a…

春秋云镜 CVE-2020-26042

春秋云镜 CVE-2020-26042 Hoosk CMS v1.8.0 存在sql注入漏洞 靶标介绍 Hoosk CMS v1.8.0 install/index.php 存在sql注入漏洞。 启动场景 漏洞利用 SQL注入POC POST /install/index.php HTTP/1.1 Host: xxxx User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; r…

如何使用 ChatGPT 规划家居装修

你正在计划家庭装修项目&#xff0c;但不确定从哪里开始&#xff1f;ChatGPT 随时为你提供帮助。从集思广益的设计理念到估算成本&#xff0c;ChatGPT 可以简化你的家居装修规划流程。在本文中&#xff0c;我们将讨论如何使用 ChatGPT 有效地规划家居装修&#xff0c;以便你的项…

Ajax入门

文章目录 axios体验axios-查询参数常用请求方法数据提交 axios错误处理 axios体验 引入axios库 使用axios语法 axios({url: 目标资源地址 }).then((result)>{// 对服务器返回的数据做后续处理 })完整实例 <!DOCTYPE html> <html lang"en"><head&g…