AI News HubLIVE
站内改写2 分钟阅读

大规模编排AI代码审查

了解Cloudflare如何使用OpenCode构建CI原生AI代码审查器,帮助工程师发布更优质、更安全的代码。它使用专门代理、协调器、风险层级和断路器,在数千个存储库中扩展。

来源Cloudflare AI Blog作者: Ryan Skidmore

在大型工程团队中,代码审查是至关重要的环节,但也常常成为瓶颈。合并请求在队列中等待,审查者需要切换上下文,指出一些变量命名的问题,作者再回复,如此循环。在Cloudflare内部,很多项目的首次审查中位等待时间长达数小时。为了解决这个问题,Cloudflare构建了一套CI原生的AI代码审查系统,利用开源编码代理OpenCode,实现了从传统人工审查到自动化智能审查的转变。

起初,团队尝试了市面上一些AI代码审查工具,但它们缺乏足够的灵活性,无法满足Cloudflare这样规模的组织需求。于是,他们转向直接使用大语言模型,将git diff放入简单的提示词中,结果产生了大量噪音,包括模糊的建议、幻想的语法错误以及冗余的错误处理建议。显然,简单的总结方法无法满足复杂代码库的需求。

最终,Cloudflare决定围绕OpenCode构建一个CI原生的编排系统。当工程师提交合并请求时,系统会启动一组协调的AI代理进行审查。系统最多支持七个专门的审查者,分别负责安全、性能、代码质量、文档、发布管理、内部合规(Engineering Codex)等。这些审查者由一个协调代理管理,它负责去重、判断问题的严重性,并发布结构化的评论。

系统的核心是可组合的插件架构。每个插件实现了ReviewPlugin接口,包含三个生命周期阶段:Bootstrap(并发非致命)、Configure(顺序致命)和postConfigure。通过ConfigureContext API,插件可以注册代理、添加AI提供者、设置环境变量等,但无法直接访问最终配置对象,从而实现了隔离。例如,GitLab插件无需了解Cloudflare AI网关的配置。

为了控制成本并提高效率,系统引入了风险层级分类。根据diff的大小和性质,合并请求被分为Trivial(琐碎)、Lite(轻量)和Full(完整)三种。Trivial级别的更改(如拼写错误修复)仅使用两个审查者,而Full级别则启动全部七个专门的代理。此外,系统还通过diff过滤去除噪音文件(如锁文件、压缩资产等)。

在模型选择上,协调代理使用顶级模型(如Claude Opus 4.7和GPT-5.4),而子审查者根据任务复杂度使用标准模型(如Claude Sonnet 4.6、GPT-5.3 Codex)或轻量模型(如Kimi K2.5)。所有模型分配均可在运行时通过Cloudflare Worker动态覆盖,以应对提供者故障。

系统还实现了断路器模式,每个模型层级维护独立的健康状态。当模型失败时,系统会遍历回退链寻找健康的替代模型。例如,如果Opus 4.7不可用,则回退到Opus 4.6。此外,错误分类器区分可重试的API错误(如429、503)和其他不可重试的错误(如认证失败、上下文溢出),确保只有可重试的错误触发模型回退。

在提示词注入防护方面,系统对用户控制的内容进行了清理,移除了可能破坏XML结构的边界标签。共享上下文文件机制避免了重复传递MR上下文,显著降低了令牌消耗。

经过30天的运行,该系统在5,169个仓库上完成了131,246次审查,共处理48,095个合并请求。中位数审查耗时3分39秒,中位数成本0.98美元。系统共产生159,103个发现,其中代码质量审查者贡献了近一半(74,898个)。安全审查者的关键问题比例最高(4%)。令牌使用方面,总处理量约1200亿令牌,缓存命中率高达85.7%,节省了大量成本。

尽管取得了显著成效,Cloudflare也坦诚地指出了系统的局限性。AI审查不擅长理解架构意图、跨系统影响以及细微的并发错误。此外,审查成本会随diff大小增加。系统并非旨在取代人工审查,而是作为辅助工具,帮助工程师更快、更安全地交付代码。

目前,该系统已集成到GitLab CI中,团队只需在.gitlab-ci.yml中添加一行配置即可使用。它也可以本地运行,提供与CI相同的审查体验。Cloudflare计划继续优化,并欢迎社区反馈。