提示词缓存
提示词缓存(Prompt Caching)通过复用近期请求中的提示词前缀,显著降低推理成本和响应延迟。本文介绍各模型提供商的缓存机制及最佳使用策略。
工作原理
当你发送请求时,系统会检测提示词前缀是否与近期请求匹配:
- 缓存命中:发现匹配的缓存前缀,直接复用,减少处理时间和费用
- 缓存未命中:正常处理请求,同时将前缀写入缓存供后续使用
适用场景:
- 包含大量示例的提示词
- 携带大段背景信息或上下文
- 使用固定指令的重复任务
- 多轮对话中的长系统提示
自动缓存
以下模型提供商支持自动缓存,无需额外配置。
OpenAI
- 最低缓存阈值:1024 tokens
- 写入缓存:免费
- 读取缓存:原价的 25%-50%
- 未使用的缓存在 5-10 分钟后自动清除
Gemini
- 隐式缓存,默认自动启用(Gemini 2.5 系列)
- 缓存命中条件:内容、模型、参数完全一致
- 默认 TTL 为 1 小时(可自定义)
- 缓存命中价格为输入价格的 25%
DeepSeek / Grok / Moonshot / Groq
- 写入免费或按原价计费
- 读取价格低于原价(具体折扣因提供商而异)
Claude 显式缓存
Claude 需要在请求中通过 cache_control 手动标记缓存位置,支持对系统消息、用户内容、图片和工具定义进行缓存。
系统消息缓存
{
"role": "system",
"content": [
{
"type": "text",
"text": "你是一个专业的 AI 助手。"
},
{
"type": "text",
"text": "(此处放置大段的背景知识或参考文档...)",
"cache_control": {"type": "ephemeral"}
}
]
}用户消息缓存(自定义 TTL)
{
"role": "user",
"content": [
{
"type": "text",
"text": "(此处放置大段的分析内容...)",
"cache_control": {"type": "ephemeral", "ttl": "1h"}
}
]
}图片缓存
在图片内容块上添加 cache_control:
{
"type": "image",
"source": {"type": "url", "url": "https://example.com/image.jpg"},
"cache_control": {"type": "ephemeral"}
}工具定义缓存
在工具对象的顶层添加 cache_control:
{
"type": "function",
"function": {
"name": "search",
"description": "搜索相关信息",
"parameters": {...}
},
"cache_control": {"type": "ephemeral"}
}TTL 选项
- 5 分钟(默认):适合短会话场景
- 1 小时(Beta):适合长时间交互,需添加
anthropic-beta: extended-cache-ttl-2025-04-11头
使用建议
- 稳定的前缀结构:将固定内容(系统指令、长文本、RAG 数据)放在变动的用户查询之前
- 优先缓存大体量内容:RAG 数据集、长文档、CSV/JSON 数据、角色定义等
- 合理选择 TTL:短会话用 5 分钟,长交互用 1 小时
- 避免缓存易变内容:时间戳、用户变量、频繁变化的数据不适合缓存