代码审查太慢了,我做了个AI工具
构建一个与每个 AI 代理兼容的首席工程师
AI模型价格对比 | AI工具导航 | ONNX模型库 | Vibe Coding教程 | Tripo 3D | Meshy AI | ElevenLabs | KlingAI | ArtSpace | Phot.AI | InVideo

当你让一个前沿模型审查代码时,会发生一种特殊的混乱。它不像编译器那样的错误。它更糟。它是自信地"乐于助人"。它是一份结构良好的审查,通常不引用任何证据,编造意图,忽略那个会在凌晨 2:07 页醒你的变更,然后礼貌地建议你添加更多注释。
我受够了这个。
所以我构建了一个工具,生成我一直希望模型本身就能拥有的东西:与高级工程师在开口之前在脑中构建的相同的上下文感知。然后我让它可以通过管道传递,因为我当然会这么做。
结果是一个我称之为 AI Code Review 的开源工具。它不自己审查代码。它组装 审查数据包:高保真、安全感知的提示词输入,让 Claude Code、Codex CLI 和 Gemini 在你不再让它们饿着肚子的情况下,做它们真正擅长的事,并给它们一个准确、一致的工作基础。
是的,有些代理(提示:Gemini CLI)可能过于字面化。所以我不再希望它能推断我的意思,而是开始编写建立明确契约的提示词,规定代理将如何执行。
1、问题
这里真正的问题不是让 AI 审查代码,问题是上下文崩溃。
大多数 AI 审查工作流要么是凭感觉,要么是复制粘贴一个通用的"审查"提示词。这通常会导致代理对代码变更进行 diff,然后分析它们。虽然 diff 是必要的,但它不够。diff 不携带不变量、模式、"我们这样做是因为生产环境教会了我们痛苦"、定义预期行为的测试、运行时约束、安全态势、部署形态,或者代码库中那些悄悄将你的变更变成分布式系统的部分。
一个好的审查者不只是阅读变更。他们加载心智模型。他们扫描爆炸半径。他们根据代码库对假设进行健全性检查。他们查找测试和配置。他们阅读周围的文件。他们证明,而不是猜测。
所以我构建了一个工具,强制代理做同样的事情。
2、审查数据包
核心思想很简单:如果你想要一个专业质量的代码审查,你需要给审查者专业质量的上下文。与其给代理准备一份小零食,我想给它一顿健康的正餐。
AI Code Review 生成一个包含 diff 的数据包,同时以 token 高效的方式压缩结构。在 Python 中,它使用 AST 提取来捕获签名和文档字符串,而不需要为实现体付费。在 JS/TS 中,它使用启发式解析,当你想要更高保真度时,可选支持 tree-sitter。它标记敏感路径。在任何东西离开你的机器之前,它会脱敏密钥。它将大型变更集分块,这样你就不会得到一个"我在 token 7,891 处停止阅读了"的非审查。
然后它将所有这些包装在一个 SYSTEM 提示词中,这个提示词的行为像一个见过太多事后复盘、对幻觉产生了健康过敏的首席工程师。
3、证据门
模型会愉快地输出一份华丽的审查,但没有任何依据,除非你强迫它们付出代价。
所以 SYSTEM 提示词包含一个带有明确引用格式的证据要求。如果数据包提供了行注释,代理必须引用它们。如果没有,它必须引用 diff 块。如果它想引用数据包之外的任何内容,它必须实际打开仓库中的文件并引用那些读取结果。
最后一部分很重要。非常关键。
因为一旦你告诉代理"你有完整的仓库访问权限,当数据包不够时你被要求使用它",你就不再得到推测性建议,而是开始得到那种会说:我检查了客户端中的生命周期,我检查了应用配置,我追踪了调用点,这是你的更新处理程序悄悄变成每次变更 O(N) 的确切行——的那种审查。
这恰恰是防止你的 UI 在房间变忙碌时变成频闪灯的那种反馈。
4、从字面化到致命精准
这是让我在终端前傻笑的那一刻。
我对一个真实的提交运行了 AI 代码审查,并通过管道直接传给了 Gemini CLI。我不是在寻找优雅。我是在寻找代理确实会完成工作的证明:阅读上下文、引用证据、指出真正的风险。
它做到了。
它用一个具体的、引用了仓库代码的片段识别了一个性能瓶颈。它标记了复杂同步逻辑缺少测试的问题。它发现了一个涉及静态单例依赖的架构风险,这个风险会让隔离测试变得痛苦。它提出了关于序列化意图的正确问题。它甚至注释了推出风险和重新渲染循环监控。
这不是通常的"看起来不错,考虑添加文档"的废话。这是一份读起来像真正发布产品的人写的审查。
有趣的是,没有发生任何神奇的事情。模型没有变得更聪明。提示词变得更严格了,上下文变得更丰富了,工作流变得更接近真实工程师的推理方式了。
这就是代理工具化的全部论点,用一句话概括:智能不是瓶颈,集成才是。
5、审查编排器,而不是审查者
AI Code Review 不是试图取代人类判断。它是试图标准化使判断成为可能的输入,无论审查者是人类还是硅基。
如果你曾经让一个新队友入职并看着他们做第一次审查,你会看到相同的模式。他们评论表面问题,因为他们还不知道什么重要。他们错过地雷,因为地雷存在于上下文中。他们无法引用真正的约束,因为他们还没有找到它们。
一个审查数据包就是入职培训的压缩版。
它给代理足够的架构意识来变得有用,足够的程序纪律来保证安全。
6、为什么开源?
因为这是生态系统需要的胶水代码。
我们现在都在使用多个代理构建。Claude Code 在某种推理上很出色。Codex CLI 在另一种推理上很出色。Gemini 有自己的优势和自己的字面化。赢面不是选择其中一个。赢面是拥有一个一致的、高质量的输入格式,你可以通过管道传给任何一个,并获得有依据、可辩护、可操作的审查输出。
另外,出于私心,我希望社区来破坏它。如果你能找到一种方法让模型在证据契约中偷渡一个幻觉,我想知道。这就是它如何从一个巧妙的演示变成一个真正的工具的方式。
该项目使用 MIT 许可证,因为摩擦是采用之敌。
7、试试看
如果你想立即感受到差异,对一个非平凡的提交运行它,并将提示词通过管道传给你已经使用的代理。
# 为最后一次提交生成审查提示词
ai_review prompt /path/to/repo -base HEAD~1 -head HEAD -max-diff-lines 2000 -read-only | gemini
# 工作树审查,即未提交的变更
ai_review prompt /path/to/repo -mode working -read-only | gemini
# 为 token 限制分块大型 diff
ai_review prompt /path/to/repo -base main -head feature-branch -chunked -read-only | gemini
如果你是那种把 README 文件当产品策略来读的人,这里是仓库。
8、结束语
最好的 AI 代码审查不是拥有最花哨模型的那个。它是那个拒绝在没有证据的情况下说话、知道如何在缺少上下文时审问代码库、并将运行时现实视为一等输入的那个。
换句话说,它的行为像一个首席工程师。
所以我构建了一个你可以通过管道传到终端的工具。
原文链接:AI Code Review
汇智网翻译整理,转载请标明出处