用 AI 做 Code Review 的一个月
上个月我们团队试了用 AI 辅助 Code Review,记录一下效果。
背景
团队 8 个人,每天大概 20 个 MR。以前靠人工 Review,响应慢、质量参差不齐。有时候忙起来就草草过了。
试了几个工具:
| 工具 | 价格 | 特点 |
|---|---|---|
| GitHub Copilot | $19/月 | 深度集成 GitHub |
| CodeRabbit | $12/月 | 独立服务,支持多平台 |
| 自建 (GPT-4 API) | 按量付费 | 灵活,需要开发 |
最后选了 CodeRabbit,主要是配置简单、支持 GitLab。
效果
优点
1. 发现低级错误
# AI 发现的问题
def get_user(id):
user = db.query(id) # 缺少错误处理
return user.name # user 可能为 None
建议修改:
def get_user(id):
user = db.query(id)
if not user:
raise UserNotFound(id)
return user.name
2. 检查安全漏洞
// AI 标记的危险代码
const query = `SELECT * FROM users WHERE id = ${userId}`;
提示有 SQL 注入风险,建议用参数化查询。
3. 代码风格一致性
AI: 这个文件用了 4 空格缩进,但项目其他文件是 2 空格。建议统一。
缺点
1. 误报
有时候 AI 会建议”优化”完全没问题的代码:
// AI 建议改用 Optional chaining
const name = user && user.profile && user.profile.name;
// 但这段代码是故意的,因为要处理 undefined 和 null 的区别
2. 理解不了业务逻辑
def calculate_discount(price, user):
if user.vip_level >= 3:
return price * 0.8
return price
# AI: 建议用更清晰的变量名
# 但它不知道 vip_level 3 是什么意思
业务规则还是得人工看。
3. 过于啰嗦
每个 MR 都给你整一堆建议,有用的没几个。后来我们调低了灵敏度,只让它关注安全问题和明显 Bug。
数据对比
试用一个月后的统计:
| 指标 | AI 前 | AI 后 | 变化 |
|---|---|---|---|
| Review 响应时间 | 4.2h | 1.5h | -64% |
| 线上 Bug 数 | 5个/月 | 3个/月 | -40% |
| 人工 Review 耗时 | 2h/天 | 0.8h/天 | -60% |
Bug 数下降主要是因为 AI 发现了一些边界条件的问题。
最佳实践
1. 配置合理的规则
不要让 AI 什么都管。我们只让它关注:
- 安全漏洞
- 空指针/类型错误
- 未处理的异常
- 明显的性能问题
代码风格这类事交给 ESLint/Prettier。
2. 人工 Review 不可少
AI 只是辅助。关键逻辑、安全相关代码必须人工过一遍。
3. 持续调整
根据误报情况调整配置。用了一周后,我们关掉了”代码可读性”检查,因为建议太主观了。
4. 团队共识
一开始有同事对 AI 挑错很反感。后来开会讨论了一次,明确了 AI 只是工具,不是裁判,大家心态好多了。
成本分析
| 项目 | 费用 |
|---|---|
| CodeRabbit 订阅 | $96/月 (8人) |
| 节省的人力 | 约 20h/月 |
| 时薪按 $50 算 | $1000/月 |
| ROI | 约 10 倍 |
数字比较粗糙,但确实划算。
总结
AI Code Review 有用,但不是万能的。适合处理低级错误和重复性工作,复杂的业务逻辑还是得靠人。
关键是调整好预期:把 AI 当成初级 Reviewer,不是替代者。
对了,如果你们团队也想试,建议先在非核心项目上试点,摸清楚效果再推广。