Agent 缓存命中率为何失效:GPT、Claude 与可审计网关

用一手资料拆解第三方 agent 的缓存失效路径,解释 GPT 与 Claude 的提示词缓存机制、可复现命中率测量方法,以及 Modelflare 的公开缓存补偿边界。

Agent 的缓存不是一个可以勾选的开关,而是一份由协议、路由和账务共同组成的契约。本文解释:为什么上游模型明明支持提示词缓存,第三方 agent 仍可能长期处于低命中;GPT 与 Claude 的复用机制和统计口径有何不同;以及一个可审计的网关应该承诺什么。

一句话结论

对于依赖缓存经济性的生产 agent,不要使用无法展示原生缓存用量、保持稳定前缀、维持模型与路由亲和性、公开 TTL 和分母、并能与持久账本对账的第三方 agent 或网关。“支持缓存”只是功能描述;经过测量的、限定了资格范围的命中率才是运行事实。

这不是说所有第三方 agent 都会失效。没有固定语料、固定模型、明确观测窗口和逐请求用量证据,公开资料无法证明某个供应商整体的命中百分比。更准确的结论是:不透明的转换层会引入多个相互独立的断点,把有效的上游缓存变成几乎每次都冷启动的路径。对于依赖缓存的生产流量,无法提供证据本身就足以构成不采用理由。

先定义分母,再谈百分比

供应商通常会报告三个不同桶。令 R 表示从缓存读取的 token,W 表示写入缓存的 token,U 表示没有复用、直接处理的输入 token。对符合缓存资格的前缀,可比较的命中率是:

eligible_hit_rate = R / (R + W)

对发送给模型的全部输入,复用占比是:

input_reuse_share = R / (R + W + U)

这两个数字回答的是不同问题。按全部输入计算的仪表盘,在 agent 发送大量短请求时会显得很低;只按合格流量计算的仪表盘,则可能掩盖动态后缀仍占据大部分成本的事实。报告必须同时给出两者、资格规则和时间窗口。

稳定前缀进入可复用缓存,变化中的 agent 状态绕过缓存

真正的证据来自供应商字段,而不是 agent 界面上的绿色徽章:

信号 OpenAI 字段 Claude 字段 能证明什么
复用前缀 input_tokens_details.cached_tokens cache_read_input_tokens 确实由匹配条目提供的 token
新建缓存条目 input_tokens_details.cache_write_tokens cache_creation_input_tokens 为创建或延长条目计费的 token
未复用输入 input_tokens - input_tokens_details.cached_tokens - input_tokens_details.cache_write_tokens(需谨慎推导) breakpoint 之后的 input_tokens 缓存前缀之外的输入;两家语义不同
关联信息 request ID、模型和路由 request ID、模型和路由 哪次上游尝试产生了这份用量

下面的数字是合成示例,不是 Modelflare 生产遥测:R=720,000W=80,000U=200,000 时,合格命中率为 720,000 / 800,000 = 90%,但全输入复用占比只有 720,000 / 1,000,000 = 72%。只发布其中一个数字,就隐藏了分母。

input_tokens_details.cache_write_tokens=0 不能证明“没有缓存”:读取已有条目的请求本来就不会创建新条目。反过来,第三方响应缺少用量字段也不等于零,而是一次可观测性失败,应标记为不可审计

为什么模型支持缓存,agent 路径仍会丢失命中

问题通常发生在应用到供应商之间的路径上。以下是最常见的断点:

  • 动态字节出现得太早。 时间戳、请求 ID、用户名、实验标记或不断变化的“当前日期”进入系统提示词,会在可复用指令之前改变前缀。
  • 工具被重新序列化。 增删、排序或不确定地序列化工具 schema 都会改变精确前缀;看似无害的 JSON 键顺序也会造成 miss。
  • 回退改变缓存身份。 在模型别名、区域、组织或供应商凭据之间负载均衡,不会共享一个通用缓存条目。
  • 适配器丢弃原生控制项。 删除 cache_controlprompt_cache_key、保留策略或用量详情,会把供应商能力变成不可见的 best effort。
  • 提示词低于供应商阈值。 很短的 agent 回合可以是有效请求,却没有缓存资格。
  • 跨过 TTL 窗口。 Claude 的五分钟条目或 OpenAI 的模型相关保留窗口,可能在人机协作暂停时过期。
  • 并行预热发生竞态。 首次并发请求可能在第一个响应建立条目之前全部到达。
  • 历史被重写。 摘要、压缩、截断或不同的历史序列化会改变前缀,而不是在末尾追加。

三种请求形状展示读取、写入和未缓存输入如何形成不同分母

这些失败不需要供应商有意欺骗用户;它们是把 agent 请求当作任意文本、而没有维护供应商缓存契约的可预测结果。实际警告比营销比较更直接:如果 agent 不能指出是哪一个 breakpoint 失败,就无法可靠地给缓存流量定价或排障。

GPT 与 Claude 的思路相近,但统计语义不能混用

两家都要求精确匹配的可复用前缀,但控制面和用量口径不同。下表依据 2026-08-25 检查的官方指南;模型名称、最小长度和保留策略会变化,生产策略调整前应重新查看链接。

维度 OpenAI prompt caching Claude prompt caching
复用单元 完整渲染的上下文前缀,包括指令、工具、历史和多模态部分 经过 cache_control breakpoint 的有序前缀:工具、system、messages
最小长度 当前指南列出 GPT-5.6+ 可见 token 为 1,024,旧模型通常为 2,048 按模型区分,目前约为 512–4,096 token;更短提示词不缓存
控制方式 隐式缓存;受支持模型可用显式 breakpoint 和稳定的 prompt_cache_key 顶层自动缓存或显式 block breakpoint;最多四个 breakpoint,回看 20 个 block
保留时间 GPT-5.6+ 支持 30 分钟 TTL;旧模型提供供应商定义典型窗口的保留模式 默认五分钟,每次使用会刷新;可选一小时但写入价格更高
价格形态 当前 GPT-5.6+ 指南中,写入为基础输入价的 1.25 倍,读取为 0.1 倍 五分钟写入为 1.25 倍,一小时写入为 2 倍;读取为 0.1 倍
用量证据 input_tokens_details.cached_tokens,以及适用时的 input_tokens_details.cache_write_tokens cache_read_input_tokenscache_creation_input_tokens 和 breakpoint 后的 input_tokens
常见失效原因 模型、工具、设置变化,机器溢出,或 breakpoint 前缀变化 模型、system、工具、消息变化,找不到上一条消息,或并行预热 miss

OpenAI 说明缓存条目位于单独机器上;prompt_cache_key 可以帮助分组和路由,但不能固定机器,也不能保证命中。Claude 文档说明精确匹配、workspace 级隔离,以及 tools_changedmessages_changed 等诊断原因。隐藏这些差异的网关,不能诚实地把供应商文档转换成一个统一“缓存率”承诺。

价格倍率说明了影响。以引用的 OpenAI 模型为例,一次写入后一次读取,缓存部分成本约为 1.25 + 0.10 = 1.35× 未缓存输入单位,而不是两个未缓存单位;十次完全复用约为 1.25 + 9×0.10 = 2.15×,而不是 10×。这是官方的说明性计算,不是 Modelflare 账单,也不是每个模型的保证。

适配器税可以被测量

不要用截图,使用故障矩阵。固定应用提示词、模型、凭据和请求速率,每次只改变一个变量,并保留原始 usage 对象。

控制变化 供应商预期信号 不透明 agent 可能隐藏什么 发布判断
只追加用户回合 首次 WR 上升 历史被重写或路由改变 前缀保持成功
在 system prompt 加时间戳 R 归零或出现新的 W 哪些字节发生变化 动态前缀是缓存断点
调换一个工具属性顺序 tools_changed 或新的写入 序列化行为 工具 schema 必须确定性生成
在别名或机器间拆分流量 R 更低且波动更大 选中的路由和缓存键 缺少亲和性策略
休眠超过文档 TTL 过期后再次写入 过期时刻和保留模式 人工暂停场景需单独测量
并行发送两个相同首请求 一个或两个都可能写入 预热竞态和尝试顺序 冷启动突发不能代表容量

测试必须保留 request ID、流模式、首个事件时间、精确模型、选中路由、缓存字段和 UTC 时间戳。提示词、密钥和客户内容要脱敏。如果网关只返回归一化的“输入 token 总数”,应将该轮标记为不可审计;不要把缺失维度变成虚构的零值或有利估计。

一份可复现的审计记录

下面是一个小型合成记录格式。外层保持供应商中立,usage 内保留原生字段;它不是 benchmark 结果。

{"request_id":"demo-001","timestamp":"2026-08-25T02:00:00Z","model":"MODEL_ID","route":"route-a","stream":true,"usage":{"input_tokens":1000000,"input_tokens_details":{"cached_tokens":0,"cache_write_tokens":1000000}}}
{"request_id":"demo-002","timestamp":"2026-08-25T02:00:03Z","model":"MODEL_ID","route":"route-a","stream":true,"usage":{"input_tokens":1000000,"input_tokens_details":{"cached_tokens":720000,"cache_write_tokens":80000}}}

至少运行五个阶段:串行预热、只追加的对话、动态 system 变更、工具顺序变更和 TTL 间隔重放。Claude 需要把原生读写字段映射到同一报告,但不能替换原字段;OpenAI 返回时要同时保留 cached 与 write 字段。按阶段、路由、模型和 UTC 日期比较 R/(R+W) 以及 R/(R+W+U)。单一混合数字不足以决定一个 agent 是否适合生产。

Modelflare 保证什么,以及不保证什么

Modelflare 当前公开状态页说明了 OpenAI Cache Hit Rate Guarantee。对于满足 OpenAI 缓存要求并形成有效缓存的合格请求,按 UTC 自然日计算命中率;如果测得命中率低于适用档位,会补偿差额,并在 Dashboard → Token Usage Analysis 展示。当前公开档位为 65%75%85%

三个公开保证档位从 65% 逐级上升到 85%

边界是有意设计的:

  • 保证针对符合资格且有效的 OpenAI 缓存流量,不针对从未达到阈值或前缀持续变化的短请求。
  • 它不会把变化中的模型、工具 schema、路由或 TTL 自动变成可复用前缀。
  • 按 UTC 自然日计算,并通过文档所述账户界面入账;它不是“每个请求都命中”的断言。
  • 原生用量证据和资格计算仍是必要条件。正因为分母明确,补偿规则才可核验。

这就是可审计服务承诺与第三方 agent 口号的差异:前者写清合格人群、观察窗口、阈值和补偿去向。

价格优势与正规运营是两组独立证据

当前公开价格页还展示了适用活动/分组的 0.015 首充活动比例,并列出单笔最低充值与资格条款。这是价格权益,不应与缓存保证混为一谈。做购买决策前,请以实时价格页确认模型范围、活动状态和结算规则。

Modelflare 的公开信任与法律材料将 Havenbyte LLC 列为运营主体,并描述其为美国运营主体;同时列明 Stripe 用于支付处理、账单、发票、退款和欺诈控制。这些是资金和责任边界的信号,但不能替代阅读条款或测试 API。本文不对具体州注册、认证或供应商隶属关系作超出公开材料的断言。

生产 agent 的选择建议

只有在第三方 agent 能通过以下清单时,才考虑将其用于生产:

  • 转发供应商原生缓存控制项,并返回原生读写用量。
  • 保持稳定指令和工具前缀逐字节一致,再追加动态状态。
  • 暴露选中的模型、路由、组织/区域边界、TTL 模式和 request ID。
  • 记录串行与并行预热结果,而不是把两者平均掉。
  • 书面定义合格流量、分母、UTC 窗口、阈值和补偿方式。
  • 可以导出逐请求证据,同时不泄露密钥或客户内容。

只要有一项答案为“否”,就不要把这条路径用于经济性依赖缓存复用的工作负载。可以先用直连供应商路径做对照实验,或选择可审计的 Modelflare,再用同一套语料验证精确路由。相关主题可继续阅读:可靠的 AI API 路由AI API 成本追踪价格信任中心

来源与核验日期

以下一手资料于 2026-08-25 检查。它们说明供应商协议和 Modelflare 当前公开政策,并不能证明某个未指名第三方 agent 的普遍命中率。

常见问题:第三方命中率低就一定是欺诈吗?

不一定。短提示词、变化前缀、路由分散、TTL 过期或缺少用量字段都可能造成低值。正确结论应是“不可复现”或“不可审计”,直到受控测试找出原因。

常见问题:能否用一个数字比较 Claude 与 GPT?

只有在统一分母并保留两家原生字段后才可以。比较相同语料和工作负载阶段,不要比较混合仪表盘总数。

常见问题:有补偿后还需要设计稳定前缀吗?

需要。补偿限制的是合格 OpenAI 缓存流量的财务下行风险;它不能让不合格请求变得可复用,也不能修复会重写前缀的 agent。