背景
主流模型厂商(OpenAI、Anthropic 等)均提供了 Prompt Caching 能力:当连续请求的前缀内容相同或主动标记缓存时,上游会复用已缓存的计算结果,对缓存命中部分给予折扣计费。 但缓存有一个关键约束:缓存绑定在具体的渠道(API Key / 账户)上,不能跨渠道共享。 在聚合网关场景下,Poixe 后端接入了多个上游渠道,默认由权重负载均衡模块分配请求。这意味着同一个用户的连续请求可能被分发到不同渠道,导致上游缓存频繁失效。 缓存亲和性路由正是为了解决这个问题。工作原理
绑定失效条件
绑定关系是短暂且脆弱的,满足以下任一条件即自动解除:| 条件 | 说明 |
|---|---|
| TTL 过期 | 绑定创建后 5 分钟强制失效,不续期 |
| 请求次数上限 | 单个绑定最多承载 100 次请求,超过后自动解除 |
| 渠道异常 | 绑定渠道返回任何错误(无论是否为用户请求体问题),立即解除 |
绑定失效不会导致请求失败。系统会立即回退到权重负载均衡,正常处理请求。
适用范围
缓存亲和性路由 不是对所有模型生效,仅对以下协议和厂商的特定模型启用:| 协议 | 厂商 | 启用模型 |
|---|---|---|
| OpenAI Chat Completions | OpenAI | gpt-4o、gpt-4o-mini、... |
| OpenAI Responses | OpenAI | gpt-4o、gpt-4o-mini、... |
| Anthropic Messages | Anthropic | claude-opus-4-6、claude-sonnet-4-6、... |
该列表会随上游厂商的缓存策略调整而更新。不在列表中的模型走默认负载均衡,不受影响。
实际节省效果
以下是一个 Claude Code + claude-opus-4-6 的真实请求示例,展示缓存命中对费用的影响:- 请求概况
- 费用对比
命令行终端打开
这是一次典型的 Claude Code 对话请求——绝大部分 prompt 内容(系统提示、项目上下文、历史对话)在前次请求中已被缓存,本次直接命中。
claude,多次对话输入 hi,触发对话请求。上游实际计费的 token 数如下:| 项目 | Token 数 |
|---|---|
| 输入 tokens | 1 |
| 输出 tokens | 146 |
| 缓存写入(5min) | 321 |
| 缓存命中 | 25,648 |
单次节省
86%
$0.1335 → $0.0185
$0.1335 → $0.0185
缓存命中价
1/10
$5.00 → $0.50 / MTok
$5.00 → $0.50 / MTok
Claude Code 场景
~90%+
连续对话中 prompt 缓存命中率
连续对话中 prompt 缓存命中率
在 Claude Code 的典型工作流中,每轮对话都会携带完整的系统提示和项目上下文(通常 20K~100K tokens),这些内容在连续请求间几乎不变。缓存亲和性路由确保这些请求尽可能命中同一渠道的缓存,将这部分 tokens 的单价从 $5/MTok 降至 $0.50/MTok。
设计取舍
缓存亲和性路由本质上是在 缓存命中率 和 流量均衡 之间做权衡:- 短 TTL + 次数上限:避免流量长期集中在单一渠道,防止负载倾斜
- 错误即解绑:避免将后续请求持续路由到已异常的渠道
- 尽力而为:亲和路由是优化手段而非硬性保证,任何环节失败都会静默回退到默认逻辑
对用户的影响
- 无需任何配置,系统自动生效
- 在编程助手(Claude Code、Codex 等)场景下,连续对话的缓存命中率会显著提升
- 缓存命中时,上游按折扣价计费,Poixe 的扣费同步降低
上游缓存机制参考
OpenAI Prompt Caching
OpenAI 官方 Prompt Caching 文档,包含缓存规则与计费说明
Anthropic Prompt Caching
Anthropic 官方 Prompt Caching 文档,包含缓存规则与计费说明