提示缓存(Prompt Caching):省 90% Token 费用的秘密
如果你的 AI 应用每次请求都带一段很长的 system prompt(比如知识库、规则说明),你可能在为同样的内容反复付费。
提示缓存(Prompt Caching)可以缓存这些重复的前缀内容,后续请求直接命中缓存,最多省 90% 的输入 Token 费用。
工作原理
- 首次请求 — 全部 Token 正常计费,prompt 前缀被缓存
- 后续请求 — 缓存命中,缓存部分的 Token 大幅降价或免费
- 缓存过期 — 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}")
最佳实践
- 长内容放前面 — system prompt、知识库等静态内容放在消息最前面
- 保持前缀一致 — 前缀内容完全相同才能命中缓存
- 固定和动态分离 — 把不变的(知识库)和变化的(用户问题)分开
适用场景
- 客服系统 — 每次请求都带产品知识库
- 代码助手 — 每次请求都带项目上下文
- 数据分析 — 每次请求都带数据表 schema
- 角色扮演 — 每次请求都带人设 prompt
只要你的请求有重复的 prompt 前缀,提示缓存就能帮你省钱。对于知识库场景,这几乎是必须开启的优化。