AutoDev 1.8 融合 DevOps 规范和实践,构建演进式 AI 辅助编码

在新版本的 AutoDev 中,我们又融入了一系列软件开发的实践,以更好地辅助开发人员的日常工作。这些新的特性,融合了我们对于 AI 辅助编码的新理解。诸如于:

  • 重构:AI 重命名、坏味道重构、重构建议。

  • 提交信息优化:结合用户输入的,提交信息生成

  • CLI 生成:结合用户输入的,生成 CLI 命令

还要最重要的中文 prompt 支持 —— 以更好地适应国内的模型和开发习惯,以及一系列的 bugfix 和新特性。

演进式 AI 辅助编码

生成式 AI 辅助编码的两条技术路线是:重新生成还是代码变更。Unit Mesh 是我们设计的 AI 编码的重新生成架构范式,当来了新需求时,每次都生成新的代码。哪怕是重新生成的效果再好,也受限于生成式 AI 的能力。因此,在实际落地的过程中,AutoDev 这样的辅助代码变更工具,才是当前适合于我们的演进路径。

acc962cfa06accc90a61fe08977f6edb.png

代码变更,意味着我们需要人类和 AI 能理解现有的代码,以做出合适的决策建议。而如果我们预期 AI 能理解代码、需求,并编写出规范化的代码, 就依赖于我们构建了研发的知识工程体系。两个典型的场景是:现有需求总结和重构。

  • 现有需求总结。理解用户输入,检索到对应的现有代码实现逻辑,由AI 来总结已有的逻辑实现

  • 重构。AI 重构的难度介于自动生成代码与架构设计之间,是一个非常不错的探索场景。

尽管结合 RAG 技术,可以提供足够没用的信息,以生成可能更适用用户意图的信息,但是并不适合开发人员的日常高频场景上使用。因此,如何在 AI 辅助工具中构建规范与最佳实践,并内建软件开发知识工程,以拉升基线水平是一个非常有意思的挑战。

引子 1:如何让 AI 更好地重构出理想的代码?

如果你探索过使用 AI 来构建代码时,你会发现:AI 懂的重构手法你都懂,但是看别人使用 AI 重构似乎非常顺手。这是为什么呢?重构通常依赖于好的上下文,即需要开发人员拥有大量的先验经验。简单来说就是:表达意图与构建意图所有的上下文

78cb4ff520abd91675b58d04b980aa80.png

简单来说,当你缺少一个代码改进的方向时,无法给 AI 一个明确的意图,剩下的就要靠 AI 随机了 —— 因此,大部分情况下,AI 只是进行简单的重命名、方法提取之类基本的重构手法。而:

  • 如果你告诉 AI,你要重构多个 if 到策略模式,那么它就会给你生成策略模式的代码。

  • 如果你给了 AI 对应的继承关系,那么它就会考虑到继承关系。

  • 如果你给了 AI 一些坏味道,那么它就会考虑到坏味道。

理解这一点,在工具上实现辅助重构就变得非常简单了。

引子 2:AI 辅助理解需求与实现

在研发数字化程度足够高时,我们可以轻松从一个线上的日常位置,自动关联到对应的需求变更原因。即从线上的日记信息,关联到发布与构建信息、代码库, 结合代码的变更行数,再结合变更信息(提交信息),找到对应的需求。

然,现实是遇到以下的两类场景,你就跪了:

  • AI 理解现有需求。大量的系统中,需求是没有有效记录(细节等)的,最后以代码中的实现为主。

  • AI 匹配需求变更点。代码中必然存在大量的 yydsSort、cxkdlq 词汇,这一类词汇连人类也是无法理解的。

这两类场景,都是从 1-60 的能力辅助范围,可以大大节省我们的时间。可是,我们可能会遇到的问题是,我们处于的位置是 0 的阶段,缺少对应的数字化。

融合规范、实践的工具落地

为了解决上述的多种问题,我们引入了一系列的新特性,以将规范、实践、软件知识工程融合到我们的工具中。

示例 1:提交信息生成,构建研发孪生

eacfc147ba7ef39067a5063a43c60c62.png

在“标准”的 DevOps 实践中,在流水线门禁中,限制提交信息的格式,以保证提交信息的质量。因为代码的变更提交信息直接关联到了需求与代码的关系, 对于研发数字化来说,是一个非常重要的环节。在结合 AI + IDE 时,过程应该是:

  1. IDE 中接入内部 OA 系统,以获取当前的用户信息。

  2. 根据用户信息,获取当前用户的需求信息,如需求 ID。

  3. 结合需求 ID 和代码变更信息,生成提交信息。

诸如于: refactor(rename): handle exceptions and improve logging for rename suggestions #129。简单来说,借助生成式 AI 的能力, 将提交信息生成的过程自动化,在提升开发人员体验的同时,也构建了研发孪生的基石。

PS:由于 Rename 可能是高频场景,所以需要手动在配置页开启: AutoDev -> AutoDev Coder -> Enable Rename suggestion

示例 2:标识坏味道,改进代码质量

如上所述,重构依赖于好的上下文或者意图,而代码中的坏味道就是一个非常好的意图。结合 IDE 自带的代码检查工具,我们可以获取到代码中的坏味道信息, 并将其转化为 AI 可以理解的信息,生成重构完后的代码,或者对应的重构建议。

类似的工具,还有诸如于 [Alibaba Java Coding Guidelines](虽然官方已经不维护了,但是毕竟开源),只需要获取对应的静态分析结果, 诸如于: Variable 'content' is never used,便可以让生成式 AI 发挥更大的作用。

当然了,在 AutoDev 1.8 中,我们优化了(复制了 JetBrains)的提示词,同时还提供了随机的重构建议,以鼓励用户在不满意的情况下,尝试更多的重构。

示例 3:语义化重构,可检索的代码实体

当代码发生变更时,原有的函数名、类名,便与原先的语义发生变化。而为了让后续的代码检索更加方便,需要将代码实体命名更加语义化。因此结合 #132 与 #129,我们添加了 AI 重命名的功能。

1445200dcf59f00612e454263f87fbb3.png
AutoDev Rename

在这个场景下,当用户使用了 IDE 的重命名功能,AI 就会生成 5 个对应的函数名、类名建议,以供用户选择。

示例 4:终端 CLI 增强,统一常见范式

相似的,当我们在终端中使用 CLI 时,我们也需要 AI 的帮助。诸如于,创建发布分支是一个常见的工作,在这个场景下,我们需要分支格式,诸如于 release_v20240406 的格式。

ec7b338dd3d003a2cae2109de6eab499.png
Shell Suggest

为了让 AI 具备如此的能力,我们需要在上下文内置日期,以让他知道今天、明天;以及诸如于操作系统、Shell 工具等,以生成合适于当前工具上下文的命令。

此时,只需要问 AI:

  • "创建今天的分支",就会生成对应的分支名: git checkout -b feature/20240406

  • "创建新的发布分支",就会生成对应的分支名: git checkout -b release-20240406

对于组织内部来说,我们可以结合更多的规范等信息。

AutoDev 1.8 其它新特性:中文提示词等

3ebe18c29effcc27d483e4611182bf82.png

在新版本中,还有一些其它的新特性更新。

  • 辅助开发特性

    • 中文配置页。可以通过语言选择,选择中文配置页。

    • 中文提示词。当选择了中文配置页后,提示词也会变成中文。

    • 更便捷的 LLM 服务器测试。你可以在配置页,直接测试 LLM 是否可用。

    • 2024.1 版本支持。即 241 兼容性处理。

  • 智能体特性

    • AutoSQL 优化。在 SQL 生成中,新增了更多的错误信息处理。

    • 代码引用优化。支持到第 N 个 column 形式的字符 yml#L1C1-L2C12

总结

如何将大量的日常性工作,融入到开发者的日常工作中,是一个非常有意思的探索。对于 AutoDev 来说,我们要面临一个新挑战是,如此多的功能,难以让不熟悉插件的开发人员快速上手。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python】OPC UA 服务器扫描工具

引言 OPC UA(开放平台通信统一架构)是一种跨平台的、开放的数据交换标准,广泛用于工业自动化领域。在工业4.0的大背景下,OPC UA服务器在网络中的部署日益增多,如何快速有效地发现这些服务器成为了一个实际需求。本文将…

【opencv】示例-create_mask.cpp 通过鼠标交互产生掩膜图像(黑白图像)

/* * create_mask.cpp * * Author: * Siddharth Kherada <siddharthkherada27[at]gmail[dot]com> * * 这个教程演示了如何制作掩膜图像&#xff08;黑白图像&#xff09;。 * 该程序将输入图像作为源图像&#xff0c;并输出对应的掩膜图像。 */#include "opencv2/im…

【opencv】示例-demhist.cpp 调整图像的亮度和对比度,并在GUI窗口中实时显示调整后的图像以及其直方图。...

#include "opencv2/core/utility.hpp" // 包含OpenCV核心工具库的头文件 #include "opencv2/imgproc.hpp" // 包含OpenCV图像处理的头文件 #include "opencv2/imgcodecs.hpp" // 包含OpenCV图像编码解码的头文件 #include "opencv2/highgui…

3.1_2 内存管理的概念

3.1_2 内存管理的概念 重要考点

不使用 Docker 构建 Triton 服务器并在 Google Colab 平台上部署 HuggingFace 模型

Build Triton server without docker and deploy HuggingFace models on Google Colab platform EnvironmentBuilding Triton serverDeploying HuggingFace models客户端推荐阅读参考 Environment 根据Triton 环境对应表 &#xff0c;Colab 环境缺少 tensorrt-8.6.1&#xff0…

matlab读/写文本数据(矩阵格式)

1、背景介绍 文本格式的点云数据是一种常见的形式,其形式一般如下:x y z。后面可能带有标签、颜色等信息。在使用matlab进行数据处理时,常用的2个操作:读取与写入。有时,点云之间用逗号‘,’进行间隔。 2、数据读取 对于上述两种形式,均可使用load函数进行读取,如下:…

Kali系统的常用安装后开机配置(都是实用的配置)

目录 一.查看当前操作系统的所有版本信息 二.开启root并修改密码 二.启动 Apache 服务&#xff08;用不到可忽略&#xff09; 三.开启Secure Shell&#xff08;ssh&#xff09;服务&#xff0c;才可以使用远程工具&#xff08;xshell&#xff0c;finalshell&#xff09;连接…

(虚拟DOM)前端八股文修炼Day10

一 虚拟 DOM 是什么 虚拟 DOM (Virtual DOM) 本质上是真实 DOM 的一个轻量级的 JavaScript 表示形式。它是一个在内存中的抽象&#xff0c;用于描述真实 DOM 的结构和内容。虚拟 DOM 提供了一种机制&#xff0c;允许开发者通过操作 JavaScript 对象来间接更新页面&#xff0c;…

Clip论文学习

学习过程如上 学习时&#xff0c;图片与文本对应&#xff08;句子&#xff09;&#xff0c;共有n个句子与n个文本&#xff0c;进行对比学习 测试时&#xff0c;将标签句子化&#xff0c;再将其放入encoder中操作。最后找出特征最相似的。 特点&#xff1a;泛化能力强&#x…

点击上传文件

一、页面样式&#xff1a; &#xff08;1&#xff09;点击前&#xff1a; &#xff08;2&#xff09;点击后&#xff1a; 设计&#xff1a;①自定义elementPlus图标&#xff1b;②使用Tooltip实现鼠标悬浮按钮上出现文字提示&#xff1b;③上传与更换的切换样式&#xff1b;…

蓝桥备赛——素数

素数定义 试除法判断 from math import * def if_prime(n):if n==1:return Falsem=int(sqrt(n)+1)for i in range(2,m): #范围是2到根下n+1if n%i==0:return Falsereturn True print(if_prime(5)) 试除法判断素数。就是判断是否除了1和本身还有其他可以整除自己的数,…

模块十三 异常_Object

回顾与重点 模块十二回顾 权限修饰符&#xff1a; public → protected → 默认 → private a. 构造一般用public&#xff1a;便于new对象 b. 成员方法一般用public&#xff1a;便于调用 c. 属性一般用private&#xff1a;封装思想 final&#xff1a;最终的 a. 修饰类&#x…

如何从iPhone恢复已删除的照片

这些照片是我们今天生活中最珍贵的回忆。它们捕捉了我们一生珍惜的时刻。但是&#xff0c;丢失这些记忆可能是毁灭性的&#xff0c;尤其是在不小心从iPhone中删除它们时。 幸运的是&#xff0c;有一些方法可以从iPhone恢复已删除的照片。在这篇博文中&#xff0c;我们将讨论从…

【opencv】示例-detect_mser.cpp 使用 MSER 算法来检测图像中的极值区域

#include <opencv2/core.hpp> // 包含OpenCV核心操作的头文件 #include <opencv2/imgproc.hpp> // 包含图像处理功能的头文件 #include <opencv2/highgui.hpp> // 包含图形用户界面的头文件 #include <opencv2/features2d.hpp> // 包含特征检测相关功能…

【数据结构】考研真题攻克与重点知识点剖析 - 第 5 篇:树与二叉树

前言 本文基础知识部分来自于b站&#xff1a;分享笔记的好人儿的思维导图与王道考研课程&#xff0c;感谢大佬的开源精神&#xff0c;习题来自老师划的重点以及考研真题。此前我尝试了完全使用Python或是结合大语言模型对考研真题进行数据清洗与可视化分析&#xff0c;本人技术…

C# + OpencvSharp4 错误信息收集

异常1&#xff1a; 初次使用&#xff0c;如下代码报错&#xff0c;OpenCvSharp.OpenCvSharpException:“imread failed.” Mat src Cv2.ImRead("Source.png", ImreadModes.Unchanged); 原因&#xff1a;检查Nuget包与OpencvSharp4库相关安装是否完整&#xff0c;…

虚拟地址的设置与应用全攻略

在计算机网络和操作系统中&#xff0c;虚拟地址是一个核心概念&#xff0c;它允许程序在逻辑上拥有连续的内存空间&#xff0c;而无需关心实际的物理内存布局。虚拟地址的引入极大地简化了程序的开发和内存管理&#xff0c;提高了系统的灵活性和安全性。虎观代理将详细解析虚拟…

Spring Boot中整合JodConverter实现文件在线预览

Spring Boot中整合JodConverter实现文件在线预览 1.安装LibreOffice 24.2 下载地址 LibreOffice 是一款功能强大的办公软件&#xff0c;默认使用开放文档格式 (OpenDocument Format , ODF), 并支持 *.docx, *.xlsx, *.pptx 等其他格式。 它包含了 Writer, Calc, Impress, Dra…

java基于微服务的智慧工地管理云平台SaaS源码 数据大屏端 APP移动端

目录 智慧工地云平台概述 智慧工地功能 &#xff08;项目端&#xff09; 一、劳务管理&#xff1a; 二、施工安全管理&#xff1a; 三、视频监控管理&#xff1a; 四、机械安全管理&#xff1a; 五、施工质量管理&#xff1a; 六、绿色文明施工&#xff1a; 七、施工综…

CSS3如何实现雷达扫描图(动态样式)

动态样式控制雷达扫描和暂停&#xff1a; //html部分&#xff1a; <view class"radar" :style"{--state:animationPlayState}"></view>data部分&#xff1a; animationPlayState: paused, methods: changeStatus(){this.animationPlayState …