阅读研究雷达投资体系
登录 / 注册
← 返回阅读
资讯7 分钟阅读·2026-10-20DisconfirmAI 编辑部

Cloudflare工程师Ryan Skidmore:AI代码审查成本翻倍后,最大一笔节省来自修复缓存前缀共享

Cloudflare内部AI代码审查的平均成本从1.19美元涨到2.46美元,架构没有变化。工程师Ryan Skidmore发现缓存命中率高达97%但成本仍然翻倍,根因是每次会话的第一个请求只有14%到26%命中缓存——因为系统提示把共享内容和仓库特定内容放在同一个块中、唯一的缓存断点设在该块末尾,导致共享部分无法被单独缓存。修复前缀结构后成本降至0.77美元,但质量验证方法本身也有局限。

重要性实质性证据E3 可检验写法快讯

原文发布时间 2026-10-20 03:12

Cloudflare内部运行着一套AI代码审查系统:协调器把合并请求分派给代码质量、安全、性能等多个专项审查员,每个审查员独立调用大语言模型完成分析。2026年4月,一次平均审查花费1.19美元;到8月底,这个数字涨到了约2.46美元。架构没有变化,协调器仍然把任务分给同一组审查员,风险分层也没有调整。

工程师Ryan Skidmore在Cloudflare官方博客上记录了这次成本优化的全过程。他首先排除了一个直觉解释:不是审查量变大了。图表固定了审查层级的混合比例,所以大审查占比增加不会扭曲数据。成本确实从3月的1.22美元逐步上升到8月的2.32美元,其中一小部分是因为落入最昂贵层级的审查比例从59%升到了65%——模型能力增强后,工程师提交的变更更大更复杂,自然有更多落入'完整审查'层级。

但大部分成本增加来自模型切换。8月初,所有审查员迁移到Anthropic模型,单次任务成本从1.38美元跳到2.03美元。内部标准审查员Codex迁移到Claude Opus 4.7后,单次成本从约0.25美元涨到0.88美元,比协调器本身还贵。与此同时,缓存命中率从4月的85.7%升到了9月的97%,但每次审查的token数从91万涨到了299万。高命中率乘以三倍的token量,总成本仍然大幅上升。

真正的诊断发生在9月14日。审查系统开始记录每次审查第一个大语言模型调用的token用量,以及发送给模型提供商的第一个系统块的哈希。数据揭示了一个反直觉的事实:尽管每个会话都以相同的工具定义和相同的代理提示开头(11k到21k个token,在所有仓库中完全一致),但第一个请求命中缓存的概率只有14%到26%。

问题出在OpenCode v1构造系统提示的方式。它把代理提示和环境信息(工作目录、日期)放在同一个块里,唯一的缓存断点设在这个块的末尾。这意味着共享部分从来没有被单独存储过——一个仓库的审查永远无法复用另一个仓库的审查写入的缓存。Anthropic的prompt缓存机制只缓存前缀,即对话开头连续不变的部分;断点之后的内容每次不同,就无法命中。

9月16日的修复很直接:在代理提示末尾加一个标记,用插件钩子把原来的单一块在标记处切成两半。前半部分以所有任务共享的字节结尾,获得自己的缓存断点。为了保证前半部分始终一致,必须移除它前面所有仓库特定的内容——禁用可用技能列表,固定工具描述。同一天还把Codex审查员的参考索引(内部标准表、技能文件和参考文件列表)直接放进提示里,省去了每次会话前三个轮次用工具调用读取这些文件的开销。Codex的LLM调用次数从15.9降到9.6,单次成本从1.12美元降到0.72美元。

这些改动把单次审查成本从2.47美元降到2.02美元。后续9月21日和23日又推出一批小改动:移除审查员无法使用的工具(子审查员在57%到76%的会话中试图调用发布评论的工具然后被拒绝,浪费一次调用);让审查员并行读取文件而非逐个读取;跳过重新审查中没有新内容的审查员;审查发布后停止多余的总结轮次;区分慢审查和故障提供商;以及取消已取消的任务(GitLab的Kubernetes执行器在任务取消时不发送信号,446个已取消任务中358个继续运行到审查完成)。这些改动单独看都不起眼,但合起来每次审查省了约0.20美元。

最复杂的一项改动是让三个审查员共享一个缓存前缀。代码质量、安全和性能审查员现在发送完全相同的首个请求——相同的工具、共享的规则文件、包含所有补丁的合并请求——各自的指令放在后面。系统确保其中一个审查员写入缓存,另外两个读取。但缓存条目在写入它的响应开始流式输出之前无法被读取,而三个审查员同时启动,所以第二和第三个最多等20秒,等第一个的响应开始后再发送自己的首个请求。这略微拖慢了速度,但每个审查员省了约九美分。

登录 / 注册
阅读研究雷达投资体系

模型和推理力度的调整贡献了更大的节省。作者把9月初到10月的变化按每次发布和配置变更分段对比,发现代码改动贡献了1.67美元节省中的0.65美元,模型和力度改动贡献了1.06美元。协调器从8月起同时运行三种模型和力度组合;同一模型上,完整层级任务在medium力度下比high快20%,于是去掉了另外两种组合。后续随机分流显示Opus 5.5在medium力度下的审查结果和关键发现与Opus 5没有可测量的差异,于是切换。Opus 5.5每token比Opus 5便宜,但价格只解释了约0.20美元的下降,其余来自发送和生成更少的token。

10月3日,所有Sonnet审查员在Sonnet 5和Sonnet 5.5之间做了50/50分流。两天半后,Sonnet 5.5在代码质量上每次运行便宜62%,性能便宜58%,安全便宜47%——两个模型每token价格相同,差异完全来自使用了更少的token。在完整层级审查中,5.5审查员发布的关键和警告发现数量与Sonnet 5相当,10月5日全部切换到5.5。在medium力度下,代码质量审查员每次运行只调用1.7次LLM而非6.2次,超过一半的运行在单次调用内完成,不再打开仓库中的其他文件。

但成本下降是否意味着质量下降?Skidmore用两种方法检验。第一种:对关键和警告发现的样本,比较被审查的提交与作者的下次推送,如果发现指向的行发生了变化就计为'被采纳'。行距发现30到40行的位置在每个时期约有15%的概率被修改,这提供了巧合编辑的基线。优化前作者采纳了代码质量审查员34%的严重发现,现在是59%。审查员标记的东西少了,但被采纳的比例高了,每千次审查导致实际修改的发现数基本持平:现在132次,之前145次。

第二种:让两个不同提供商的模型对657条发现做盲评,不知道来自哪个时期,分歧交给第三个模型裁决。每条发现被标记为重要、次要、重复、错误或无法验证,严重程度被标记为恰当、过高或过低。消失的大多是次要发现、重复项和评判者无法从差异中验证的发现。重要发现从每审查0.28条变为0.30条,区间重叠。最大的变化在严重程度:优化前评判者认为每审查有0.46条关键或警告发现比实际严重,现在只有0.14条,下降70%。

但答案取决于审查员。代码质量在high力度下消失的主要是噪音和虚高的严重度,仍然发现与以前差不多多的真实问题。medium力度确实丢失了真实发现:随机分流中,medium力度导致的被采纳发现只有high力度的约四分之一。性能也丢失了真实发现:评判者发现每审查约少64%的重要性能问题。安全下降了约四分之一,但不具统计显著性。作者明确写道:'这不是统计上严格的对照实验',评判者本身也是模型,每组只有35到66条发现,'优化后'的窗口只有一天。

最终,平均审查成本从2.43美元降到0.77美元,中位审查时间从4分09秒降到1分32秒。Skidmore总结的最大一笔节省来自检查每个会话首个请求实际发送给提供商的内容,并找到一种方式让消息顺序在所有提交、合并请求和仓库之间尽可能一致。他给运行AI智能体的读者的两条建议是:先检查每个会话的第一个请求是否真正读取了缓存,再检查你的审查员在你付费的力度级别上是否仍然能发现真实问题。

来源

  • 原始出处blog.cloudflare.com↗
带入研究 →