1876 字
约 6 分钟
7
01-AI 写得更快以后,为什么 Code Review 反而更累了?
2026-07-20
2026-07-20

AI 写得更快以后,为什么 Code Review 反而更累了?

越来越多团队开始把 Claude Code、Codex 等编码 Agent 引入日常开发。它们能够快速阅读代码、实现功能、补测试和修改多个文件,开发产量确实上去了。

但很多团队使用一段时间后,会遇到一个有些反直觉的问题:代码写得更快了,Code Review 却更累了。

问题不一定出在 AI 生成的代码完全不能用,而是同一个项目里的代码开始出现越来越多不一致。

同一个需求,为什么会生成两种风格?

假设需求只是“根据用户 ID 查询用户”。一位开发者让 AI 生成的代码可能是:

async function getUserById(id: string) {
  const user = await db.query(
    "SELECT * FROM users WHERE id = ?",
    [id]
  );
  console.log("User fetched:", user);
  return user;
}

另一位开发者得到的代码可能是:

async function get_user_by_id(userId: string) {
  try {
    const user = await db.findOne({ id: userId });
    logger.info("Fetched user", { userId });
    return user;
  } catch (error) {
    logger.error("Failed to fetch user", { error, userId });
    throw new ServiceError("User query failed", { cause: error });
  }
}

两段代码都在完成查询,但具体写法完全不同:

  • 一个使用 camelCase,另一个使用 snake_case
  • 一个使用 console.log,另一个使用结构化 logger。
  • 一个直接向上抛出异常,另一个在当前层捕获并转换。
  • 一个使用手写 SQL 和 SELECT *,另一个使用 ORM。
  • 两者对于日志、错误边界和数据访问层的理解不同。

这里先不判断哪一种一定更好。真正的问题是:同一个项目没有形成稳定、一致、可预测的工程约定。

AI 会放大团队已有的不确定性

AI 并不会天然知道团队内部那些没有写下来的约定。例如:

  • 项目究竟使用哪个 logger?
  • 哪一层负责异常转换?
  • Controller 是否可以直接调用 Repository?
  • API 使用哪种统一响应格式?
  • 修改接口时要补单元测试还是集成测试?
  • 数据库字段、语言变量和 JSON 字段分别使用什么命名方式?

如果这些信息只存在于组长的记忆、零散文档和历史 Review 评论里,AI 就只能根据当前代码、通用经验和开发者提示自行推断。

更麻烦的是,不同成员给 AI 的提示也不同。有的人只说“实现这个接口”,有的人会附上日志、异常和测试要求。最终生成结果自然参差不齐。

AI 的作用更像一个放大器:团队原来模糊的地方,会以更高速度、更大规模出现在代码里。

为什么只靠人工 Review 兜不住?

传统开发中,一名工程师一天可能只提交有限数量的改动。现在 Agent 可以一次修改几十个文件,甚至同时生成实现、测试、迁移和文档。

如果 Reviewer 仍然逐项检查下面这些内容:

  • 有没有使用 console.log
  • 命名是否符合约定
  • 有没有 SELECT *
  • 是否补了入参校验
  • 是否遗漏错误处理
  • 日志有没有必要上下文
  • 是否更新测试
  • 是否提交了本地配置或密钥

那么 Review 工作量会迅速失控。

当 Reviewer 一天要查看十几个 PR,每个 PR 又涉及数十个文件时,遗漏几乎无法避免。更危险的是,被遗漏的有时并非格式问题,而是异常未处理、权限判断缺失、事务边界错误或敏感信息泄露。

这说明一个关键事实:

能够由规则或工具稳定处理的问题,不应该长期依赖人的注意力。

新人问题也会被 AI 放大

团队加入新人时,经常会给他发送架构文档、编码规范、API 文档、数据库规范和发布手册。文档可能很多,新人很难迅速判断哪些是最关键的。

如果新人没有理解项目约定就开始使用 AI,结果可能更混乱:新人不知道规范,AI 同样不知道规范,而生成速度又很快。

理想状态应该是:新人拉取仓库后,项目本身就携带最重要的上下文和开发规范。无论是谁启动 Claude Code,AI 都能先看到同一套团队约定。

这正是把规则提交进 Git 的价值:

  • 规则和代码一起版本化。
  • 新人不需要先找到散落在多个系统里的文档。
  • 规则变更可以通过 PR 评审。
  • 全员拉取代码后获得同一版本的规范。
  • 出现问题时可以追溯规则何时、为何发生变化。

从“人肉纠错”转向“分层治理”

解决办法不是再写一份更长的团队文档,也不是要求组长记住所有规则,而是把质量控制拆成不同层次:

  1. 在 AI 编码前提供项目事实和明确规则。
  2. 在 AI 操作过程中,对危险行为进行限制或反馈。
  3. 在代码完成后,用 lint、测试和 CI 做确定性验证。
  4. 最后由人判断业务逻辑、架构和风险。

其中:

  • CLAUDE.md 负责高频、全局的项目上下文。
  • .claude/rules/ 负责模块化、可按路径生效的编码规范。
  • Skills 负责按需执行的多步骤工作流。
  • Hooks 和权限负责工具层约束。
  • CI 负责真正不可绕过的合并门禁。

这套体系的目的不是让 AI 百分之百不犯错,而是让低级、重复问题尽量在进入人工 Review 之前被消化掉。

规则不是越多越好

看到这里,有人可能会想:那就把所有公司规范都写给 AI。

这同样会失败。规则太多会占用上下文、制造冲突、分散注意力,也会让真正重要的底线淹没在大量低价值说明中。

值得沉淀的通常是以下内容:

  • AI 无法从代码稳定推断的约定。
  • Code Review 中反复出现的问题。
  • 违反后会造成明显维护成本或风险的问题。
  • 需要告诉 AI“正确做法”而不只是“禁止做法”的内容。

能够由格式化工具、lint 或 CI 完全检查的规则,则应该尽量交给工具执行。

小结

团队采用 AI 编程后,真正的挑战不再只是“怎样让 AI 写出代码”,而是“怎样让不同的人和不同会话生成一致、可维护、可验证的代码”。

如果规范只存在于人的记忆里,AI 会放大不一致;如果规范进入仓库并形成分层体系,AI 才有机会成为团队工程能力的放大器。

下一篇我们讨论最容易混淆的问题:CLAUDE.md.claude/rules/ 究竟应该分别写什么。

参考资料

01-AI 写得更快以后,为什么 Code Review 反而更累了?
http://clxhxhhr.top/posts/137/
作者
clxstart
发布于
2026-07-20
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。