LLM API Prompt Caching 跨服务商对比:OpenAI、Anthropic、DashScope 和 DeepSeek 的缓存机制差异
2026 年跨服务商 Prompt Caching 对比:OpenAI 自动缓存 + 显式断点、Anthropic cache_control 标记、DashScope 显式与隐式双模式、DeepSeek 磁盘缓存。对比缓存类型、TTL、价格折扣、最低 token 数和路由影响。
所有主流 LLM API 服务商现在都支持 prompt prefix 缓存,但实现方式完全不同。OpenAI 默认自动缓存,GPT-5.6 起新增显式断点并收取写入费用。Anthropic 要求显式 cache_control 标记并收取写入费。DashScope 提供显式缓存(收写入费)和隐式缓存(免写入费)两种模式。DeepSeek 自动写入磁盘缓存,无写入费。价格折扣从 80% 到 90%,TTL 从 5 分钟到 24 小时不等,最低 token 阈值从 256 到 1,024 不等。
当你在多个服务商之间做路由时,这些差异直接影响成本模型:同一个 prompt 在一个服务商上享受 90% 读取折扣,在另一个服务商上可能先付 25% 写入溢价,TTL 不匹配还可能导致预期的缓存命中变成全价未命中。
本文对四家服务商进行逐一对比,包含代码示例、价格计算和路由选型矩阵。
OpenAI 兼容指供应商提供一个 chat-completions 接口,其请求与响应结构与 OpenAI API 契约足够接近——只需替换三个值(API key、base URL、模型名),原来的 OpenAI SDK 调用即可直接工作。最小实践面是POST /v1/chat/completions 带 messages、model, 并返回 OpenAI 形式的流式响应。
数据来源:OpenAI Prompt Caching 文档,检索于 2026-08-05;DashScope 上下文缓存文档,检索于 2026-08-05;DeepSeek 上下文缓存文档,检索于 2026-08-05;Anthropic Prompt Caching 文档,检索于 2026-08-05(搜索摘要);DashScope 模型定价,检索于 2026-08-05。
总览对比表
| 特性 | OpenAI | Anthropic | DashScope(显式) | DashScope(隐式) | DeepSeek |
|---|---|---|---|---|---|
| 缓存类型 | 自动 + 显式断点 | 显式(cache_control) | 显式(cache_control) | 自动 | 自动(磁盘) |
| 需要主动启用 | 否(自动);显式断点需要 | 是 | 是 | 否 | 否 |
| 最低 token 数 | 1,024 | 1,024 (Sonnet 5) / 2,048 (Opus) | 1,024 | 256 | 未明确 |
| 缓存写入费 | 免费(GPT-5.6 之前);1.25× 基础价(GPT-5.6+) | 1.25× 基础输入价 | 1.25× 基础输入价 | 免费(标准输入价) | 免费 |
| 缓存读取折扣 | 模型相关(最高 90%) | 90%(0.1× 基础价) | 90%(0.1× 基础价) | 80%(0.2× 基础价) | 约 90% |
| TTL | 5-10 分钟(内存);最长 24 小时(扩展) | 5 分钟(ephemeral);1 小时(带 ttl) | 5 分钟(命中时重置) | 不确定 | 数小时到数天 |
| 单次请求最大断点数 | 4 写 / 50 读 | 4 个 cache_control | 4 个 cache_control | N/A | N/A |
| 响应字段 | cached_tokens, cache_write_tokens | cache_creation_input_tokens, cache_read_input_tokens | cached_tokens(OpenAI 兼容) | cached_tokens | prompt_cache_hit_tokens, prompt_cache_miss_tokens |
OpenAI:自动缓存 + GPT-5.6 显式断点
OpenAI 的 prompt caching 对 1,024 token 以上的 prompt 自动生效。系统根据 prompt 前 ~256 个 token 的 hash 将请求路由到近期处理过相同 prefix 的服务器,无需修改代码。
GPT-5.6 及更新模型引入了显式缓存断点和写入费用(1.25× 基础输入价)。默认的隐式断点落在最后一条 user 或 tool 消息上。如果该消息包含变化内容(时间戳、tool 调用历史),断点处的 prefix 每次请求都不同,cached_tokens 可能为 0。
要控制这一行为,可在稳定 prefix 末尾添加 prompt_cache_breakpoint,并将 prompt_cache_options.mode 设为 explicit:
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-5.6-sol",
prompt_cache_key="repo-review-v1",
prompt_cache_options={"mode": "explicit"},
messages=[
{
"role": "system",
"content": [
{
"type": "text",
"text": "You are a code reviewer. Repository contents:\n\n<repo>...</repo>",
"prompt_cache_breakpoint": {"mode": "explicit"},
}
],
},
{"role": "user", "content": "Review the auth module for security issues."},
],
)
usage = response.usage
print(f"Cached: {usage.prompt_tokens_details.cached_tokens}")
print(f"Written: {usage.prompt_tokens_details.cache_write_tokens}")
要点:
prompt_cache_key与 prefix hash 组合使用,将请求路由到同一缓存。每个 key 的流量应控制在 ~15 RPM 以内。- GPT-5.6 显式断点的 TTL 默认 30 分钟。
- GPT-4.1、GPT-5、GPT-5.1、GPT-5.2、GPT-5.4、GPT-5.5 系列的非 ZDR 组织可使用扩展保留(最长 24 小时)。
- 每次请求最多创建 4 个缓存写入;最多 50 个断点可用于读取。
来源:OpenAI Prompt Caching 文档,检索于 2026-08-05。
Anthropic:显式 cache_control + 写入费
Anthropic 的 prompt caching 完全显式。通过在内容块上添加 cache_control 标记指定需要缓存的 prefix。首次调用支付 1.25× 的写入费;后续命中缓存的调用只需支付基础输入价的 10%(90% 折扣)。
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
system=[
{
"type": "text",
"text": "You are a code reviewer. Full repo contents:\n\n<repo>...</repo>",
"cache_control": {"type": "ephemeral"},
}
],
messages=[
{"role": "user", "content": "Review auth module for vulnerabilities."}
],
)
usage = response.usage
print(f"Cache write: {usage.cache_creation_input_tokens}")
print(f"Cache read: {usage.cache_read_input_tokens}")
要点:
- 最低可缓存 token 数:Claude Sonnet 5 为 1,024,Claude Opus 为 2,048。
- 默认 TTL:5 分钟(
ephemeral)。可选ttl参数可延长至 1 小时。 - 每次请求最多 4 个
cache_control断点。 - 写入价格 1.25× 基础输入价,读取价格 0.1× 基础输入价。
- 每次命中会重置 TTL。
来源:Anthropic Prompt Caching 文档,检索于 2026-08-05(搜索摘要)。
DashScope:显式和隐式双模式
DashScope(阿里云百炼)提供两种缓存模式,同一请求中互斥:
显式缓存
与 Anthropic 方式类似:在消息中添加 cache_control: {"type": "ephemeral"} 标记。写入费 1.25× 基础输入价,读取费 0.1× 基础输入价(90% 折扣)。TTL 5 分钟,命中时重置。最低 1,024 token。每次请求最多 4 个标记。
from openai import OpenAI
client = OpenAI(
api_key="sk-xxx",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
response = client.chat.completions.create(
model="qwen3.7-max",
messages=[
{
"role": "system",
"content": [
{
"type": "text",
"text": "你是一位金融分析师。报告内容:\n\n<report>...</report>",
"cache_control": {"type": "ephemeral"},
}
],
},
{"role": "user", "content": "总结关键收入指标。"},
],
)
print(response.usage)
隐式缓存
未使用显式标记时默认启用。系统自动检测跨请求的公共 prefix 并缓存。无写入费——缓存创建 token 按标准输入价计费。缓存读取 token 按基础输入价的 20% 计费(80% 折扣)。最低 256 token。TTL 不确定,系统定期清理未使用的缓存数据。
**支持的模型(截至 2026 年 8 月):**Qwen3.7-Max、Qwen3.7-Plus、Qwen3.6-Flash、Qwen3.5-Plus、Qwen3.5-Flash、Qwen3-Max、Qwen-Plus、Qwen-Flash、DeepSeek-V3.2(通过 DashScope)、Kimi-K2.7-Code、Kimi-K2.6、Kimi-K2.5、GLM-5.1,以及 Qwen VL/Coder 系列。
来源:DashScope 上下文缓存文档,检索于 2026-08-05。
DeepSeek:自动磁盘缓存
DeepSeek 的 "Context Caching on Disk" 对所有用户默认启用,无需修改代码。每次请求会触发缓存构建,后续具有匹配 prefix 的请求自动命中缓存。
from openai import OpenAI
client = OpenAI(
api_key="sk-xxx",
base_url="https://api.deepseek.com",
)
response = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "system", "content": "你是一位金融分析师。报告内容:\n\n<report>...</report>"},
{"role": "user", "content": "总结关键收入指标。"},
],
)
usage = response.usage
print(f"Cache hit tokens: {usage.prompt_cache_hit_tokens}")
print(f"Cache miss tokens: {usage.prompt_cache_miss_tokens}")
要点:
- 缓存 prefix 单元在请求边界(用户输入末尾 + 模型输出末尾)、长输入的固定 token 间隔、以及系统检测到的公共 prefix 处创建。
- 缓存匹配要求完全匹配一个已持久化的 prefix 单元,部分 prefix 重叠不会命中。
- 多轮对话场景下第二轮可命中第一轮的完整缓存单元。同一文档不同问题的场景下,系统在 2+ 次请求后检测公共 prefix 并持久化,第三次请求才能命中。
- TTL:尽力而为,"几小时到几天"。无显式 TTL 控制。
- 无写入费。命中 token 按折扣价计费(约 90% 折扣)。
来源:DeepSeek 上下文缓存文档,检索于 2026-08-05。
SiliconFlow:未记录缓存机制
截至 2026 年 8 月,SiliconFlow 的公开 API 文档未描述 prompt caching 机制。/v1/chat/completions 端点遵循 OpenAI 兼容 schema,但未暴露 cached_tokens 或类似字段。如果 SiliconFlow 内部有缓存,它是透明的,不反映在计费或响应元数据中。
对于缓存收益显著的工作负载,通过支持显式缓存的服务商路由可能比 SiliconFlow 更省钱,即使 SiliconFlow 的基础 token 价格更低。
价格计算:缓存何时省钱?
缓存只有在读取节省大于写入成本时才省钱。各服务商的盈亏平衡点:
OpenAI(GPT-5.6)
- 写入费:1.25× 基础输入价
- 读取折扣:模型相关(最高 90%,即 0.1× 基础价)
- 盈亏平衡:约 2 次读取/写入
Anthropic
- 写入费:1.25× 基础输入价
- 读取:0.1× 基础输入价
- 盈亏平衡:约 2 次读取/写入
DashScope 显式
- 写入费:1.25× 基础输入价
- 读取:0.1× 基础输入价
- 盈亏平衡:约 2 次读取/写入
DashScope 隐式
- 写入费:无(1.0× 标准价)
- 读取:0.2× 基础输入价
- 盈亏平衡:首次命中即省钱
DeepSeek
- 写入费:无
- 读取:~0.1× 基础输入价
- 盈亏平衡:首次命中即省钱
**路由启示:**DashScope 隐式缓存和 DeepSeek 磁盘缓存没有盈亏平衡门槛——每次命中都省钱。OpenAI(GPT-5.6+)、Anthropic 和 DashScope 显式缓存至少需要 2 次缓存读取才能覆盖写入费。对于一次性或低频 prompt,写入溢价可能让缓存比不缓存更贵。
影响路由的缓存行为差异
TTL 与缓存亲和性
跨服务商路由时,缓存状态不会迁移。在 OpenAI 上缓存的 prefix 在 Anthropic 上不存在。将相同的重复 prefix 以轮询方式分发到不同服务商,意味着没有任何服务商能积累缓存状态,每次都付全价。
对于缓存密集型工作负载,服务商绑定(将相同对话或 prompt 模板路由到同一服务商)比轮询更划算。这是一个设计权衡:绑定提高缓存命中率,但降低了故障转移到其他服务商的灵活性。
Prefix 结构
所有服务商都按精确 prefix 匹配。如果可变内容在静态内容之前,任何服务商都不会触发缓存:
✅ system prompt(静态,长)→ user message(可变,短)
❌ user context(可变)→ system prompt(静态)
DeepSeek 的匹配更严格:缓存单元必须完全匹配。请求 1 发送 A + B,请求 2 发送 A + C,请求 2 不会命中。DeepSeek 在两次请求后检测到公共 prefix A 并持久化;第三次请求 A + D 才能命中。这意味着 DeepSeek 缓存在变化后缀的工作负载上有 2+ 次请求的冷启动延迟。
响应字段名
各服务商报告缓存状态的字段不同。如果你的日志或成本追踪系统依赖特定字段,需要按服务商解析:
| 服务商 | 缓存读取字段 | 缓存写入字段 |
|---|---|---|
| OpenAI | usage.prompt_tokens_details.cached_tokens | usage.prompt_tokens_details.cache_write_tokens |
| Anthropic | usage.cache_read_input_tokens | usage.cache_creation_input_tokens |
| DashScope | usage.prompt_tokens_details.cached_tokens | —(隐式:无;显式:从总量推断) |
| DeepSeek | usage.prompt_cache_hit_tokens | —(无独立写入字段) |
选型矩阵:哪种缓存策略适合哪种工作负载
| 工作负载 | 最佳缓存选择 | 原因 |
|---|---|---|
| 重复 system prompt,固定模型 | OpenAI(自动)或 DeepSeek(自动) | 零配置,重复 prefix 自动构建缓存 |
| 大型静态文档 + 不同问题 | DashScope 显式或 Anthropic 显式 | 在文档后放置 cache_control,一次写入多次读取享 90% 折扣 |
| 多轮对话 | DeepSeek 或 OpenAI | 两者都自动缓存对话历史 |
| 低频多样化 prompt | DashScope 隐式或 DeepSeek | 无写入溢价,偶尔复用也省钱 |
| 高吞吐量相同请求 | OpenAI + prompt_cache_key | key 路由提高命中率,每个 key 控制在 15 RPM 以内 |
| 成本敏感 + 复用不确定 | 避免显式缓存(Anthropic/DashScope 显式) | 1.25× 写入费在低复用时可能反而更贵 |
| 多服务商路由 | 将缓存密集流量绑定到单一服务商 | 缓存状态不跨服务商迁移,轮询会破坏缓存经济性 |
TheRouter 说明
当 TheRouter 在 OpenAI、Anthropic、DashScope 和 DeepSeek 之间路由请求时,缓存由各服务商独立处理。发往 OpenAI 的请求在 OpenAI 上构建缓存;如果同一 prompt 的下一个请求被路由到 Anthropic,则从零开始。
对于缓存是重要成本杠杆的工作负载,建议配置模型 fallback 让特定 prompt 模板优先使用单一服务商,仅在限流或错误时 fallback 到其他服务商。这在保持可靠性的同时保留缓存亲和性。
Prompt caching 不改变路由决策本身——router 不检查或管理服务商的缓存状态。优化在 prompt 和路由配置侧:合理组织 prompt 结构以利于缓存、绑定缓存敏感流量、并监控各服务商响应元数据中的缓存命中率。
常见问题
能否通过 OpenAI 兼容网关使用 prompt caching?
可以。OpenAI 自动缓存透明生效。Anthropic 和 DashScope 显式缓存需要网关透传 cache_control 参数。DeepSeek 缓存完全透明。
缓存是否影响输出质量?
不会。所有服务商都声明缓存仅影响输入处理(KV cache 复用),模型仍通过完整计算生成输出,输出随机性(由 temperature 控制)不受影响。
缓存过期后会怎样? 下一个具有相同 prefix 的请求按全价(或写入价)计费。Anthropic 和 DashScope 显式缓存中每次命中会重置 TTL,活跃使用的缓存会保持有效。OpenAI(GPT-5.6)显式断点缓存 TTL 为 30 分钟;旧模型系列可使用扩展保留。
能否缓存 tool 定义和图片?
OpenAI:可以(tool 和图片包含在 prefix 匹配中)。Anthropic:可以(tool 定义和图片内容块可携带 cache_control)。DashScope:可以(显式模式下多模态内容块支持 cache_control)。DeepSeek:tool 定义作为 prompt prefix 的一部分自动缓存。