返回博客
2026年4月3日Sergei Solod9 分钟阅读

我如何用 Codex 审查 15 个项目,同时保留最终人工控制

过去同时审查 15 个软件项目,意味着被大量重复检查淹没。现在 Codex 能帮助我更快地检查 Bug、测试、SEO、翻译、本地化和一致性,但我始终把 AI 的发现当作线索而不是结论,把每一次修改都当作必须由我自己验证的内容。

CodexAI coding代码审查软件测试开发工作流本地化技术 SEO开发者效率

如果放在几年前,真正同时认真审查 15 个软件项目,对我来说会显得很不现实。我说的不是打开 15 个 repository 随便看几眼,而是持续检查真实项目里的 Bug、错误假设、SEO 问题、翻译错误、本地化不一致、缺失测试、回归问题,以及已经和系统其他部分不再一致的旧代码。

真正的限制从来不是打字速度,而是注意力。每个项目都有自己的历史、约定、edge case,以及一些看起来不对、其实是有意保留的代码。严肃的 review 需要阅读、搜索、比较、执行检查,然后才能决定到底什么值得修改。

Codex 改变了这种重复工作的成本结构。它可以先对 repository 做第一轮检查,追踪 references,阅读相关文件,找出可疑 pattern,提出测试思路,并帮助我调查过去必须一个文件一个文件手动查看的区域。这并没有让最终决定自动化,只是让“做决定之前最昂贵的调查阶段”快了很多。

我现在最重要的一条规则很简单:我不是用 Codex 把自己从 review loop 里拿掉,而是用它扩大我能够覆盖的 review 范围。

真正的瓶颈是重复,不是写代码

只维护一个项目时,人可以记住非常多上下文。项目一多,这种方式就不再能扩展。同类工作会不断重复出现:

  • 在不同 component 中寻找相似 Bug;
  • 检查 refactor 后是否还留着旧 call site;
  • 行为变化后重新检查 tests;
  • 查找 metadata、语言规则、heading、internal link 的不一致;
  • 比较 localization key 和翻译内容;
  • 寻找缺失的 error handling 和 edge case;
  • 确认一个“小改动”是否意外影响了更多文件;
  • 阅读单个很简单、但累积起来极其耗时的 diff。

这些事情都不炫酷,但每一项都重要。当同一种 review 需要在多个 codebase 中反复进行时,成本会迅速放大。

这正是 AI coding agent 对我最有价值的地方:它可以吞掉搜索空间中重复的部分,让我把更多注意力留给判断。

我先让它检查,而不是直接允许“全部重写”

最容易得到坏结果的方法之一,就是给 agent 一个巨大任务:“检查整个项目并修复所有问题。”这听起来高效,却把 discovery、优先级、架构、实现和 validation 混成了一个失控任务。

把阶段拆开后,我得到的结果要好得多。

inspect → explain findings → prioritize → change → validate → review diff

首先,我希望 agent 理解相关区域,并解释它到底发现了什么。我需要具体文件路径、受影响的代码、为什么它认为这里可疑、可能造成什么影响。修改应该发生在这之后。

原因很简单:AI 可以非常自信地犯错。某段代码看似多余,却可能是为了旧浏览器、某个支付 edge case、迁移路径,或者只看一个文件无法理解的业务规则。先检查再修改,可以让我在错误假设变成巨大 diff 之前把它拦住。

我把 AI 的 finding 当作线索,而不是判决

好的 Codex review 不应该停在“发现 17 个问题”。数字本身几乎没有意义,我更关心证据。

一个真正可执行的 finding,我希望知道:

  • 问题在哪里
  • 为什么这是问题;
  • 什么行为可能失败;
  • 这个结论应该有多大可信度
  • 什么检查可以证明或否定它;
  • 最小而安全的修复是什么。

这对 security、SEO 和业务逻辑尤其重要。Agent 可以指出值得调查的地方,但一段听起来很像安全报告的解释,并不等于已经证实的漏洞。SEO warning 不一定就是 ranking 问题。一个奇怪条件也不一定就是 dead code。

AI 降低的是“发现候选问题”的成本。最终什么是真的,仍然由验证决定。

真正让 workflow 可信的是 validation loop

代码生成是 AI-assisted development 最显眼的部分,但 validation 才是让它可以进入 production 的关键。

修改之后,我希望 codebase 自己“回答”。根据项目不同,这可能包括:

  • TypeScript 或其他 compiler/type checker;
  • lint;
  • unit test 和 integration test;
  • build check;
  • 针对旧名称或 call site 的定向搜索;
  • 人工阅读最终 diff;
  • 手动验证用户可见行为。

具体命令没有这个 loop 本身重要。Agent 做出假设,repository 返回证据,下一步决策建立在证据上。

这也是为什么我很喜欢在强类型项目里使用 AI。我另外写过一篇文章,讲 为什么 TypeScript 在真实软件交付中和 Codex 配合得很好:类型系统能把很多错误假设立刻变成机器可读的反馈。

有些 review 类型特别适合 AI

Bug 和回归

Agent 可以跨文件追踪一个值、检查 callers、比较相似实现、寻找互相不一致的 branch。这很适合缩小问题来源。但在接受结论之前,我仍然会重现或用其他方式验证真实行为。

测试

AI 很适合发现“行为变了但 test coverage 没跟上”的地方,提出 edge case,并解释一个已有 test 实际保护了什么。它也能帮助发现只测试实现细节、却没有测试真实用户行为的测试。

SEO

Technical SEO 有大量一致性工作:metadata、语言 alternate、indexability、internal link、页面 template、sitemap generation、redirect 和 page-level rule。Agent 可以在大型 codebase 里比我手动打开每条 route 更快地比较这些规则。但我始终把技术正确性和更难的问题分开:内容本身到底值不值得获得排名。

本地化和翻译

这是多语言产品中最重复的领域之一。AI 可以比较 key、找到缺失值、发现明显的语言混用、检查 placeholder,并指出一个 locale 在结构上和其他 locale 的偏差。它比手动扫巨大的翻译对象快得多,但重要 copy 仍然需要人来判断。

Refactor 后的一致性

大型 refactor 经常因为很无聊的原因出问题:一个旧 import 没删,一条 route 还在使用旧字段名,一个 test fixture 保留了旧 shape。Repository-wide search 加上理解变更意图的 agent,在这里非常有价值。

并行工作只有在任务独立时才真正有用

很容易产生一种冲动:启动很多 agent,让它们同时修改所有东西。这可以增加 throughput,也同样可以放大 conflict 和互相矛盾的假设。

我把 parallelism 看成协调问题。独立 audit 很适合并行:一个项目检查 localization,另一个 review tests,或者不同 repository 同时被检查。两个 agent 在没有共同计划的情况下重写同一套 architecture,则完全是另一回事。

并行度越高,边界越重要:明确的 project、明确的 task、明确的 definition of done,以及可以单独 review 的结果。

目标不是让最多数量的 agent 同时运行,而是让有用且可验证的进展最大化。

有些事情我不会盲目交给 AI

  • 架构决策:模型可以提出选项,但长期 trade-off 经常依赖 repository 之外的上下文。
  • Security 结论:finding 需要验证、threat context,很多时候还需要专门工具。
  • 业务规则:代码可以内部完全一致,却实现了错误的产品行为。
  • 大型破坏性 refactor:diff 越大越难理解,也越容易被草率通过。
  • Production deployment:测试通过并不等于运营风险消失。
  • 最终 review:在我为一次改动负责之前,我想知道它到底改了什么。

不是因为 AI 在这些领域没用,而是因为这里“看起来很合理但其实错了”的答案代价特别高。

AI review 不是静态分析的替代品

我也不把 Codex 当作 compiler、linter、tests、scanner 或 monitoring 的替代。那些工具有 AI 没有的优势:范围窄、确定性强、可重复。

最强的 workflow 是把它们组合起来。Codex 可以基于上下文推理并建议从哪里调查。静态工具可以强制执行精确规则。测试验证行为。日志和 monitoring 显示真实系统发生了什么。人工 review 则把所有这些信号和产品意图连接起来。

如果没有这些 feedback systems,我对 AI 的信任只会更低,不会更高。

最大的生产力提升,其实是注意力分配变好了

最简单的说法是“Codex 帮我省时间”,但我觉得这低估了真正的变化。

软件开发里最稀缺的不是 keystroke,而是高质量注意力。在 AI coding agent 之前,大量注意力消耗在重复 discovery 上:反复搜索相同 pattern、阅读类似文件、追踪 reference、确认一个改动是否传播到所有位置,然后在另一个 repository 重新做同样的 audit。

现在我可以把更多 first-pass work 交给 agent,把自己的注意力留给更难自动化的判断:这个 finding 真的重要吗?fix 符合架构吗?用户体验会更好吗?风险可以接受吗?我真的想把它 ship 出去吗?

这就是为什么现在维护和 review 多个项目的感觉完全不同。我不是 review 得更少。很多时候恰恰因为机械工作不再耗光全部预算,我反而能 review 得更多。

我信任的 workflow

  1. 定义一个窄而清晰的 review 目标。 Bug、tests、SEO、localization、refactor 或其他具体问题。
  2. 先 inspect,再 edit。 我先要证据和受影响位置。
  3. 给 findings 排优先级。 并不是每个理论问题都值得改代码。
  4. 控制改动范围。 小而连贯的 diff 更容易验证。
  5. 运行机器检查。 Typecheck、lint、tests、build、search 或项目特定验证。
  6. 人工阅读 diff。 检查不必要 rewrite、错误假设、遗漏 edge case 和 scope 外改动。
  7. 验证重要行为。 尤其是用户、金钱、security、SEO 和 production infrastructure。
  8. 确认之后再进入下一个项目。 Parallelism 有用,但未解决的不确定性不应该悄悄扩散。

15 个项目已经不再像 15 倍的 review 工作量

Codex 没有让 15 个项目变简单,也没有替我承担责任。它改变的是规模和重复劳动之间的关系。

我可以要求更深入的 first pass、更广的 consistency check、更多 test idea 和更系统的 audit,而不必把每一分钟都花在每个文件里自己搜索。然后,我可以把节省下来的注意力用在仍然需要开发者判断的事情上。

这就是我认为有价值的 AI-assisted development:不是 autopilot,不是盲目信任,也不是“不断生成代码直到某个检查变绿”。而是让机器规模的 inspection 和人类规模的 judgment 形成更短、更紧密的循环。

对我来说,这才是 Codex 真正的 leverage。它没有取消 review,而是让严肃的 review 可以扩展到以前很难持续维护的范围。