Code Review 中如何识别 AI 生成代码风险
团队 Code Review 教程:识别 AI 生成代码中的越界修改、幻觉 API、漏测、过度抽象、安全隐患和业务语义错误。
AI 生成代码最大的风险,不是语法错。
真正危险的是:代码看起来合理,但业务语义错了;测试没覆盖,但总结写得很自信;改动范围变大了,但开发者没意识到。
所以 Code Review 要有一套专门识别 AI 风险的检查方法。
AI 生成代码常见风险
| 风险 | 表现 |
|---|---|
| 越界修改 | 顺手改了无关文件、格式化大面积代码。 |
| 幻觉 API | 调用了项目里不存在或语义不对的方法。 |
| 业务误解 | 代码能跑,但不符合真实业务规则。 |
| 漏掉异常分支 | 只处理 happy path。 |
| 过度抽象 | 为小需求造大工具、大封装。 |
| 安全遗漏 | 忽略权限、密钥、输入校验。 |
| 测试假覆盖 | 测试写了,但没覆盖真实风险。 |
Review 第一问:它改多了吗
先看文件范围:
请审查本次 diff 是否有越界修改。 重点: 1. 是否改了任务无关文件。 2. 是否大面积格式化。 3. 是否顺手重构。 4. 是否新增依赖。 5. 是否修改配置、权限、脚本。
AI 很容易“顺手优化”。Review 要先把范围收回来。
先按文件类型判断风险
Review 不要平均用力。不同文件风险完全不同:
| 文件类型 | Review 重点 |
|---|---|
| 样式、文案 | 是否影响响应式、视觉层级和可访问性 |
| 业务组件 | 状态、边界、异常分支、用户操作链路 |
| 接口和服务层 | 参数校验、错误处理、兼容性、幂等 |
| 权限和认证 | 是否绕过校验、是否扩大访问范围 |
| 数据库和迁移 | 是否可回滚、是否影响已有数据 |
| 构建和部署脚本 | 是否影响 CI、生产环境和回滚 |
| 依赖文件 | 是否引入未知包、锁文件是否异常变大 |
可以让 CC 先给 Review 优先级:
请根据本次 diff 的文件类型,给出 Code Review 优先级。 要求: 1. 哪些文件必须重点人工审查。 2. 哪些文件可以快速检查。 3. 哪些改动可能影响生产或安全。 4. 不要只按文件数量判断风险。
Review 第二问:它理解业务了吗
语法没错不代表业务正确。
检查:
- 条件判断是否符合业务规则。
- 默认值是否合理。
- 空状态是否符合产品预期。
- 权限分支是否完整。
- 错误提示是否准确。
- 数据单位和字段含义是否正确。
可以让 CC 反向审查:
请以业务审查视角检查本次改动。 要求: 1. 不要只看代码是否能运行。 2. 判断业务规则是否被误解。 3. 列出需要产品或后端确认的问题。 4. 标出没有证据支持的假设。
Review 第三问:它验证了吗
AI 总结里的“已完成”不能当证据。
必须看:
- 是否运行了检查。
- 检查结果是什么。
- 是否覆盖关键路径。
- 是否覆盖异常路径。
- 是否有手动验收说明。
如果没有验证,就让它补:
请为本次改动补一份验证清单。 要求: 1. 正常路径。 2. 空数据。 3. 错误状态。 4. 权限不足。 5. 边界输入。 6. 回归风险。
验证清单要对应改动,不要生成一份万能清单。比如只改了登录错误提示,就重点看登录失败、成功、空输入、接口异常;不要突然要求跑全站性能测试。
Review 第四问:有没有安全问题
重点看:
- 密钥是否进入代码。
- 日志是否输出敏感信息。
- 权限是否被绕过。
- 输入是否缺少校验。
- 错误信息是否泄露内部细节。
- 依赖是否可疑。
企业项目中,安全问题优先级高于功能完成。
Review 第五问:有没有过度设计
AI 生成代码经常会把小任务做成大抽象。
常见表现:
- 为一个页面新增通用框架。
- 为一个分支新增复杂配置层。
- 为两个字段提炼一套工具库。
- 为一次性需求新增全局状态。
- 引入新依赖只为少量逻辑。
可以这样审:
请检查本次改动是否存在过度抽象。 重点看: 1. 新增的抽象是否真的被多处使用。 2. 是否为小需求引入过重结构。 3. 是否增加后续维护成本。 4. 是否可以用更直接的小改动完成。
Review 时要记住:能交付、可读、可验收,比“显得高级”更重要。
AI 代码 Review 清单
请按 AI 生成代码风险清单审查本次 diff。 检查项: 1. 是否越界修改。 2. 是否存在幻觉 API 或不存在的配置。 3. 是否误解业务语义。 4. 是否漏掉异常分支。 5. 是否过度抽象或引入不必要复杂度。 6. 是否存在权限、安全、敏感信息问题。 7. 测试和验收是否覆盖真实风险。 输出: - 必须修复 - 建议修复 - 需要人工确认 - 可以接受
PR 描述应该怎么写
AI 参与的 PR,不要只写“完成需求”。建议写:
## 改动目标 【本次要解决的问题】 ## Claude Code 参与范围 - 只读分析: - 生成计划: - 修改代码: - 辅助审查: ## 人工确认 - 我确认了哪些业务规则: - 我检查了哪些 diff: - 我运行了哪些验证: ## 风险 - 可能影响: - 需要 Reviewer 重点看:
这样 Reviewer 知道该看哪里,也知道哪些结论不是 AI 单方面给出的。
Review 结论怎么分级
不要所有问题都写成“建议优化”。可以分四级:
| 级别 | 含义 |
|---|---|
| 必须修复 | 会导致功能错误、安全风险、数据风险、构建失败 |
| 需要确认 | 业务规则、产品预期、接口兼容还不确定 |
| 建议改进 | 可读性、维护性、体验可以更好 |
| 可以接受 | 有小瑕疵但不影响本次交付 |
这种分级能避免 Review 变成无重点的挑刺。
团队 Review 规范建议
团队可以规定:
- AI 参与的 PR 必须说明 AI 做了什么。
- PR 描述必须包含验证结果。
- 高风险文件必须人工重点审查。
- 不接受“AI 已验证”这种无证据说明。
- 不接受无关格式化和顺手重构。
验收结果
学完后,应该能做到:
- 看出 AI 代码是否越界修改。
- 识别业务语义错误,而不是只看语法。
- 要求 AI 参与的 PR 写清人工确认点。
- 把 Review 问题分成必须修复、需要确认、建议改进。
- 对权限、数据、依赖、配置类改动保持更高警惕。