[IND] 3 min readOraCore Editors

Cloudflare把AI代码审查做成了CI编排系统

7个审查智能体、3分39秒中位耗时,Cloudflare展示了AI代码审查如何嵌入CI并控制成本与风险。

Share LinkedIn
Cloudflare把AI代码审查做成了CI编排系统

Cloudflare用7个专项智能体把AI代码审查接进了CI流程。

Cloudflare 这篇实践复盘给出的答案很具体:当代码审查进入大规模 CI 链路后,单模型提示词不够用,真正可落地的是一套可编排、可降级、可观测的审查系统。首月 5,169 个仓库、48,095 次合并请求、131,246 次审查的数据,也说明它不是实验室原型。

Item并发审查器中位审查耗时平均单次成本
Cloudflare AI 审查编排最多 7 个3 分 39 秒1.19 美元
低风险审查2 个左右更短0.20 美元
完整高风险审查7 个更长1.68 美元

1. 不做单体智能体,改做调度编排

Get the latest AI news in your inbox

Weekly picks of model releases, tools, and deep dives — no spam, unsubscribe anytime.

No spam. Unsubscribe at any time.

Cloudflare 最先放弃的是“一个大模型包打天下”的思路。原因很直接:在复杂仓库里,模型会给出空泛建议、误报和重复意见,既浪费时间,也让工程师很快失去耐心。于是他们把审查拆成多个专项智能体,再由协调器统一汇总。

Cloudflare把AI代码审查做成了CI编排系统

这套设计的重点不是“让模型更聪明”,而是“让系统更像工程系统”。每个智能体只负责一个维度,最后由协调器去重、重分类、过滤噪声,输出一条结构化评论。

  • 安全审查:找可利用风险和明确漏洞
  • 性能审查:找可量化退化
  • 代码质量审查:找逻辑问题与可维护性问题
  • 文档、版本、AGENTS.md:处理非代码类信号

2. 插件化架构把 GitLab、模型和规范拆开

他们没有把版本控制、模型服务和内部规范硬编码进主流程,而是做成插件架构。入口模块只负责组装配置,具体怎么跑审查、接哪个平台、接哪家模型服务商,都交给插件完成。这样一来,GitLab 插件不会看到 Cloudflare AI Gateway 配置,Cloudflare 插件也不会碰 GitLab 令牌。

这种隔离很适合多仓库、多平台环境。文章里提到的 ReviewPlugin 有三个生命周期阶段:引导、配置、后置配置。引导阶段可并行且非致命,配置阶段串行且致命,后置阶段则处理远程覆盖规则之类的异步任务。

  • 配置入口:ci-config.ts 统一收口
  • 核心产物:opencode.json
  • 上下文对象:只给插件可控操作,不直接暴露最终配置

3. OpenCode 负责会话,JSONL 负责流式输出

Cloudflare 选 OpenCode 作为核心编码智能体,不只是因为它开源,还因为它是服务端优先架构,适合从编程方式创建会话、发送提示词、并发收集结果。协调器通过 Bun.spawn 启动 OpenCode,审查器则在内部通过 SDK 再拉起多个子会话。

Cloudflare把AI代码审查做成了CI编排系统

这里最值得借鉴的是输出格式选择。长运行任务很怕 JSON 因为进程提前退出而写不完整,所以他们用 JSONL 做结构化日志,每行都是独立 JSON 对象。配合 stdout 流式处理、每 100 行或 50 毫秒批量落盘,既能保留调试信息,也能避免频繁写盘拖慢 CI。

step_finish -> 记录 token 用量 error -> 触发重试 reason: "length" -> 说明输出被截断

4. 专项模型分层,比全员上顶配更省钱

他们没有让所有任务都调用最贵的模型,而是按任务复杂度分层。协调器用顶级模型,负责读其他审查器的输出、去重和最终裁决;代码质量、安全、性能这类高负载任务用标准模型;文档、版本和 AGENTS.md 这类文本密集任务则交给更轻量的模型。

这种分层的价值在成本上很明显。首月总 Token 约 1,200 亿,但缓存命中率达到 85.7%,平均单次审查成本 1.19 美元,中位数 0.98 美元,P99 也只有 4.45 美元。对大规模 CI 场景来说,能把高成本模型只留给最需要它的环节,才有长期可持续性。

  • 顶级模型:协调器裁决
  • 标准模型:主力子审查器
  • 轻量模型:文档和版本检查

5. 熔断、回退和 break glass 让系统敢上生产

把 AI 接进发布链路,最大的难点不是“能不能跑”,而是“出故障时会不会拖垮交付”。Cloudflare 为每个模型层级都做了熔断器和故障恢复链,遇到速率限制或服务中断时,会自动切换到同系列的健康替代模型。熔断打开后还有冷却期和探测请求,避免故障服务被请求洪峰继续压垮。

更重要的是,他们保留了人工兜底。只要真人审查者添加 break glass 注释,系统就会强制放行。这说明 AI 审查在这里不是裁判,而是高质量过滤器和风险提示器,最终控制权仍在工程流程里。

6. 重新审查和 AGENTS.md 让上下文保持新鲜

CI 里的审查不是一次性的。开发者推新提交后,系统会做增量重新审查,识别已修复、未修复和用户已解决的发现,避免重复打扰。协调器还能读取历史评论和内联 DiffNote 线程,让后续审查接着上次的结论继续。

另一个实用点是 AGENTS.md 审查器。它会提醒团队在测试框架、构建工具、包管理器或 CI/CD 流程变化后更新指引文件,防止 AI 继续按旧规范生成错误建议。对长期维护的仓库来说,这比单纯追求模型分数更有现实价值。

  • 已修复的发现:自动省略
  • 未修复的发现:继续保留
  • 用户已解决:按状态认可

How to decide

如果你的团队只有少量仓库、审查规则也比较固定,先从单一 AI 审查或轻量插件开始更合适。但如果你已经面对多仓库、多模型、多平台和严格 CI 门禁,Cloudflare 这套做法更值得参考:把审查拆成专项智能体,把配置做成插件,把失败处理和人工兜底提前设计好。

更简单地说,想让 AI 真正进入代码发布流程,重点不是“接入一个更强的模型”,而是“把模型放进一个能降级、能观测、能回滚的系统”。这篇文章最有价值的地方,也正是把这件事讲得足够工程化。