提示缓存(Prompt Caching):省 90% Token 费用的秘密

如果你的 AI 应用每次请求都带一段很长的 system prompt(比如知识库、规则说明),你可能在为同样的内容反复付费。

提示缓存(Prompt Caching)可以缓存这些重复的前缀内容,后续请求直接命中缓存,最多省 90% 的输入 Token 费用

工作原理

  1. 首次请求 — 全部 Token 正常计费,prompt 前缀被缓存
  2. 后续请求 — 缓存命中,缓存部分的 Token 大幅降价或免费
  3. 缓存过期 — TTL 通常 5-10 分钟,过期后重新缓存

各模型节省比例

模型系列输入成本降低
Claude~90%
GPT~50%
Gemini~50-75%

OpenAI 协议:自动缓存

OpenAI 兼容协议下,缓存是自动的,无需额外配置。系统会自动识别重复的 prompt 前缀并缓存。

Anthropic 协议:显式缓存控制

Claude 模型可以通过 cache_control 参数精确控制缓存行为:

import anthropic

client = anthropic.Anthropic(
    base_url="https://api.ofox.ai/anthropic",
    api_key="your-api-key"
)

response = client.messages.create(
    model="anthropic/claude-sonnet-4.5",
    max_tokens=1024,
    system=[{
        "type": "text",
        "text": "你是一个客服助手。以下是产品知识库:...(很长的内容)...",
        "cache_control": {"type": "ephemeral"}
    }],
    messages=[{"role": "user", "content": "产品A的价格是多少?"}]
)

# 查看缓存使用情况
print(f"缓存创建: {response.usage.cache_creation_input_tokens}")
print(f"缓存命中: {response.usage.cache_read_input_tokens}")

最佳实践

  1. 长内容放前面 — system prompt、知识库等静态内容放在消息最前面
  2. 保持前缀一致 — 前缀内容完全相同才能命中缓存
  3. 固定和动态分离 — 把不变的(知识库)和变化的(用户问题)分开

适用场景

  • 客服系统 — 每次请求都带产品知识库
  • 代码助手 — 每次请求都带项目上下文
  • 数据分析 — 每次请求都带数据表 schema
  • 角色扮演 — 每次请求都带人设 prompt

只要你的请求有重复的 prompt 前缀,提示缓存就能帮你省钱。对于知识库场景,这几乎是必须开启的优化。


相关阅读