如何通过AI扫描代码中的问题

  代码质量其实在需求高压,业务快速迭代的场景下往往容易被人忽视的问题,大家的编码习惯和规范也经常会各有喜好,短期之内获取看不出来什么问题,但长此以往就会发现,屎山逐步成型了,而线上代码跑着往往就不想改也不敢改了,所以团队成员有一个良好的开发习惯,统一的编码规范和一定的代码洁癖是很重要的。
  但是项目代码量一上来,其实再想逐行分析代码的问题就很麻烦了,由此便有了本文的亡羊补牢的方案。(最好还是防患于未然,不要亡羊补牢,至于预防方案后续再更)。

设计图

在这里插入图片描述

clone代码

账号准备

  公共账号1个,使用公共账号作为clone仓库的账号,避免使用个人账号受权限和人员变动影响

clone工具

  可以通过simple-git或者直接执行shell命令的方式来操作git仓库代码,机器硬盘存储空间充足的情况下可以考虑保存clone后的代码目录,clone前检查是否存在,存在就pull更新避免每次clone提高效率

入口文件分析

  一般而言仓库代码入口文件是可知的,拿前端代码举例,一般为路由对应的页面入口文件或者npm包的入口文件。尤其在团队规范统一的情况下,入口文件的逻辑应该是一个相对标准的,更加易于识别。

构建依赖图

  “依赖”和“图”是两个点,前端代码我们可以像项目构建一样,通过@babel/parser中的parse来从入口文件开始解析成ast,然后通过@babel/traverse来遍历ast解析其代码依赖文件,递归处理获取依赖关系,其他语言的项目也会有类似的工具可以处理。因为代码依赖不会是一个简单的“树”形结构,往往树“图”结构的,而“图”的结构数据体积也会相对小一些。

代码分块

  模型在一次对话的输入数据的大小往往是有限制的,也就是常见的长文本处理问题。我们在通过@babel/parser获取ast后可以通过遍历ast.program.body来获取完整的代码区块。

const ast = parse(code, {sourceType: 'module',plugins: ['typescript'],errorRecovery: true,attachComment: false,});
for (const node of ast.program.body) {const codeSnippet = code.slice(node.start, node.end);// TODO: 自行拼接代码区块}

然后按照模型单次对话接收文本长度阈值的限制来拼接代码块,分多次对话提供给模型,利用模型记忆多轮历史对话的能力即可全部提供给模型。

模型分析

  模型在接收完全部代码区块和依赖图数据后,对内容进行整体分析即可检查出代码存在的问题,此外我们可以通过在知识库中补充团队的代码规范、优秀代码demo示例等信息利用RAG的能力来提高输出结果的质量。因为模型会存在幻觉的问题,所以我们在模型输出一波问题以后让其参考人工标注过的无效问题数据来进行二次过滤,筛选出真正有效的问题,自此便可以拿到我们需要的结果


备注

提示词书写可以参考之前的文章:如何写高效的Prompt?

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

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

相关文章

Java 大视界 -- Java 大数据机器学习模型在金融衍生品市场波动特征挖掘与交易策略创新中的应用(363)

Java 大视界 -- Java 大数据机器学习模型在金融衍生品市场波动特征挖掘与交易策略创新中的应用(363)引言:正文:一、Java 构建的金融数据处理架构1.1 多源异构数据实时融合1.2 新闻舆情与市场冲击建模二、Java 驱动的波动特征挖掘与…

Cartographer安装测试与模块开发(三)--Cartographer在Gazebo仿真环境下的建图以及建图与定位阶段问题(实车也可参考)

参数介绍之所以要首先介绍参数而不是实操,是因为大部分建图失败、漂移基本上都是参数设置错误引起的,或者说大部分都是TF存在问题,主要是坐标系Frame之间有冲突或者对不上等原因导致的,因此把参数放在前面介绍,了解了参…

uniapp nvue开发App 横竖屏切换丢失上下文导致 setTimeout和clearTimeout报错

报错内容如下 [JS Framework] Failed to find taskCenter (35). [JS Framework] Failed to execute the callback function:TypeError: c.clearTimeout is not a function reportJSException >>>> exception function:__WEEX_CALL_JAVASCRIPT__, exception:JavaSc…

Mirauge3D 赋能:全自动建模,让城市规划与建筑设计拥有高分辨率实景三维模型

在数字化浪潮席卷各行各业的当下,高精度、多元化的空间数据已成为基础测绘、智慧城市建设、自然资源管理等领域高质量发展的核心支撑。从城市交通网络的智能规划到国土空间的优化配置,从灾害监测的精准预警到生态环境保护的科学决策,空间数据…

Javaweb————学习javaweb的预备知识

❤️❤️❤️一.javase,javaweb,javaee的区别和联系 💙💙💙javase: 通俗的来讲就是java技术栈,做java相关开发的基础,比如javaweb,javaee开发都是必备javase的基础的,包括java语言基础&#xff…

zabbix服务自动发现、自动注册及配置钉钉告警(小白的“升级打怪”成长之路)

目录 一、自动发现及自动注册 1、自动发现 2、自动注册规则 二、监控告警并发送电子邮件 1、设定发邮件的地址 2、设定发邮件的用户 3、设定监控及触发的条件 4、开始告警并设置触发发邮件 三、钉钉告警 1、配置zabbix-server 2、配置监控及触发 3、web页面操作 4、…

OSPF多区域

OSPF多区域划分的必要性 OSPF单区域存在的问题 LSDB 庞大,占用内存大,SPF计算开销大。 LSA洪泛范围大,拓扑变化影响范围大。 路由不能被汇总,路由表庞大,查找路由开销大 解决办法 划分区域可以解决上述问题 每个区域独…

质数、因数、最大公约数经典问题整理

1、计数质数 MX 5000000 is_prime [1] * MX is_prime[0] is_prime[1] 0 for i in range(2, MX):if is_prime[i]:for j in range(i * i, MX, i):is_prime[j] 0class Solution:def countPrimes(self, n: int) -> int:return sum(is_prime[:n]) 2、序列中不同最大公约数的…

Java NIO FileChannel在大文件传输中的性能优化实践指南

Java NIO FileChannel在大文件传输中的性能优化实践指南 在现代分布式系统中,海量数据的存储与传输成为常见需求。Java NIO引入的FileChannel提供了高效的文件读写能力,尤其适合大文件传输场景。本文从原理深度解析出发,结合生产环境实战经验…

SQLite Insert 语句详解

SQLite Insert 语句详解 SQLite 是一种轻量级的数据库管理系统,它以其简洁的设计、强大的功能和易于使用而闻名。在 SQLite 中,INSERT 语句用于向数据库表中添加新数据。本文将详细介绍 SQLite 的 INSERT 语句,包括其基本语法、使用方法以及一些高级特性。 基本语法 SQLi…

git更新内核补丁完整指南

Git操作完整指南 📋 目录 项目概述 Git基础配置 日常操作流程 补丁更新操作 分支管理 冲突解决 常见问题 最佳实践 命令速查表 🎯 项目概述 </

关于回归决策树CART生成算法中的最优化算法详解

首先&#xff0c;一共比如有M个特征&#xff0c;N个样本&#xff0c;对于每一个特征j&#xff0c;遍历其中的N个样本&#xff0c;得到N个值中&#xff0c;最小的值&#xff0c;作为这个特征的最优切分点&#xff0c;而其中的c1&#xff0c;c2是可以直接得到的。然后&#xff0c…

Ubuntu 环境下创建并启动一个 MediaMTX 的 systemd 服务

文章目录一、简介二、安装及使用三、创建系统服务小结一、简介 MediaMTX 是一个现代、高性能、跨平台的 流媒体服务器&#xff0c;主要用于接收、转发、转码和分发 音视频流&#xff0c;支持多种协议。它的前身是 rtsp-simple-server&#xff0c;后来重命名为 MediaMTX&#x…

在React中,函数式组件和类组件各有优缺点

函数式组件&#xff1a;无this&#xff0c;无生命周期&#xff0c;配合使用useEffect&#xff0c; 可使用Hooks。 类组件&#xff1a;有生命周期&#xff0c;状态管理&#xff0c;无Hooks&#xff0c;适用于需要明确生命周期方法和实例方法的场景。 函数式组件 优点&#xff1a…

【SketchUp插件推荐】Profile Builder 4.0 中文版下载安装使用教程(含语言设置图解)

一、插件简介 Profile Builder 4.0 是一款适用于 SketchUp 2017-2024 的高效参数化建模插件&#xff0c;中文名称为「参数化造型建模工具」。该插件基于参数化设计原理&#xff0c;允许用户通过简单的路径定义和参数设定&#xff0c;快速生成智能模型&#xff0c;从而大幅提高…

【小沐学GIS】基于Unity3d绘制三维数字地球Earth(Unity3d、OpenGL、GIS)

&#x1f37a;三维数字地球GIS系列相关文章如下&#x1f37a;&#xff1a;1【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第一期2【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第二期3【小沐学GI…

ARM汇编的一些编写和调用规范总结

ARM汇编在格式上有少数硬性要求&#xff0c;在排版上几乎没什么硬性要求&#xff0c;都不多&#xff0c;以下分别说明。格式要求 ARM 汇编有一些格式上的硬性要求&#xff0c;这些规则由汇编器&#xff08;如 GNU 的gas、ARM 官方的armasm&#xff09;强制执行&#xff0c;违反…

FastAPI框架下集成智谱大模型的RAG流式响应服务框架

RAG&#xff08;检索增强生成&#xff09;是结合检索与生成式 AI 的技术框架。核心逻辑是先从外部知识库精准检索相关信息&#xff0c;再将其作为上下文输入大模型生成回答。技术上依赖检索引擎&#xff08;如向量数据库、BM25&#xff09;、大语言模型&#xff08;如 GPT、LLa…

基于深度学习的胸部 X 光图像肺炎分类系统(三)

目录 二分类胸片判断&#xff1a; 1. 数据加载时指定了两类标签 2. 损失函数用了二分类专用的 3. 输出层只有 1 个神经元&#xff0c;用了sigmoid激活函数 4. 预测时用 0.5 作为分类阈值 二分类胸片判断&#xff1a; import numpy as np import matplotlib.pyplot as plt f…

深入理解 BIO、NIO、AIO

目录 一、同步与非同步 二、阻塞与非阻塞 三、BIO&#xff08;Blocking I/O&#xff0c;阻塞I/O&#xff09; 四、NIO&#xff08;Non-blocking I/O&#xff0c;非阻塞I/O&#xff09; 五、AIO&#xff08;Asynchronous I/O&#xff0c;异步I/O&#xff09; 同步阻塞&…