ai-code-review
1. 使用 JS 脚本
这种方法其实就是写一个简单的脚本,通过调用 OpenAI 的 API,将代码提交给 AI 进行评审。
这里我们需要使用 Node.js 来实现这个功能。利用 git 的 pre-commit
hooks,在 git 提交前执行这个脚本。整体流程如下:
接下来我们来具体实现下代码。在项目根目录下新建一个pre-commit.js文件,这个文件就是我们的脚本。
1.1 校验暂存区代码
通过 git diff --cached
验证是否存在待提交内容,如果没有改动则直接退出提交。
1 | const { execSync } = require('child_process'); |
1.2 获取差异内容
1 | const getDiff = () => { |
1.3 准备prompt
这里我们需要准备一个 prompt,这个 prompt 就是用来告诉 AI 我们要检查什么内容。
1 | const getPrompt = (diff) => { |
1.4 定义一个 AI 执行器
这里我用 chatgpt 实现的,具体代码如下:
1 | const execCodeReviewer = (text) => { |
1.5 结果处理
这里我们需要解析一下结果,提取结果中是否包含 "COMMIT: YES"关键字,有则允许提交,否则不允许提交并打印结果
1 | const handleReviewResult = (result) => { |
1.6 主函数执行整个流程
1 | const main = async () => { |
1.7 git hooks里添加执行该脚本逻辑
进入项目根目录,在这里运行 git bash。打开pre-commit钩子文件
1 | vim .git/hooks/pre-commit |
然后添加以下内容
1 |
|
保存退出后,我们就可以使用 git 做下测试。
1.8 测试
我新建了一个 test.js 文件,然后添加如下代码:
1 | const fn = () => { |
然后执行 git add . 然后 git commit -m “test”。效果如下:
看来还是不错的,有效识别代码中的逻辑缺陷与语法隐患(如无限循环、变量误用等),同时当不满足提交条件后,也是直接终止了 commit。这里面其实比较关键的是 prompt 的内容,ai 评审的效果主要就是取决于它。
2. ai-pre-commit-reviewer 插件
上面我们是通过 js 脚本来实现的,其实也可以通过现成插件来实现。原理和第一个方法是一样的,只不过是插件帮我们封装好了,我们只需要配置下即可。插件地址
2.1 安装插件
1 | npm install ai-pre-commit-reviewer --save-dev |
2.2 配置文件
插件安装完成后,新建一个.env 文件
1 | baseURL= *** #模型服务地址 |
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 安装与配置
1 | # 执行以下命令 |
安装完后可以看下容器列表
没问题后启动服务,然后在浏览器中访问 http://localhost:8080/ 就可以看到gerrit首页
2.1.1 配置 ssh 密钥
1 | ssh-keygen -t ed25519 -C "your_email@example.com" |
然后在 “settings” 页面中选择左侧的"SSH Keys",将复制的公钥内容粘贴进去。添加完成后测试下连接情况。
1 | ssh -p 29418 admin@localhost # 输入yes接受指纹 |
看到 Welcome to Gerrit Code Review 表示成功
2.1.2 拉取项目测试
可以在 BROWSE > Repositories 里查看当前项目列表,我这里用 All-Projects 做下测试,理论上是要新建项目的。
1 | git clone "ssh://admin@localhost:29418/All-Projects" |
安装 Gerrit 提交钩子 commit-msg(必须!)。Gerrit 依赖 commit-msg 钩子实现以下功能:
- 生成 Change-Id:每个提交头部自动添加唯一标识符,格式示例
Change-Id: I7e5e94b9e6a4d8b8c4f3270a8c6e9d3b1a2f5e7d
- 校验提交规范: 确保提交信息符合团队约定格式(如包含任务编号)
- 防止直接推送: 强制推送到 refs/for/ 路径而非主分支
1 | cd All-Projects |
然后新建个js文件,写点代码并提交。
1 | git push origin HEAD:refs/for/refs/meta/config # 提交到 refs/meta/config 分支 |
然后在gerrit首页可以看到刚刚提交的代码,点击查看详情,可以看到代码审核的流程。
2.2 插件安装和配置
将 ai-code-review 插件克隆到本地。插件详情可参考官方文档。此插件可以使用不同的 AI Chat 服务(例如 ChatGPT 或 OLLAMA)
1 | git clone https://gerrit.googlesource.com/plugins/ai-code-review |
安装 Java 和构建工具
1 | sudo apt update |
进去项目目录构建 JAR 包
1 | cd ai-code-review |
当输出BUILD BUILD SUCCESS时,表示构建成功。进入目录看下生成的包名。
然后将生成的jar包复制到 gerrit 的 plugins 目录下
1 | # 我这里容器名为 gerrit,JAR 文件在 target/ 目录 |
然后进入容器内看下插件列表,确认插件已经安装成功
也可以在 gerrit 网页端查看插件启动情况
接着修改配置文件,在 gerrit 的 etc 目录下找到 gerrit.config 文件。但在这之前需要在 Gerrit 中创建一个 AI Code Review 用户,这个席位用于 AI 来使用进行代码评审。
1 | vi var/gerrit/etc/gerrit.config |
在文件里添加以下内容。
1 | [plugin "ai-code-review"] |
- 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,让它用中文生成评论,它默认是用英文回答的。
- 本文作者: puppy
- 本文链接: https://ispuppy.github.io/2025/04/09/aiCheck/
- 版权声明: 本BLOG上原创文章未经本人许可,不得用于商业用途及传统媒体。网络媒体转载请注明出处,否则属于侵权行为。