这篇文章解决什么问题
AI 编码助手(Copilot、Cursor、Claude Code 等)已经成为许多开发者的日常工具。但当 AI 帮你写好代码后,你可能会遇到这样的情况:
- • 提交 PR 后,只收到「格式问题请改」这样的表面反馈
- • AI 理解业务逻辑有限,常犯重复的低级错误
- • 审查周期拖得很长,团队效率其实没提升
- • 没有把 AI 的优势用好,反而觉得 "又多了个工具要学"
本文教你一个最小可执行的 AI 辅助代码审查流程。不需要更改整个团队工具链,只需 5 个步骤,你就可以把 AI 变成可靠的审查伙伴。
背景
AI 编码助手生成代码后,审查工作往往落在人肉排查。但 AI 本身也是辅助审查的好帮手:
- • 它能快速读完 diff,标出潜在问题
- • 它能根据代码生成边界测试用例
- • 它能检查常见的安全/性能隐患
- • 它能帮助梳理审查意见,自动生成 reply
关键是要建立一个结构化的流程,而不是让 AI 乱翻东西。
前提条件
- • 项目使用 Git 工作流(branch、commit、PR)
- • 项目有基本的 CI/CD 接入
- • 熟悉你使用的 AI 编码助手(Copilot、Cursor、Claude Code 等)
- • 了解基本的测试框架(Jest、Pytest、Go test 等)
5 个最小步骤
Step 1:AI 先读 PR diff,标出潜在问题
做什么: 把 PR 的 diff 内容发给 AI,让它先做一次快速扫描
为什么: AI 擅长发现重复/冗余代码、类型不匹配、边界遗漏
操作方法:
# 获取当前 PR 的 diff 内容
git diff main...HEAD > pr-diff.txt然后在你的 AI 助手中输入:
请审查这段代码变更,重点检查:
- 1. 类型错误(TypeScript/Python 类型注解)
- 2. 边界条件处理(null/empty array)
- 3. 副作用(修改外部状态)
- 4. 安全问题(命令注入、路径穿越)
- 5. 是否符合常见代码规范
通关标准: AI 提出的 5 个问题中,有 3 个以上是有效问题
常见问题:
- • AI 可能会给出过于理想化的建议
- • 忽略业务特殊逻辑是正常的,需要人工判断
Step 2:AI 自动生成边界测试用例
做什么: 让 AI 为新增/修改的函数生成边界测试
为什么: AI 生成的边界测试覆盖率往往更全面
操作方法:
选中需要测试的函数,输入:
为这个函数生成边界测试用例,包括:
- • 空值/null 输入
- • 空数组/空对象
- • 超长/超大数字输入
- • 格式不正确的字符串
示例(Python):
# 原始函数
def calculate_total(items, discount_rate=0):
return sum(items) * (1 - discount_rate)
# AI 生成的边界测试
import pytest
def test_empty_items():
assert calculate_total([]) == 0
def test_null_items():
with pytest.raises(TypeError):
calculate_total(None)
def test_negative_discount():
with pytest.raises(ValueError):
calculate_total([100], discount_rate=-0.1)通关标准: 每个新增函数至少补 3 个边界测试
Step 3:AI 检查是否符合团队规范
做什么: 让 AI 审查代码风格和注释规范
为什么: 避免因为 "注释不全" 这样的低级问题又得返工
操作方法:
请检查这段代码是否符合我们团队的规范:
- 1. 函数都有 docstring/type hints
- 2. 复杂逻辑有注释说明
- 3. 变量命名清晰无歧义
- 4. 没有调试代码遗留
检查技巧:
// 不好的代码
function proc(d) {
return d.map(x => x * 2);
}
// AI 建议改进
/**
* 将数组中的每个数字乘以 2
* @param {number[]} data - 输入数字数组
* @returns {number[]} 处理后的数组
*/
function processNumbers(data) {
return data.map(item => item * 2);
}通关标准: AI 没找到规范问题,或团队已接受修改建议
Step 4:AI 检查安全/性能隐患
做什么: 让 AI 审查常见的安全和性能问题
为什么: AI 虽然不懂业务,但对常见漏洞模式敏感
检查方法:
问自己这几个问题(或让 AI 来回答):
- • 是否执行了 shell 命令?如果是,参数是否被安全转义?
- • 是否操作了文件系统?路径是否经过验证?
- • 是否处理了用户输入?是否存在注入风险?
- • 是否查询了数据库?是否有 SQL 注入风险?
- • 是否有可能引发性能问题(嵌套循环、大文件读取)?
常见安全问题:
// 危险:命令注入
exec('git log --oneline -n ' + count);
// 安全:参数数组
exec(['git', 'log', '--oneline', '-n', String(count)]);
// 危险:路径穿越
fs.readFile(userId + '/config.json');
// 安全:路径验证
const safePath = path.resolve(baseDir, userId, 'config.json');
if (!safePath.startsWith(baseDir)) {
throw new Error('Invalid path');
}通关标准: 没有明显的注入、遍历或敏感数据泄露风险
Step 5:人工复核,AI 辅助沟通
做什么: 人工判断 AI 提出的问题,AI 帮助整理审查意见
为什么: AI 可以快速整理,但最终决策需要人来做
操作方法:
- 1. 人工复核 - 针对 AI 提出的问题,逐一判断是否有效
- 2. AI 整理意见 - 把最终的问题整理成清晰的评论
请帮我整理下面这些审查问题,以清晰简洁的方式写成 PR 评论:
[粘贴你确认的问题列表]
AI 生成的审查评论示例:
Thanks for the PR! I have a few suggestions:
1. **Type safety**: Line 42-45 - The `userData` parameter lacks proper type annotation. Consider adding `User | null`.
2. **Boundary check**: The `calculateAverage` function doesn't handle empty arrays. Should return 0 or throw error?
3. **Security**: Line 78 - Using string concatenation in SQL query. Suggest using parameterized query instead.
4. **Style**: Missing docstring for `processBatch` function.通关标准: 审查意见清晰,被审查者能快速理解和修改
常见问题
AI 提的建议不准确怎么办?
- • 先问 AI 要解释原因:"为什么这会被认为是问题?"
- • 让 AI 给出修改建议:"如何改成更好的写法?"
- • 如果 AI 理解有误,记下这个案例,下次补充到 prompt 中
怎么让 AI 理解业务逻辑?
- • 在审查开始前,简单介绍业务背景
- • 指出哪些是业务规则约束
- • 让 AI 标记它不确定的地方,人工仔细检查
怎样权衡 AI 建议和自己判断?
- • 对于安全/性能问题:宁可信其可能性
- • 对于业务逻辑:必须人工确认
- • 对于风格问题:参考但不盲从
这个流程要多久?
- • Step 1-2:2-3 分钟
- • Step 3-4:3-5 分钟
- • Step 5:2-3 分钟
- • 总计:10-15 分钟,显著减少人工审查时间
执行流程总结
- 1. 保存代码后,先复制 diff 给 AI
- 2. 让 AI 快速扫描,记录问题
- 3. 让 AI 生成边界测试,补充测试覆盖
- 4. 让 AI 检查规范和安全问题
- 5. 人工判断后,AI 整理审查意见
总结
AI 编码助手是强大的生产力工具,但它不应该只用来写代码。通过这个最小审查流程,你可以:
- 1. 提前发现 80% 的常见问题
- 2. 减少审查周期 50% 以上
- 3. 让团队更早看到高质量的 PR
- 4. 把重复劳动交给 AI,把创造力留给人类
记住这个 5 步流程:
- 1. AI 读 diff,标问题
- 2. AI 补边界测试
- 3. AI 审规范
- 4. AI 审安全
- 5. 人工复核,AI 整理意见
你的 PR 审查效率会显著提升。
夜雨聆风