使用AI进行代码审查

ai-code-review

在日常开发中,我们经常会遇到一些问题,比如代码质量问题、安全问题等。如果我们每次都手动去检查,不仅效率低下,而且容易出错。

所以我们可以利用 AI 来帮助我们检查代码,这样可以提高我们的效率

那么,如何利用 AI 来检查代码呢?
在这里我先厚着脸皮要下star吧。一款基于AI进行代码审核的插件。插件地址,希望大家能支持下。

1. 使用 JS 脚本

这种方法其实就是写一个简单的脚本,通过调用 OpenAI 的 API,将代码提交给 AI 进行评审。
这里我们需要使用 Node.js 来实现这个功能。利用 git 的 pre-commit hooks,在 git 提交前执行这个脚本。整体流程如下:

在这里插入图片描述

接下来我们来具体实现下代码。在项目根目录下新建一个pre-commit.js文件,这个文件就是我们的脚本。

1.1 校验暂存区代码

通过 git diff --cached 验证是否存在待提交内容,如果没有改动则直接退出提交。

const{ execSync }=require('child_process');constcheckStaged=()=>{try{const changes =execSync("git diff --cached --name-only").toString().trim();if(!changes){ console.log("No staged changes found."); process.exit(0);}}catch(error){ console.error("Error getting staged changes:", error.message); process.exit(1);}}

1.2 获取差异内容

constgetDiff=()=>{try{const diff =execSync("git diff --cached").toString();if(!diff){ console.log("No diff content found."); process.exit(0);}return diff;}catch(error){ console.error("Error getting diff content:", error.message); process.exit(1);}}

1.3 准备prompt

这里我们需要准备一个 prompt,这个 prompt 就是用来告诉 AI 我们要检查什么内容。

constgetPrompt=(diff)=>{return` 你是一名代码审核员,专门负责识别git差异中代码的安全问题和质量问题。您的任务是分析git 差异,并就代码更改引入的任何潜在安全问题或其他重大问题提供详细报告。 这里是代码差异内容: ${diff} 请根据以下步骤完成分析: 1.安全分析: - 查找由新代码引发的一些潜在的安全漏洞,比如: a)注入缺陷(SQL注入、命令注入等) b)认证和授权问题 ... 2. 代码逻辑和语法分析: -识别任何可能导致运行时错误的逻辑错误或语法问题,比如: a)不正确的控制流程或条件语句 b)循环使用不当,可能导致无限循环 ... 3. 报告格式: 对于每个发现的问题,需要按照严重等级分为高/中/低。 每个问题返回格式如下: -[严重等级](高中低)- [问题类型](安全问题/代码质量) - 问题所在文件名称以及所在行数 - 问题原因 + 解决方案 4. 总结: 在列出所有单独的问题之后,简要总结一下这些变化的总体影响,包括: -发现的安全问题数量(按严重程度分类) -发现的代码质量问题的数量(按严重性分类) 请现在开始你的分析,并使用指定的格式陈述你的发现。如果没有发现问题,请在报告中明确说明。 输出应该是一个简单的结论,无论是否提交这些更改,都不应该输出完整的报告。但是要包括文件名。并将每行标识的问题分别列出。 如果存在高等级的错误,就需要拒绝提交 回答里的结尾需要单独一行文字 "COMMIT: NO" 或者 "COMMIT: YES" 。这将用来判断是否允许提交 `}

1.4 定义一个 AI 执行器

这里我用 chatgpt 实现的,具体代码如下:

constexecCodeReviewer=(text)=>{const apiKey =''const apiBaseUrl =''const translateUrl =`${apiBaseUrl}/v1/chat/completions`returnnewPromise((resolve, reject)=>{fetch(translateUrl,{method:'POST',headers:{'Content-Type':'application/json',Authorization:`Bearer ${apiKey}`,},body:JSON.stringify({stream:false,messages:[{role:'user',content: text,},],}),}).then(res=> res.json().then(data=>resolve(data.choices[0].message.content))).catch(err=>{ console.error(err)})})}

1.5 结果处理

这里我们需要解析一下结果,提取结果中是否包含 "COMMIT: YES"关键字,有则允许提交,否则不允许提交并打印结果

consthandleReviewResult=(result)=>{const decision = result.includes("COMMIT: YES")?"YES":"NO";if(decision ==='NO'){ console.log("\nCritical issues found. Please address them before committing."); console.log(details); process.exit(1);} console.log("\nCommit approved.");}

1.6 主函数执行整个流程

constmain=async()=>{try{checkStaged();const diffContent =getDiff(); console.log("Running code review...");const prompt =getPrompt(diffContent);const reseponse =awaitexecCodeReviewer(prompt);handleReviewResult(reseponse) process.exit(0);}catch(error){ console.error("Error:", error.message); process.exit(1);}}

1.7 git hooks里添加执行该脚本逻辑

进入项目根目录,在这里运行 git bash。打开pre-commit钩子文件

vim .git/hooks/pre-commit 

然后添加以下内容

#!/bin/shGIT_ROOT=$(git rev-parse --show-toplevel)node"$GIT_ROOT/pre-commit.js"exit$?

保存退出后,我们就可以使用 git 做下测试。

1.8 测试

我新建了一个 test.js 文件,然后添加如下代码:

constfn=()=>{let num =0for(let i =0;true; i++){ num += i }}

然后执行 git add . 然后 git commit -m “test”。效果如下:

在这里插入图片描述

看来还是不错的,有效识别代码中的逻辑缺陷与语法隐患(如无限循环、变量误用等),同时当不满足提交条件后,也是直接终止了 commit。这里面其实比较关键的是 prompt 的内容,ai 评审的效果主要就是取决于它。

2. ai-pre-commit-reviewer 插件

上面我们是通过 js 脚本来实现的,其实也可以通过现成插件来实现。原理和第一个方法是一样的,只不过是插件帮我们封装好了,我们只需要配置下即可。插件地址,欢迎大家star。

2.1 安装插件

npminstall ai-pre-commit-reviewer --save-dev #安装完成后执行 npx add-ai-review #添加执行逻辑到git pre-commit钩子中

2.2 配置文件

插件安装完成后,新建一个.env 文件

baseURL= *** #模型服务地址apiKey=*** #模型服务密钥language=chinese #语言

2.3 效果预览

在这里插入图片描述

也可以配合husky使用,进行语法检查后执行code review。

在这里插入图片描述

我这里也是更推荐大家使用这个,简单易上手。

3. gerrit + ai-code-review

Gerrit 是由 Google 开发的代码审查管理系统,基于 Git 版本控制系统构建,主要特性包括:

  • 强制代码审查机制:所有代码必须通过人工/自动化审查才能合并
  • 细粒度权限控制:支持基于项目/分支的访问权限管理
  • 在线代码对比:提供可视化差异查看界面(Side-by-Side Diff)
  • 插件扩展体系:可通过插件集成 CI/CD、静态分析等工具

其核心功能主要是通过 refs/for/ 推送机制,确保所有代码变更必须通过审核。因此我们可以利用 ai 代替人工去执行代码 review,这样效率也会更高效。

2.1 gerrit 安装与配置

# 执行以下命令docker pull gerritcodereview/gerrit:latest 

安装完后可以看下容器列表

在这里插入图片描述

没问题后启动服务,然后在浏览器中访问 http://localhost:8080/ 就可以看到gerrit首页

2.1.1 配置 ssh 密钥
ssh-keygen -t ed25519 -C"[email protected]"# 直接按3次回车(不要设置密码)cat ~/.ssh/id_ed25519.pub # 复制输出的内容

然后在 “settings” 页面中选择左侧的"SSH Keys",将复制的公钥内容粘贴进去。添加完成后测试下连接情况。

ssh-p29418 admin@localhost # 输入yes接受指纹

看到 Welcome to Gerrit Code Review 表示成功

2.1.2 拉取项目测试

可以在 BROWSE > Repositories 里查看当前项目列表,我这里用 All-Projects 做下测试,理论上是要新建项目的。

git clone "ssh://admin@localhost:29418/All-Projects"

安装 Gerrit 提交钩子 commit-msg(必须!)。Gerrit 依赖 commit-msg 钩子实现以下功能:

  1. 生成 Change-Id:每个提交头部自动添加唯一标识符,格式示例 Change-Id: I7e5e94b9e6a4d8b8c4f3270a8c6e9d3b1a2f5e7d
  2. 校验提交规范: 确保提交信息符合团队约定格式(如包含任务编号)
  3. 防止直接推送: 强制推送到 refs/for/ 路径而非主分支
cd All-Projects curl-Lo .git/hooks/commit-msg http://localhost:8080/tools/hooks/commit-msg chmod +x .git/hooks/commit-msg 

然后新建个js文件,写点代码并提交。

git push origin HEAD:refs/for/refs/meta/config # 提交到 refs/meta/config 分支

然后在gerrit首页可以看到刚刚提交的代码,点击查看详情,可以看到代码审核的流程。

在这里插入图片描述

2.2 插件安装和配置

将 ai-code-review 插件克隆到本地。插件详情可参考官方文档。此插件可以使用不同的 AI Chat 服务(例如 ChatGPT 或 OLLAMA)

git clone https://gerrit.googlesource.com/plugins/ai-code-review 

安装 Java 和构建工具

sudoapt update sudoaptinstall-y openjdk-21-jdk maven # 官方文档说 11 就行,但是我实际上跑了后发现需要 JDK 21+

进去项目目录构建 JAR 包

cd ai-code-review mvn clean package 

当输出BUILD BUILD SUCCESS时,表示构建成功。进入目录看下生成的包名。

在这里插入图片描述

然后将生成的jar包复制到 gerrit 的 plugins 目录下

# 我这里容器名为 gerrit,JAR 文件在 target/ 目录dockercp target/ai-code-review-3.11.0.jar gerrit:/var/gerrit/plugins/ 

然后进入容器内看下插件列表,确认插件已经安装成功

在这里插入图片描述

也可以在 gerrit 网页端查看插件启动情况

在这里插入图片描述

接着修改配置文件,在 gerrit 的 etc 目录下找到 gerrit.config 文件。但在这之前需要在 Gerrit 中创建一个 AI Code Review 用户,这个席位用于 AI 来使用进行代码评审。

vi var/gerrit/etc/gerrit.config 

在文件里添加以下内容。

[plugin "ai-code-review"] model = deepseek-v3 aiToken = *** aiDomain = *** gerritUserName = AIReviewer aiType = ChatGPT globalEnable = true 。 
  • model(非必填): 使用的模型
  • aiToken(必填): AI模型的密钥
  • aiDomain(非必填): 请求地址,默认是 https://api.openai.com
  • gerritUserName(必填): AI Code Review 用户的 Gerrit 用户名。我这里创建的用户名为 AIReviewer
  • aiType(非必填): AI类型,默认是 ChatGPT
  • globalEnable(非必填): 是否全局启用,默认是 false, 表示插件将仅审核指定的仓库。如果不设置为true的话。需要添加enabledProjects参数,指定要运行的存储库,例如:“project1,project2,project3”。

更多字段配置参考官方文档

这些都完成后,重启 gerrit 服务。然后修改下代码,写段明显有问题的代码,重新 commit 并 push 代码,看下 AI 代码评审的效果怎么样。

在这里插入图片描述


可以看到 ai 审查代码的效果还是不错的。当然我这里是修改了插件的prompt,让它用中文生成评论,它默认是用英文回答的。

Read more

【保姆级教程】小白也能搞定!手把手教你部署AI小说生成器

【保姆级教程】小白也能搞定!手把手教你部署AI小说生成器

目录 一、 磨刀不误砍柴工:环境准备 二、 第一次安装:给代码安个家 第一步:把项目“搬”回家 第二步:造一个专属“房间” 第三步:安装依赖 第四步:点火启动 三、 关机重启后:如何再次开启? 四、 关键一步:配置“大脑”(API接口) 五、开始你的创作 六、写在最后:为什么推荐用蓝耘做“大脑”? 在这个AI辅助创作爆发的时代,拥有一款属于自己的本地AI写作工具,无疑是许多文字工作者的梦想。最近拿到一份AI小说生成器的部署文档,虽然功能强大,但对于非技术出身的朋友来说,那些代码和命令行多少有些“劝退”。 别担心,今天我们就把这份“天书”翻译成“人话”,手把手带你从零开始,搭建属于你的AI创作助手。无论你是第一次安装,还是关机后不知道怎么重启,这篇教程都能帮你搞定。

By Ne0inhk
【AI辅助编程】【Claude Code】----秒杀 Cursor!Claude Code 保姆级教程,从安装到实战全过程,一篇文章给你透

【AI辅助编程】【Claude Code】----秒杀 Cursor!Claude Code 保姆级教程,从安装到实战全过程,一篇文章给你透

文章目录 * 前言 * 一、基础概念解析, * 1.1、什么是Claude Code? * 1.2、Claude Code能干嘛? * 二、安装 Claude Code * 2.1、(方式一)基于node.js环境 * 2.2、(方式二)不依赖node.js环境,原生版(推荐) * 三、配置 * 3.1配置大模型端点和密钥 * 1.注册账号 (通过上面提供的连接注册) * 2.获取API Key * 3.配置cluade code 环境变量 * 4.测试配置: * 5.切换模型(非必要,可跳过) * 6.查看token用量

By Ne0inhk
相干伊辛机在医疗领域及医疗AI领域的应用前景分析

相干伊辛机在医疗领域及医疗AI领域的应用前景分析

引言:当量子退火遇见精准医疗 21世纪的医疗健康领域正经历着一场由数据驱动的深刻变革。从基因组学到医学影像,从电子病历到可穿戴设备,医疗数据正以指数级增长。然而,海量数据的背后是经典的“组合爆炸”难题——例如,药物分子中电子的量子态搜索、多模态医疗影像的特征匹配、个性化治疗方案的组合优化等,这些问题对经典计算机,甚至对传统的超级计算机而言,都构成了难以逾越的计算壁垒。 相干伊辛机(Coherent Ising Machine, CIM)作为一种基于量子光学和量子退火原理的新型计算范式,为解决这类组合优化问题提供了全新的物理路径。它不同于通用量子计算机(如超导门模型),CIM是专为寻找复杂伊辛模型基态而设计的专用量子处理器。本文将深入探讨CIM如何凭借其强大的并行搜索能力,在药物研发、精准诊断、个性化治疗以及医疗AI优化等领域,从计算底层赋能医疗科技的未来。 一、 相干伊辛机:从统计物理到量子计算引擎 要理解CIM在医疗领域的潜力,首先需要深入其物理内核,厘清它如何通过光的相干性来高效解决现实世界的复杂问题。 1. 伊辛模型:组合优化的“通用语言” 伊辛模型最初源于统计物理学

By Ne0inhk
多模态检索新突破!Qwen3-VL-Embedding/Reranker AI 真正“看懂“你在搜什么,从图片到视频全拿下!

多模态检索新突破!Qwen3-VL-Embedding/Reranker AI 真正“看懂“你在搜什么,从图片到视频全拿下!

Qwen3-VL-Embedding 和 Qwen3-VL-Reranker:统一多模态表征与排序 摘要 2025年6月,Qwen 团队开源了面向文本的 Qwen3-Embedding 和 Qwen3-ReRanker 模型系列,在多语言文本检索、聚类和分类等多项下游任务中取得了业界领先的性能。 2026年1月,该团队推出了 Qwen 家族的最新成员:Qwen3-VL-Embedding 和 Qwen3-VL-Reranker 模型系列。这些模型基于开源的 Qwen3-VL 模型构建,专为多模态信息检索和跨模态理解场景设计,能够将文本、图像、文档图像和视频等多种模态映射到统一的表示空间中。 Qwen3-VL-Embedding 模型采用多阶段训练范式,从大规模对比预训练逐步发展到重排序模型蒸馏,以生成语义丰富的高维向量。该模型支持 Matryoshka 表示学习(MRL),可灵活选择嵌入维度,并能处理最多 32K tokens 的输入。作为补充,Qwen3-VL-Reranker 采用交叉编码器架构和交叉注意力机制,对查询-文档对进行细粒度的相关性评估。 两个模型系列继承了

By Ne0inhk