【AIGC】基于大模型+知识库的Code Review实践

一、背景描述

  • 一句话介绍就是:基于开源大模型 + 知识库的 Code Review 实践,类似一个代码评审助手(CR Copilot)。
  • 信息安全合规问题:公司内代码直接调 ChatGPT / Claude 会有安全/合规问题,为了使用 ChatGPT / Claude 需要对代码脱敏,只提供抽象逻辑,这往往更花时间。
  • 低质量代码耗费时间:业务每天至少 10~20 个 MR 需要 CR,虽然提交时 MR 经过 单测 + Lint 过滤了一些低级错误,但还有些问题(代码合理性、经验、MR 相关业务逻辑等)需要花费大量时间,最后可以先经过自动化 CR,再进行人工 CR,可大大提升 CR 效率!
  • 符合公司安全规范,所有代码数据不出内网,所有推理过程均在内网完成
  • 团队 Code Review 规范缺少执行:大部分团队的 Code Review 停留在文档纸面上,成员之间口口相传,并没有一个工具根据规范来严格执行。
  • 🌈 开箱即用:基于 Gitlab CI,仅 10 几行配置完成接入,即可对 MR 进行 CR。
  • 🔒 数据安全:基于开源大模型做私有化部署,隔离外网访问,确保代码 CR 过程仅在内网环境下完成。
  • ♾ 无调用次数限制:部署在内部平台,只有 GPU 租用成本。
  • 📚 自定义知识库:CR 助手基于提供的飞书文档进行学习,将匹配部分作为上下文,结合代码变更进行 CR,这将大大提升 CR 的准确度,也更符合团队自身的 CR 规范。
  • 🎯 评论到变更行:CR 助手将结果评论到变更代码行上,通过 Gitlab CI 通知,更及时获取 CR 助手给出的评论。

二、基于大模型与知识库的Code Review实践

基于大模型与知识库的Code Review实践,具体实施细节可以归纳如下:

一、选择合适的大模型与知识库

  1. 大模型选择
    • 优先选择具有广泛训练数据和强大语言理解能力的模型,如GPT系列(如GPT-3.5或更高版本)。
    • 考虑模型的领域适应性,选择对编程语言和代码结构有深入理解的模型。
    • 评估模型的性能,包括处理速度、准确性和可扩展性。
  2. 知识库构建
    • 收集行业标准和最佳实践,确保知识库内容的权威性和准确性。
    • 整合常见的代码问题和解决方案,构建易于查询和检索的知识库。
    • 不断更新和维护知识库,确保其内容的时效性和完整性。

二、集成大模型与知识库到Code Review流程

  1. 自动化工具开发
    • 利用大模型开发自动化代码分析工具,如静态代码分析器、代码风格检查器等。
    • 这些工具可以自动检测代码中的潜在问题,如语法错误、逻辑错误、性能问题等。
    • 工具的输出结果可以作为Code Review的参考依据。
  2. 代码注释和文档生成
    • 利用大模型的文本生成能力,为代码片段自动生成注释和文档。
    • 这可以提高代码的可读性和可维护性,便于其他团队成员理解和使用代码。
  3. 集成知识库
    • 在Code Review过程中,集成知识库作为参考资源。
    • 审查者可以通过查询知识库来快速获取相关的行业标准和最佳实践等信息。
    • 审查者可以利用这些信息来更准确地评估代码的质量和可靠性。

三、结合人工审查

  1. 审查者角色
    • 审查者需要具备一定的编程能力、自然语言处理能力和领域知识。
    • 审查者需要关注模型的输出结果,判断其是否准确可靠,并根据实际情况做出调整。
    • 审查者还需要关注代码的逻辑、业务逻辑等方面的问题,确保代码的正确性和可靠性。
  2. 审查流程
    • 审查者首先使用自动化工具对代码进行初步分析。
    • 然后,审查者可以结合知识库中的信息对代码进行深入审查。
    • 审查者需要记录审查过程中的问题和建议,并与开发人员进行沟通和讨论。

四、持续优化与改进

  1. 数据收集与反馈
    • 收集Code Review过程中的数据和反馈,包括审查结果、审查者建议等。
    • 分析这些数据,了解Code Review的效果和存在的问题。
  2. 模型优化
    • 根据收集的数据和反馈,对大模型进行优化和改进。
    • 例如,可以更新模型的训练数据、调整模型的参数设置等,以提高模型的性能和准确性。
  3. 知识库更新
    • 定期更新和维护知识库,确保其内容的时效性和完整性。
    • 整合新的行业标准和最佳实践到知识库中,为审查者提供更全面的参考资源。

通过以上具体实施细节,可以确保基于大模型与知识库的Code Review实践能够高效、准确地评估代码的质量和可靠性,提高开发效率。

参考资料

基于大模型 + 知识库的 Code Review 实践_大模型进行codereview结果对比-CSDN博客

AIGC 重塑软件工程 Code Review 篇:IDE 插件 + DevOps 平台协同组合-CSDN博客

🚀 CI+GPT双引擎驱动,🤖 开启AI代码评审新纪元 - 知乎 (zhihu.com)

GitHub - mimo-x/Code-Review-GPT-Gitlab: 🤖 GPT Code Review for Gitlab (针对于 Gitlab 的 LLM 辅助 Code Review 工具)项目详细文档 👇🏻

CodeReview with LLM in Gitlab 

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

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

相关文章

【数据结构】初识数据结构之复杂度与链表

【数据结构】初识数据结构之复杂度与链表 🔥个人主页:大白的编程日记 🔥专栏:C语言学习之路 文章目录 【数据结构】初识数据结构之复杂度与链表前言一.数据结构和算法1.1数据结构1.2算法1.3数据结构和算法的重要性 二.时间与空间…

[AIGC] Springboot 自动配置的作用及理由

在详细解释SpringBoot的自动配置之前,先介绍以下背景知识。在创建现代复杂的应用程序时,一个困难的部分是正确地设置您的开发环境。这个问题尤其在Java世界中尤为突出,因为您必须管理和配置许多独立的标准和技术。 当我们谈论Spring Boot的自…

[NOVATEK] NT96580行车记录仪功能学习笔记(持续更新~

一、u-Boot升级灯 运行u-Boot程序时LED灯闪烁,找到运行过程中一直在运行的函数在里面进行LED引脚电平的翻转 宏定义 Z:\SunFan\AHD580\pip\na51055_PIP\BSP\u-boot\include\configs\nvt-na51055-evb.h Z:\SunFan\AHD580\pip\na51055_PIP\BSP\u-boot\drivers\mtd\nvt_flash_…

HTTP协议分析实验:通过一次下载任务抓包分析

HTTP协议分析 问:HTTP是干啥用的? 最简单通俗的解释:HTTP 是客户端浏览器或其他程序与Web服务器之间的应用层通信协议。 在Internet上的Web服务器上存放的都是超文本信息,客户机需要通过HTTP协议传输所要访问的超文本信息。 一、…

btstack协议栈实战篇--GAP Link Key Management

btstack协议栈---总目录-CSDN博客 目录 1.GAP 链接密钥逻辑 2.蓝牙逻辑 3.主应用程序设置 4.log信息 展示了如何遍历存储在 NVS 中的经典链接密钥,链接密钥是每个设备-设备绑定的。如果蓝牙控制器可以交换,例如在桌面系统上,则每个控制器都需…

Shell脚本学习_环境变量深入

目录 1.Shell环境变量深入:自定义系统环境变量 2.Shell环境变量深入:加载流程原理介绍 3.Shell环境变量深入:加载流程测试 4.Shell环境变量深入:识别与切换Shell环境类型 1.Shell环境变量深入:自定义系统环境变量 …

8.3 Go 包的组织结构

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

WPS JS宏获取自动筛选后的行数

//WPS JS宏获取自动筛选后的行数 function getFilterRowCnt(shtRng)//shtRng表示筛选目标工作表范围 {let lngRowCnt 0;for(let rngCell of shtRng.SpecialCells(xlCellTypeVisible).Areas)//获取自动筛选后的单元格行数{lngRowCnt lngRowCnt rngCell.Rows.Count;}return ln…

从0到1:企业办公审批小程序开发笔记

可行性分析 企业办公审批小程序,适合各大公司,企业,机关部门办公审批流程,适用于请假审批,报销审批,外出审批,合同审批,采购审批,入职审批,其他审批等规划化…

关于音乐播放器与系统功能联动功能梳理

主要实现功能: 一、通知栏播放显示和控制 二、系统下拉栏中播放模块显示同步 三、与其他播放器状态同步:本应用播放时暂停其他应用播放,进入其他应用播放时,暂停本应用的后台播放 通知栏播放的显示和控制: 通过Not…

RTKLIB之RTKPLOT画图工具

开源工具RTKLIB在业内如雷贯耳,其中的RTKPLOT最近正在学习,发现其功能之强大,前所未见,打开了新的思路。 使用思博伦GSS7000卫星导航模拟器,PosApp软件仿真一个载具位置 1,RTKPLOT支持DUT 串口直接输出的NMEA数据并…

基于深度学习的中文标点预测模型-中文标点重建(Transformer模型)【已开源】

基于深度学习的中文标点预测模型-中文标点重建(Transformer模型)提供模型代码和训练好的模型 前言 目前关于使用深度学习对文本自动添加标点符号的研究并不多见,已知的开源项目也较少,而对该领域的详细介绍更是稀缺。然而&#x…

苹果手机微信如何直接打印文件

在快节奏的工作和生活中,打印文件的需求无处不在。但你是否曾经遇到过这样的困扰:打印店价格高昂,让你望而却步?今天,我要给大家介绍一款神奇的微信小程序——琢贝云打印,让你的苹果手机微信直接变身移动打…

React Hooks路由传参

场景:如何把想要的参数带到跳转过去的页面里呢?很简单 上代码: 在你需要跳转的页面上 引入 Link用来跳转使用 Link跳转并携带参数 然后需要什么参数就带什么过去喽 这里record里面存的就是我的数据 我只需要id和state然后到你跳转过去的页面…

MySQL-备份(三)

备份作用:保证数据的安全和完整。 一 备份类别 类别物理备份 xtrabackup逻辑备份mysqldump对象数据库物理文件数据库对象(如用户、表、存储过程等)可移植性差,不能恢复到不同版本mysql对象级备份,可移植性强占用空间占…

【C语言】详解函数(上)(庖丁解牛版)

文章目录 1. 前言2. 函数的概念3.库函数3.1 标准库和头文件3.2 库函数的使用3.2.1 头文件的包含3.2.2 实践 4. 自定义函数4.1 自定义函数的语法形式4.2 函数的举例 5. 形参和实参5.1 实参5.2 形参5.3 实参和形参的关系 6. return 语句6. 总结 1. 前言 一讲到函数这块&#xff…

算法—字符串操作

394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:string longestCommonPrefix(vector<string>& strs) { string retstrs[0];//***1***记得先要初始化ret&#xff0c;作为第一个比较值for(int i0;i<strs.size();i){retfoundcom…

聪明人社交的基本顺序:千万别搞反了,越早明白越好

聪明人社交的基本顺序&#xff1a;千万别搞反了&#xff0c;越早明白越好 国学文化 德鲁克博雅管理 2024-03-27 17:00 作者&#xff1a;方小格 来源&#xff1a;国学文化&#xff08;gxwh001&#xff09; 导语 比一个好的圈子更重要的&#xff0c;是自己优质的能力。 唐诗宋…

视觉SLAM十四讲:从理论到实践(Chapter9:后端1)

前言 学习笔记&#xff0c;仅供学习&#xff0c;不做商用&#xff0c;如有侵权&#xff0c;联系我删除即可 一、目标 1.理解后端的概念。 2.理解以EKF为代表的滤波器后端的工作原理。 3.理解非线性优化的后端&#xff0c;明白稀疏性是如何利用的。 4.使用g2o和Ceres实际操作…

代码随想录算法训练营第36期DAY49

DAY49 139单词拆分 没有思路。 回溯法 回溯怎么做呢&#xff1a;拼接str&#xff0c;看能不能拼出来。注意每个单词能用多次&#xff0c;不是用了就没。 但是语法还是难写。 自己的思路不好&#xff0c;题解思路&#xff1a;枚举所有分割字符串&#xff0c;判断是否在字典…