Skip to Content

提示词缓存

提示词缓存(Prompt Caching)通过复用近期请求中的提示词前缀,显著降低推理成本和响应延迟。本文介绍各模型提供商的缓存机制及最佳使用策略。

工作原理

当你发送请求时,系统会检测提示词前缀是否与近期请求匹配:

  1. 缓存命中:发现匹配的缓存前缀,直接复用,减少处理时间和费用
  2. 缓存未命中:正常处理请求,同时将前缀写入缓存供后续使用

适用场景:

  • 包含大量示例的提示词
  • 携带大段背景信息或上下文
  • 使用固定指令的重复任务
  • 多轮对话中的长系统提示

自动缓存

以下模型提供商支持自动缓存,无需额外配置。

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

使用建议

  1. 稳定的前缀结构:将固定内容(系统指令、长文本、RAG 数据)放在变动的用户查询之前
  2. 优先缓存大体量内容:RAG 数据集、长文档、CSV/JSON 数据、角色定义等
  3. 合理选择 TTL:短会话用 5 分钟,长交互用 1 小时
  4. 避免缓存易变内容:时间戳、用户变量、频繁变化的数据不适合缓存