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

news2025/1/13 15:49:23

一、背景描述

  • 一句话介绍就是:基于开源大模型 + 知识库的 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

基于大模型的 Code Review 实践 - 掘金 (juejin.cn)

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

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

相关文章

华为云服务器-云容器引擎 CCE环境构建及项目部署

1、切换地区 2、搜索云容器引擎 CCE 3、购买集群 4、创建容器节点 通过漫长的等待(五分钟左右),由创建中变为运行中,则表明容器已经搭建成功 购买成功后,返回容器控制台界面 5、节点容器管理 6、创建redis工作负载 7、创建mysql工作负载 8、…

C#使用GDI对一个矩形进行任意角度旋转

C#对一个矩形进行旋转GDI绘图,可以指定任意角度进行旋转 我们可以认为一张图片Image,本质就是一个矩形Rectangle,旋转矩形也就是旋转图片 在画图密封类 System.Drawing.Graphics中, 矩形旋转的两个关键方法 //设置旋转的中心点 public v…

MySQL-相关日志

官方文档 1、MySQL支持的日志 MySQL有不同类型日志文件,用来存储不同类型的日志,分别为 二进制日志、错误日志、通用查询日志、慢查询日志、中继日志、数据定义语句日志 慢查询日志:记录所有执行时间超过 long_query_time的所有查询&#xf…

单元测试覆盖率

什么是单元测试覆盖率 关于其定义,先来看一下维基百科上的一段描述: 代码覆盖(Code coverage)是软件测试中的一种度量,描述程序中源代码被测试的比例和程度,所得比例称为代码覆盖率。 简单来理解&#xff…

【微信小程序】事件绑定和事件对象

文章目录 1.什么是事件绑定2.button组件3.事件绑定4.input组件 1.什么是事件绑定 小程序中绑定事件与在网页开发中绑定事件几乎一致,只不过在小程序不能通过on的方式绑定事件,也没有click等事件,小程序中 绑定事件使用bind方法,c…

反转链表 (oj题)

一、题目链接 https://leetcode.cn/problems/reverse-linked-list/submissions/538124207 二、题目思路 1.定义三个指针,p1先指向NULL p2指向头结点 p3指向第二个结点 2.p2的next指向p1。然后移动指针,p1来到p2的位置,p2来到p3的位置&…

双列集合基础知识

package exercise;import java.util.HashMap; import java.util.Map;public class Demo1 {public static void main(String[] args) {Map<String, String> map new HashMap<>();//在添加数据的时候&#xff0c;如果键不存在&#xff0c;那么直接把键值对对象添加到…

小主机折腾记25

10.买了惠普光驱&#xff0c;想给880g5twr安装上&#xff0c;结果发现卡扣不对 880g5twr的卡扣更长一些&#xff0c;比光驱本身长一些&#xff0c;各位如果想买的注意擦亮眼睛&#xff0c;看看卡扣跟你的主机一致与否 后续在闲鱼上买了个卡扣&#xff0c;加邮费12块钱…… 1…

手搓文件格式转换

最初目标&#xff1a; 自己搞一个免费的pdf文件转换 根据现有的开源jar 项目实现思路&#xff1a; 1. 项目原因a. 我想转换文件b. wps 文件转换 2. 最初的状态a. jar运行的b. main,输入文件路径c. 一定的编程能力的人才能得 3. 开始构思项目a. 网页版本b. 想着大家一起用 4. …

Go 编程风格指南 - 最佳实践

Go 编程风格指南 - 最佳实践 原文&#xff1a;https://google.github.io/styleguide/go 概述 | 风格指南 | 风格决策 | 最佳实践 注意&#xff1a; 本文是 Google Go 风格 系列文档的一部分。本文档是 规范性(normative) 但不是强制规范(canonical)&#xff0c;并且从属于Goo…

2003NOIP普及组真题 3. 数字游戏

线上OJ 地址&#xff1a; 【03NOIP普及组】数字游戏 此题考察的是 区间DP 前缀和 核心思想&#xff1a; 1、这道题主要考查了动态规划的思想。通过分析题目&#xff0c;可以发现需要 枚举环上所有划分为m组 的不同方案&#xff0c;来求得最大或最小值。属于 环上动态规划 问…

IEDA 默认集成依赖概述

IEDA 默认集成依赖概述 目录概述需求&#xff1a; 设计思路实现思路分析 1.Developer Tools:GraalVM Native supportGraphQL DGs Code GenerationSpring Boot DevToolsLombokSpring Configuration ProcessorDocker Compose supportSpring Modulith 2.WebWebSpring WebSpring Re…

安卓约束性布局学习

据说这个布局是为了解决各种布局过度前套导致代码复杂的问题的。 我想按照自己想实现的各种效果来逐步学习&#xff0c;那么直接拿微信主页来练手&#xff0c;用约束性布局实现微信首页吧。 先上图 先实现顶部搜索框加号按钮 先实现 在布局中添加一个组件&#xff0c;然后摆放…

java web:springboot mysql开发的一套家政预约上门服务系统源码:家政上门服务系统的运行流程

java web&#xff1a;springboot mysql开发的一套家政预约上门服务系统源码&#xff1a;家政上门服务系统的运行流程 家政上门服务系统的优势 服务质量更稳定&#xff1a;由专业的家政人员提供服务&#xff0c;经过严格的培训和筛选。 价格更透明&#xff1a;采用套餐式收费&…

java的核心机制:JVM

JVM&#xff08;java virtual machine&#xff0c;java虚拟机&#xff09;&#xff1a;是一个虚拟的计算机&#xff0c;是java程序的运行环境。JVM具有指令集并使用不同的存储区域&#xff0c;负责执行指令&#xff0c;管理数据、内存、寄存器。 JVM功能1&#xff1a;实现java程…

以sqlilabs靶场为例,讲解SQL注入攻击原理【54-65关】

【Less-54】 与前面的题目不同是&#xff0c;这里只能提交10次&#xff0c;一旦提交超过十次&#xff0c;数据会重新刷新&#xff0c;所有的步骤需要重来一次。 解题步骤&#xff1a; 根据测试&#xff0c;使用的是单引号闭合。 # 判断字段的数量 ?id1 order by 3 -- aaa# …

力扣 有效的括号 栈

Problem: 20. 有效的括号 文章目录 思路复杂度&#x1f49d; Code 思路 &#x1f468;‍&#x1f3eb; 参考地址 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) &#x1f49d; Code class Solution {static Map<Character, Character> m…

香橙派 Orange AIpro 测评记录视频硬件解码

香橙派 Orange AIpro 测评记录视频硬件解码 香橙派官网&#xff1a;http://www.orangepi.cn/ 收到了一块Orange Pi AIpro开发板&#xff0c;记录一下我的测评~测评简介如下&#xff1a;1.连接网络2.安装流媒体进行硬件解码测试3.安装IO测试 简介 Orange Pi AI Pro 是香橙派联合…

i.MX8MP平台开发分享(RDC软件配置篇)

Uboot中已经将RDC的配置写入到了OCRAM中&#xff0c;NXP在ATF中预设了SIP服务&#xff0c;SIP服务下有厂商自定义的smc命令ID。例如下面的DDR、GPC、SRC和HAB的smc回调函数。 在SRC中断处理函数中&#xff0c;对于SRC_M4_START指令&#xff0c;先读取OCRAM中的配置&#xff0c;…

web-上传项目文件夹到Git远程仓库

Git初识 概念&#xff1a;一个免费开源&#xff0c;分布式的代码版本控制系统&#xff0c;帮助开发团队维护代码 作用&#xff1a;记录代码内容&#xff0c;切换代码版本&#xff0c;多人开发时高效合并代码内容 检验成功 打开bash终端&#xff08;git专用&#xff09;命令…