AI 代码审查:用大模型把关合并请求

AI 代码审查指用大模型(LLM)自动阅读合并请求(Pull Request,PR;在 GitLab 中称 Merge Request,MR)的改动,给出潜在问题的评论与改进建议。它不取代人工审查,而是作为”第一道筛子”:在 reviewer 介入之前,先由 AI 发现明显错误、安全隐患和风格偏差,从而把人的注意力留给更需要判断力的部分。

一、审查维度

AI 审查通常围绕以下维度展开:

  • 正确性:逻辑错误、边界条件遗漏、空值与异常处理、单元测试缺口。
  • 安全性:注入风险(SQL、命令、XSS)、硬编码密钥、不安全的反序列化、权限校验缺失。
  • 性能:不必要的全表扫描、N+1 查询、重复计算、大对象常驻内存。
  • 可维护性:命名含糊、函数过长、重复代码、耦合过紧、缺乏注释或文档。
  • 风格与约定:缩进、导入顺序、命名风格,以及团队自定义的 lint 规则。

把维度显式写进提示,可以让 AI 的输出更结构化、更稳定。

二、给 AI 的上下文

AI 能否审好,很大程度取决于你喂了什么上下文。最关键的输入包括:

  • diff 片段:本次改动的实际代码增删,是审查的核心依据。
  • 相关文件:被改动函数所依赖或调用的上下文文件,避免 AI 断章取义。
  • 团队约定:编码规范、架构边界、禁止使用的 API 清单等。

一个典型的 diff 输入示例如下:

- def divide(a, b):
-     return a / b
+ def divide(a, b):
+     if b == 0:
+         raise ValueError("denominator must not be zero")
+     return a / b

仅看这个 diff,AI 就能指出”原实现缺失除零保护”这一正确性问题;但要判断改动是否符合项目约定,还需要提供上下文文件与规范。

三、提示设计:角色 + 标准 + 输出格式

有效的审查提示一般包含三部分:角色设定、审查标准、输出格式。

角色:你是一名资深后端工程师,负责代码评审。
标准:
1. 只针对本次 diff 提意见,不讨论无关重构。
2. 每条意见必须给出文件、行号、严重级别(高/中/低)与理由。
3. 不确定的问题标注「待确认」,不要臆断。
输出格式(Markdown):
- [严重级别] 文件路径:行号 — 问题描述与建议改法

要点:要求”只针对 diff”、“给出行号与级别”、“不确定则标注”,可以显著降低 AI 的幻觉与跑题。把输出限制为结构化列表,也方便后续接入 CI 或评论机器人。

四、常用工具

  • GitHub Copilot(PR 审查):GitHub 原生集成,可在 PR 上给出行级评论,适合已使用 GitHub 的团队。【已核验】
  • CodeRabbit:第三方 AI 审查服务,支持 GitHub 与 GitLab,能结合仓库历史与约定做增量评论,并可配置忽略规则。【已核验】
  • SonarQube + AI:在既有静态分析(规则引擎、覆盖率、重复率)之上叠加 AI 解释与修复建议,适合对合规与质量门禁有硬要求的团队。【已核验】

工具选择上,小团队可用原生集成快速起步,对质量门禁要求高或已部署 SonarQube 的团队,可考虑”静态分析 + AI 解释”的组合。各工具的具体能力与定价随版本变动,落地前建议以官方文档为准。【待核实:各工具最新功能与计费细节】

五、局限

AI 审查并非万能,主要局限有两点:

  • 误报(false positive):把合理写法判为问题,或忽略项目特殊背景。需要 reviewer 人工过滤,否则噪声会削弱团队对 AI 评论的信任。
  • 漏掉业务逻辑:AI 通常只能看到 diff 与有限上下文,难以理解端到端业务意图、跨服务契约与历史坑点,因此容易放过”看起来对、实际错”的逻辑缺陷。

换言之,AI 擅长”找低级与规范类问题”,不擅长”判断业务正确性”。

六、人机分工

合理的分工是:AI 初筛,人定夺。

  • AI 负责任务明确、可机械判定的部分:风格、明显空指针、注入模式、未用变量等。
  • 人负责需要上下文与判断的部分:架构取舍、业务正确性、性能权衡、以及与需求的一致性。
  • 对 AI 的高级别意见应重点复核;对”待确认”类意见,由 reviewer 决定是否采纳或补充信息。

把 AI 定位为”永不疲倦的第一轮 reviewer”,能缩短 PR 的平均等待时间,但最终的合并决策仍应留在人手中。

小结

  • AI 代码审查用大模型自动评审 PR/MR,覆盖正确性、安全、性能、可维护性与风格五个维度。
  • 审查质量取决于上下文:diff、相关文件与团队约定缺一不可;提示应明确”角色 + 标准 + 输出格式”。
  • 工具上 GitHub Copilot、CodeRabbit、SonarQube+AI 各有侧重;局限在于误报与对业务逻辑的盲区。
  • 最佳实践是”AI 初筛、人定夺”:AI 处理可机械判定的问题,人保留最终决策权。

参考与延伸阅读

  • GitHub Docs, “Using GitHub Copilot code review”(官方文档,已核验)
  • CodeRabbit 官方文档与产品说明(已核验)
  • SonarQube 官方文档:静态分析与质量门禁(已核验)
  • Google, “What is AI code review?” 工程实践综述类资料(待核实:具体出处与版本)