AI代码审查工作流:让Agent帮你抓Bug而不是添乱
AI做代码审查到底靠不靠谱?讲清怎么搭一套人机协作的审查工作流,让AI抓真问题、少报噪音。
AI能审代码,但会添乱
现在不少团队让 AI 自动审 PR。效果两极分化:
- 用得好:抓出边界 bug、安全漏洞、遗漏的错误处理,审查提速
- 用不好:满屏”建议加注释""变量名可以更好”的废话,工程师直接关掉
关键不在于用不用 AI,而在于怎么设计这套工作流。
AI审查擅长什么、不擅长什么
擅长
- 模式化问题:空指针、资源未释放、SQL 拼接、硬编码密钥
- 一致性:全项目代码风格、命名、错误处理是否统一
- 安全检查:常见注入、越权、敏感信息泄露
- 测试覆盖:新增逻辑有没有配套测试
- 全局视角:改动是否影响其他模块(人类审查常漏)
不擅长
- 业务正确性:这段逻辑符不符合产品需求,AI 不知道
- 架构取舍:为什么这样设计,好不好,要人判断
- 性能直觉:真实瓶颈在哪,往往要经验和压测
- 上下文:不了解历史决策和团队约定,会给出”正确但无意义”的建议
核心结论:AI 做”第一遍粗筛”,人做”最终判断”。
推荐工作流
开发者提交 PR
↓
AI 自动审查(几秒内出结果)
↓
【按严重级别分类】
🔴 必须改:安全、崩溃风险 → 阻塞合并
🟡 建议改:可维护性 → 提示不阻塞
⚪ 参考:风格 → 折叠,不打扰
↓
人 review 重点看:业务逻辑 + AI标记的高危项
↓
合并
关键是分级。不分级的 AI 审查 = 噪音制造机。
让AI抓真问题的技巧
1. 给足上下文
把项目的编码规范、架构约定、常见坑写进审查提示。没有这些,AI 只能给通用建议。
2. 明确”报什么、不报什么”
- ✅ 报:潜在 bug、安全、未处理异常、破坏性改动
- ❌ 不报:纯风格偏好、无意义的 nitpick
在提示里直接排除噪音类型。
3. 只审改动+影响范围
别让 AI 通读整个项目,聚焦 diff 和被影响的调用方。
4. 要求给出理由和位置
要求 AI 输出:问题类型 + 具体行 + 为什么是问题 + 建议。含糊的建议直接丢弃。
5. 结合静态分析工具
AI 不是万能的。Linter、类型检查、SAST 工具做机械检查更准更便宜,AI 专注它们覆盖不到的语义问题。
防噪音的措施
- 分级展示:低优先级建议默认折叠
- 每 PR 限条数:只报 Top N 最严重的
- 可反馈:工程师标记”无用”,用来调优提示
- 定期清理规则:过时的检查项删掉
- 别阻塞合并:除了安全/崩溃,其余不强制
别踩的坑
- 让AI审查阻塞一切:满屏建议导致开发停滞,团队会直接禁用
- 不做分级:噪音淹没真问题,等于没审
- 完全替代人工:丢掉业务正确性把关,风险巨大
- 不给项目上下文:AI 只能给放之四海皆准的废话
- 不追踪效果:不知道 AI 抓的问题有没有用,无法改进
落地清单
- 把编码规范和常见坑写进审查提示
- 明确 AI 该报/不该报的问题类型
- 按严重级别分级,低优默认折叠
- 结合 Linter/SAST,各司其职
- 人工重点审业务逻辑和高危项
- 加反馈机制,持续调优提示
- 衡量指标:抓到的真 bug 数、误报率、审查耗时
结语
AI 代码审查的价值,不在于”能审”而在于”审得准”。把它定位成不知疲倦的第一遍粗筛,用人做最终判断,用分级控制打扰程度——这样它才真正帮你抓 Bug,而不是制造噪音。记住:AI 报得越多不等于越好,报得越准才有用。