关于缓存与成本优化

什么是 Prompt Caching?

当你发送包含大量固定上下文(如系统提示词、知识库)的请求时,模型会将这部分内容缓存起来。后续请求如果复用了相同的上下文,就可以直接读取缓存,无需重新计算。

缓存命中率 = 缓存读取的 token 数 ÷ 总输入 token 数 × 100%

缓存命中的好处:

  • 降低延迟:跳过已缓存部分的处理,首字响应更快
  • 降低成本:缓存读取的 token 按更低价格计费(通常为原价的 10%-25%)

哪些模型支持 Prompt Caching?

不同模型对 Prompt Caching 的支持程度并不完全一致,建议以控制台说明、实际返回结果和上游模型能力为准。

当前建议:

模型类型 建议
Claude 系列 支持最成熟,适合长 system prompt、知识库问答等场景
GPT / Gemini 系列 具体支持能力以实际模型和上游能力为准,建议先小流量验证

如何提升缓存命中率

1. 固定前缀,动态内容放在后面

{
  "messages": [
    {"role": "system", "content": "【固定的系统提示词,2000字...】"},
    {"role": "user", "content": "【用户的动态问题】"}
  ]
}

system prompt 保持不变 → 缓存命中;user message 每次不同 → 正常计费。

2. 合理设置缓存断点

将大段固定内容放在 messages 的前面几条,动态内容放在后面。模型从头开始匹配缓存,遇到不同内容时停止。

3. 控制请求间隔

缓存有有效期(通常 5-10 分钟)。如果两次请求间隔过长,缓存可能已过期。对于高频调用场景,缓存命中率自然更高。

4. 统一模板,避免微小差异

以下两个请求不会命中缓存:

  • "你是一个专业的助手。"
  • "你是一个专业的助手 "(多了空格)

即使内容几乎相同,任何字符差异都会导致缓存失效。建议使用统一的 prompt 模板。

5. 复用同一模型和 API 密钥

不同模型之间不共享缓存。同一模型 + 同一前缀 = 最高命中率。

其他成本优化建议

选择合适的模型

不是所有任务都需要最强模型:

任务类型 推荐模型 成本级别
简单问答、分类 claude-3-5-haiku-20241022 / gpt-5-nano / gemini-2.5-flash-lite
日常对话、摘要 claude-sonnet-4-20250514 / gpt-5-mini / gemini-2.5-flash 中低
代码生成、分析 claude-sonnet-4-20250514 / claude-3-7-sonnet-20250219 / gpt-5.2
复杂推理、创作 claude-opus-4-1-20250805 / claude-opus-4-20250514 / gpt-5.4 / gemini-3.1-pro

控制 max_tokens

设置合理的 max_tokens 避免模型生成过长的无用内容。例如,如果你只需要"是/否"的判断,设 max_tokens: 10 就够了。

精简 system prompt

过长的 system prompt 会增加每次请求的输入 token 成本。保持 prompt 精炼,去掉不必要的描述。