1. 概述

AI Code Review的标准流程

AI Code Review应遵循"AI预审 → 人工复核 → 反馈闭环"的三阶段标准流程,确保审查的高效性和一致性。以下为推荐的标准化执行流程:

阶段执行者核心活动产出物
1. 变更准备 开发者 提交PR,填写变更说明、关联需求/缺陷单号,自检通过基础门禁 PR描述 + 自检报告
2. AI自动预审 AI系统 自动拉取diff,按模板执行安全检查、质量检查、规范检查,生成审查报告 AI审查报告(含分级问题列表)
3. 人工复核 审查者 基于AI报告快速定位问题,确认/驳回AI发现,补充AI未覆盖的架构与业务逻辑审查 最终审查意见(含确认/驳回标记)
4. 问题修复 开发者 根据审查意见修复问题,标注修复状态,重新提交 修复commit + 修复说明
5. 反馈闭环 审查者 + AI 审查者确认修复;AI学习本次误报/漏报,优化审查规则 闭环确认 + 规则优化建议

模板使用说明

以下模板以检查单(Checklist)形式组织,每个检查项包含:检查内容、严重级别、检测方式建议和典型问题示例。模板可直接嵌入AI Code Review的System Prompt中使用,也可作为人工审查的参考清单。

💡 最佳实践 建议将本页模板与「02 AI辅助Code Review」中的实施流程配合使用:先用模板配置AI的审查规则,再按标准流程执行审查。定期(每月)回顾误报率和漏报率,迭代优化检查项。

2. 安全审查模板

OWASP Top 10 LLM 检查项

OWASP(开放式Web应用安全项目)专门针对LLM应用发布了Top 10安全风险清单。在Code Review中,需要结合传统OWASP Top 10和LLM特有风险进行检查:

SQL注入 / XSS / 路径遍历检测

检查项级别检测要点错误示例
SQL注入 Critical 是否存在字符串拼接SQL(含MyBatis ${})、动态SQL未使用参数化查询 "SELECT * FROM users WHERE name='" + input + "'"
XSS跨站脚本 Critical 用户输入是否直接在HTML中渲染(v-html、innerHTML等)、响应头是否设置CSP element.innerHTML = userInput;
路径遍历 Critical 文件路径是否由用户输入拼接、是否校验"../"等目录跳转字符 new File("/data/" + filename)
命令注入 Critical 是否使用Runtime.exec()或subprocess拼接用户输入、是否使用参数数组而非字符串 Runtime.getRuntime().exec("ping " + host)
SSRF服务端请求伪造 Major 用户可控URL是否校验目标地址、是否限制内网地址访问 直接使用用户提供的URL发起HTTP请求
反序列化漏洞 Major 是否反序列化不可信数据、是否使用安全的序列化库(如Jackson的enableDefaultTyping) ObjectInputStream.readObject() 未做类型白名单

敏感信息泄露检查

Prompt注入检查

针对AI生成代码中涉及LLM调用的部分,需要专项检查Prompt注入风险:

⚠️ 安全审查底线原则 Critical级别问题必须清零才能合并代码。Major级别问题需要记录在案并给出修复计划。建议在CI/CD门禁中配置安全扫描自动拦截Critical问题。

3. 代码质量审查模板

代码复杂度检查

检查项级别阈值/规则说明
圈复杂度 Major 单方法 ≤ 15 超过15的方法需拆分或重构。AI可自动计算if/for/while/case分支数
方法长度 Minor 单方法 ≤ 80行 超过80行建议提取子方法,提升可读性和可测试性
参数个数 Minor 单方法参数 ≤ 5个 超过建议使用参数对象(DTO)封装
嵌套深度 Major 嵌套 ≤ 4层 过深嵌套影响可读性,建议使用卫语句或提前返回
类依赖数 Minor 单类依赖 ≤ 20个 过多依赖说明类职责不单一,违反单一职责原则
重复代码 Major 重复块 ≥ 6行 检测相似代码块,建议提取公共方法或工具类

错误处理完整性

日志记录规范

并发安全

🔍 AI检测优势 并发问题是人工Code Review中最容易遗漏的类型之一。AI可以通过分析代码的线程模型和共享变量访问模式,发现隐蔽的竞态条件。例如,AI能识别出在Stream并行操作中修改外部集合的场景——这是人工审查极易忽略的。

4. 银行业务审查模板

金额计算精度

金融系统中金额计算的精度问题可能导致严重的资金差错。以下为强制性检查项:

交易幂等性

在分布式金融系统中,幂等性是防止重复扣款、重复入账的关键保障:

合规性检查

检查项级别合规依据检查要点
个人信息保护 Critical 《个人信息保护法》 收集/存储/传输个人信息是否有明确授权;敏感个人信息(金融账户、生物识别)是否加密存储;是否有数据删除/匿名化机制
数据跨境传输 Critical 《数据安全法》 是否存在将境内用户数据发送到境外服务器的代码;是否经过安全评估
反洗钱AML Major 《反洗钱法》 大额交易是否触发监控上报;可疑交易识别规则是否正确实现
等保合规 Major 《网络安全等级保护条例》 访问控制(最小权限原则)、安全审计(操作日志不可删除)、通信加密(TLS 1.2+)
征信合规 Major 《征信业管理条例》 征信查询是否有明确授权;是否有查询原因记录;不良信息保存是否超期

审计日志

⚠️ 银行业务强制红线 涉及金额计算精度交易幂等性的Critical问题,必须由至少两名高级开发者确认修复后方可合并。建议将银行审查模板的Critical项配置为CI/CD的强制门禁。

5. AI代码特征审查

AI生成的代码具有独特的缺陷模式,需要针对性地进行专项审查。以下检查项专门针对AI代码的常见问题:

AI幻觉检测(不存在的API/库)

过度工程检查

AI倾向于生成"教科书式"的完备代码,但实际项目中可能过于复杂:

冗余代码检测

⚠️ AI代码特征审查的特殊性 与传统的代码审查不同,AI代码特征审查需要审查者具备"AI怀疑"思维——对看似完美、规范、完备的代码保持警惕。统计数据显示,AI生成代码中"幻觉API"的出现频率约为3%-8%,过度工程的占比约为10%-15%。建议对AI生成代码100%执行本模板检查。

6. AI Code Review Prompt模板

以下为可直接使用的结构化Prompt模板,将上述检查单嵌入AI审查流程:

通用审查Prompt

你是一位资深代码审查专家,请对以下代码变更进行全面审查。 ## 审查维度 请按以下维度逐项检查,每个维度独立输出审查结果: ### 1. 安全审查 [必须] - SQL注入、XSS、路径遍历、命令注入 - 硬编码密钥/密码/Token - 敏感信息泄露(日志、异常堆栈、响应体) - 权限校验缺失(越权风险) - LLM相关:Prompt注入、输出未校验 ### 2. 代码质量审查 [必须] - 空指针/空值检查缺失 - 资源未关闭(连接、流、文件) - 异常处理不当(吞噬异常、异常信息丢失) - 边界条件未处理(数组越界、除零、空集合) - 并发安全(共享变量同步、死锁风险) - 日志规范(级别、完整性、脱敏) ### 3. 业务专项审查 [按需] - 金额计算是否使用BigDecimal(禁止float/double) - 交易接口是否有幂等设计 - 审计日志是否完整 ### 4. AI代码特征审查 [AI生成代码必检] - 是否存在虚构的API/方法/类 - 是否存在过度工程(不必要的抽象、模式) - 是否存在死代码/冗余代码 ## 输出格式 请以JSON数组格式输出,每个问题包含以下字段: { "severity": "critical|major|minor|info", "category": "security|quality|business|ai-hallucination", "file": "文件路径", "line": 行号(如可定位), "title": "问题简述(≤20字)", "description": "详细说明问题所在", "suggestion": "具体的修复建议", "code_snippet": "问题代码片段(可选)" } ## 代码变更 [此处粘贴PR的diff内容]

银行专项审查Prompt

## 银行业务专项审查规则(追加到通用Prompt之后) ### 金额计算强制规则 1. 所有涉及金额的变量必须使用BigDecimal(Java)或Decimal(Python), 发现float/double用于金额计算立即报告为Critical。 2. BigDecimal必须使用String构造器:new BigDecimal("0.1"), 发现new BigDecimal(double)报告为Critical。 3. 除法运算必须指定RoundingMode,未指定报告为Major。 ### 幂等性强制规则 1. 支付/转账/退款接口必须包含幂等键参数并在服务端校验。 2. 幂等校验必须在事务开始前执行。 3. 消息队列消费者必须实现幂等处理。 ### 合规规则 1. 审计日志包含操作人、时间、操作类型、操作对象、结果、IP。 2. 个人信息(手机号、身份证、银行卡号)必须加密存储。 3. 不得将境内用户数据发送到境外服务器。

7. 实战演练

🔰 任务:使用模板审查一段AI生成代码

目标:使用本页面的审查模板,对一段典型的AI生成银行转账代码进行完整的Code Review,输出结构化审查报告。

背景:以下是某银行App中"转账功能"的代码片段,由AI助手生成。请使用安全审查模板 + 银行业务审查模板 + AI代码特征审查模板进行全面审查。

// 转账服务 - AI生成
public class TransferService {

    public TransferResult transfer(String fromAccount, String toAccount,
                                    double amount, String remark) {
        // 参数校验
        if (fromAccount == null || toAccount == null) {
            return new TransferResult(false, "账户不能为空");
        }

        // 检查余额
        String sql = "SELECT balance FROM accounts WHERE account_no = '"
                     + fromAccount + "'";
        Account account = jdbcTemplate.queryForObject(sql, Account.class);
        if (account == null) {
            return new TransferResult(false, "账户不存在");
        }

        double balance = account.getBalance();
        if (balance < amount) {
            return new TransferResult(false, "余额不足");
        }

        // 执行转账
        double newFromBalance = balance - amount;
        String updateSql = "UPDATE accounts SET balance = " + newFromBalance
                         + " WHERE account_no = '" + fromAccount + "'";
        jdbcTemplate.update(updateSql);

        // 更新收款方
        Account toAccountObj = getAccountByNo(toAccount);
        double newToBalance = toAccountObj.getBalance() + amount;
        jdbcTemplate.update("UPDATE accounts SET balance = "
                          + newToBalance + " WHERE account_no = '"
                          + toAccount + "'");

        // 记录日志
        System.out.println("转账成功: " + fromAccount + " -> "
                         + toAccount + ", 金额: " + amount);

        return new TransferResult(true, "转账成功",
            "TRANS" + System.currentTimeMillis());
    }

    private Account getAccountByNo(String accountNo) {
        return jdbcTemplate.queryForObject(
            "SELECT * FROM accounts WHERE account_no = '"
            + accountNo + "'", Account.class);
    }
}

审查步骤:

  1. 安全审查(5分钟):识别SQL注入风险、敏感信息泄露、权限校验等问题
  2. 业务审查(5分钟):检查金额类型(double→BigDecimal)、幂等性缺失、事务缺失
  3. 质量审查(3分钟):检查异常处理、日志规范、并发安全
  4. AI代码特征审查(2分钟):检查幻觉API、过度工程、冗余代码
  5. 输出报告(5分钟):按Prompt模板的JSON格式输出结构化审查结果

预期发现(至少应包括):

#问题类别严重级别问题简述
1安全CriticalSQL注入 — 字符串拼接SQL查询
2业务Critical金额类型错误 — 使用double计算金额
3业务Critical缺少事务管理 — 扣款和入账不在同一事务中
4业务Critical缺少幂等设计 — 重复请求会导致重复扣款
5安全Major使用System.out打印业务日志(生产环境不可用)
6安全Major转账流水号使用时间戳 — 不够唯一,安全强度不足
7质量Major未处理queryForObject返回null的情况

验收标准:

  • 发现至少5个问题(含3个以上Critical级别)
  • 每个问题包含:级别、类别、文件行、描述、修复建议
  • 输出JSON格式符合Prompt模板规范
  • 总计审查时间不超过20分钟