30 秒快速回答
Prompt Caching(提示缓存)是一种让 LLM 记住并复用已处理过的上下文前缀的技术。当你反复发送相同的系统提示词、文档或对话历史时,模型不再每次都重新计算,直接用缓存结果,典型的成本降幅在 50%~90%。核心价值一句话:你花一次推理的钱,后续调用几乎免费,是大规模 AI 应用降本的必选项。
1. 为什么需要 Prompt Caching?
写 AI 应用的开发者都有过这种痛:每次 API 调用都要把一大段 system prompt、知识库文档、few-shot 示例塞进请求里。1024 个 token 的 system prompt,调用一万次就是 1024 万 token 的重复推理——全是白花花的银子。
以 Claude 3.5 Sonnet 为例:
| 场景 | 每次输入 token | 调用 1 万次总输入 | 成本(输入 $3/M tok) |
|---|---|---|---|
| 无缓存,完整发送 | 5,000 | 5,000 万 | ~$150 |
| 命中缓存(前 4,000 tok) | 1,000(仅增量) | 1,000 万 | ~$30 |
缓存写入一次后,后续调用只需为未缓存部分付费。 这就是 Prompt Caching 的底层逻辑。
2. Prompt Caching 工作原理
2.1 核心机制
LLM 推理过程本质上是逐 token 计算。如果两次请求的前缀完全一致,Transformer 自回归解码中,前缀对应的 Key-Value(KV)缓存是可以复用的。Prompt Caching 正是在服务端做了这件事:
请求 1: [System Prompt] + [User: 帮我分析这份财报] → 完整推理,缓存前缀
请求 2: [System Prompt] + [User: 解读资产负债表] → 前缀命中,只推理增量
请求 3: [System Prompt] + [User: 计算净利润率] → 前缀命中,只推理增量
2.2 什么能被缓存?
各平台的缓存策略略有差异,但大体遵循一个原则:按前缀匹配,前缀越长缓存越值钱。
| 平台 | 最小缓存长度 | 缓存有效期 | 写入成本 | 读取折扣 |
|---|---|---|---|---|
| Anthropic Claude | 1024 tok | 5 分钟(自动刷新) | 正常价格 ×1.25 | 90% off |
| OpenAI GPT-4o | 1024 tok | 5-10 分钟 | 正常价格 | 50% off |
| Google Gemini | 32768 tok | 按 TTL 配置 | 正常价格 | 75% off |
| DeepSeek | 无要求 | 会话级 | 无额外成本 | 自动启用 |
截止 2026 年 8 月。Claude 的 90% off 是当前最激进的折扣方案。
3. 实战:各平台接入代码
3.1 Anthropic Claude(自动缓存)
Claude 的缓存是全自动的,无需手动标记。只要请求前缀相同,服务端自动命中:
import anthropic
client = anthropic.Anthropic()
# 第一次调用:完整推理,建立缓存
response1 = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
system=[{
"type": "text",
"text": "你是一个资深财务分析师,擅长解读上市公司财报..." # 这段会被缓存
}],
messages=[{"role": "user", "content": "分析苹果公司最新财报"}]
)
print(response1.usage.cache_creation_input_tokens) # 缓存写入量
# 成本:正常价格
# 第二次调用:system 部分命中缓存
response2 = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
system=[{
"type": "text",
"text": "你是一个资深财务分析师,擅长解读上市公司财报..." # 命中缓存!
}],
messages=[{"role": "user", "content": "分析特斯拉最新财报"}]
)
print(response2.usage.cache_read_input_tokens) # 缓存命中量,90% off
3.2 OpenAI GPT-4o(自动缓存)
OpenAI 同样自动缓存,方式与 Claude 类似:
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "你是法律文书助手..." * 50}, # 长 system prompt
{"role": "user", "content": "起草一份保密协议"}
]
)
# 查看 usage 即可确认是否命中:
# response.usage.prompt_tokens_details.cached_tokens
3.3 手动标记缓存(进阶场景)
部分平台支持手动标记缓存断点,适合多轮对话等前缀不连续的场景:
# 伪代码示例:在内容块之间手动标记缓存断点
messages = [
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": [
{"type": "text", "text": doc1, "cache_control": {"type": "ephemeral"}},
{"type": "text", "text": doc2, "cache_control": {"type": "ephemeral"}},
{"type": "text", "text": query}
]}
]
4. 最佳实践与避坑指南
4.1 什么场景最赚钱
| 场景 | 缓存命中率 | 成本节省 | 说明 |
|---|---|---|---|
| 固定 System Prompt | 90%+ | 60-90% | system prompt 不变,几乎次次命中 |
| RAG 知识库问答 | 50-80% | 30-50% | 文档块复用率高 |
| 多轮对话 Agent | 40-70% | 20-40% | 历史对话自动前缀匹配 |
| Few-shot 示例 | 80%+ | 50-70% | 示例内容固定 |
4.2 避坑要点
- 不要频繁改前缀:哪怕只改一个字符,缓存就失效。把静态内容放前面,动态内容放后面。
- 利用缓存 breakpoints:如果中间有一小段会变化的内容,可以在变化前设定缓存断点,只让稳定部分被缓存。
- 注意缓存有效期:Claude 是 5 分钟自动续期(每次命中刷新),Gemini 是按你设定的 TTL。高并发场景下不用担心过期。
- 写入成本:Claude 缓存写入比正常推理贵 25%,要确保缓存会被复用才划算。一次性的长 prompt 不建议开缓存。
- 会话复用:把同一个用户的多次调用放在同一个 session 里,前缀自然对齐,缓存命中率最高。
5. 成本对比:一个真实案例
拿一个典型的企业知识库问答应用来算账——500 个文档块的 RAG 系统,日活 1000 人,每人每天平均 5 次提问:
| 方案 | 每次输入 tok | 缓存命中 | 月输入总量 | 月成本 |
|---|---|---|---|---|
| 无缓存 | 8,000 | 0% | 1.2 亿 | $360 |
| Claude 自动缓存 | 1,500(缓存 6,500) | 80% | 2,850 万 | $126 |
| 优化后(静态前缀前置) | 800(缓存 7,200) | 90% | 1,890 万 | $86 |
从 $360 降到 $86,节省 76%。 核心优化动作就两个:把 system prompt 和 few-shot 示例的复杂度集中在前 1024+ token,让缓存尽可能多吃掉。
总结
- Prompt Caching 是 2026 年 LLM API 成本优化的第一优先级技术,90% off 不是噱头
- Claude、GPT-4o、Gemini 均已内置自动缓存,开发者基本零改造成本
- 遵守”静态前缀在前、动态内容在后”的编排原则,让缓存收益最大化
- 缓存写入有溢价(Claude +25%),一次性长 prompt 避免盲目启用
延伸阅读建议:
- 什么是 MCP 协议?一文读懂 AI 的 USB 接口标准 — 搭配缓存降低 MCP 工具调用成本
- 什么是 Token?AI 计费的底层逻辑详解 — 理解 token 才能理解缓存收益
- Agent + RAG + MCP 怎么配合?三者协同架构全解析 — 缓存在三者协同中的实战角色
- Anthropic 官方 Prompt Caching 文档 — 一手规格与限额 (内容由AI生成,仅供参考)