Skip to content
🔗 分享本题
查看我的学习进度 →

Prompt Caching 首次计算稳定长前缀并在后续请求中复用缓存只计算变化尾部

🧠 图解记忆: Prompt Cache 复用稳定前缀的计算,前缀越长越稳定、复用越多,节省越明显。

💡 答案要点

问题背景:API 成本的主要矛盾

LLM API 调用的成本主要由两部分组成:输入 Token(Prompt) + 输出 Token(回答)。对于长 Prompt 场景(如系统指令、RAG 上下文、企业知识库),同样的前缀内容每次请求都要付费——这是巨大的浪费。

2026 年,OpenAI 和 Anthropic 先后推出了 Prompt Caching(上下文缓存) 功能,彻底解决这个问题。

Prompt Caching 的核心原理:

传统调用(每次付费):
┌─────────────────────────────────────┐
│ System Prompt: 你是一个法律顾问...   │  ← 每次请求都付费
│ Context: [法律文档 5000 tokens]     │  ← 每次请求都付费
│ User Query: 合同违约怎么处理?       │  ← 按次付费
└─────────────────────────────────────┘

Prompt Caching(首次付费 + 缓存折扣):
┌─────────────────────────────────────┐
│ System Prompt: [CACHED - 75%折扣]    │  ← 首次付费,后续 75% 优惠
│ Context: [CACHED - 75%折扣]          │  ← 首次付费,后续 75% 优惠
│ User Query: 合同违约怎么处理?       │  ← 按次付费(不变)
└─────────────────────────────────────┘

各大厂商实现对比:

厂商功能名折扣生效位置最大缓存量
OpenAIPrompt Caching75%前缀 tokens(系统指令+上下文)128K tokens
AnthropicContext Caching75%专用缓存 tokens200K tokens
Google GeminiContext Cache60%前缀 tokens32K tokens
CohereCached Queries70%Prompt 前缀100K tokens

代码示例:OpenAI Prompt Caching

展开 Python 代码示例(40 行)
python
# OpenAI API - 使用 Prompt Caching
response = client.chat.completions.create(
    model="gpt-4o-2025-07-10",
    messages=[
        {
            "role": "system",
            "content": "你是一个法律顾问机器人...",  # 会被缓存
        },
        {
            "role": "user",
            "content": f"请阅读以下法律文档并回答问题。\n\n{legal_document}",  # 会被缓存
        },
        {
            "role": "user",
            "content": user_query,  # 不会被缓存(动态部分)
        }
    ],
    extra_body={
        "prompt_cache": True  # 启用 Prompt Caching
    }
)

# Anthropic API - Context Caching
response = client.messages.create(
    model="claude-opus-4-5-20251120",
    max_tokens=1024,
    system=[
        {
            "type": "text",
            "text": "你是一个法律顾问机器人...",
            "cache_control": {"type": "ephemeral"}  # 标记为缓存
        },
        {
            "type": "text",
            "text": legal_document,
            "cache_control": {"type": "ephemeral"}  # 缓存上下文
        }
    ],
    messages=[{"role": "user", "content": user_query}]
)

Prompt Caching vs 语义缓存的核心区别:

维度Prompt Caching(API 层面)语义缓存(应用层面)
原理API 内部缓存 Prompt 前缀基于语义相似度判断命中
折扣75%(API 定价折扣)100%(完全不调用 LLM)
准确度100%(完全相同的内容)~95%(语义相似)
适用场景长系统指令 + RAG 上下文重复或相似问题
实现难度API 层面,开启即可需额外架构(Redis + Embedding)
配合使用✅ 可与语义缓存叠加✅ 可与 Prompt Caching 叠加

两者叠加的成本优化效果:

单次请求成本分解(假设 Prompt 8000 tokens,回答 500 tokens):

场景1: 无优化
  输入成本: 8000 × $0.03/1M = $0.24
  输出成本: 500 × $0.06/1M = $0.03
  总成本: $0.27/次

场景2: Prompt Caching(75% 折扣)
  缓存部分: 7500 × $0.03 × 0.25 = $0.056
  动态部分: 500 × $0.03/1M = $0.000015
  输出成本: 500 × $0.06/1M = $0.03
  总成本: $0.086/次(-68%)

场景3: Prompt Caching + 语义缓存(命中率 40%)
  40% 请求: 语义缓存命中 = $0
  60% 请求: $0.086
  总成本: 0.4 × $0 + 0.6 × $0.086 = $0.052/次(-81%)

生产环境使用 Prompt Caching 的注意事项:

注意事项说明
缓存粒度只缓存 Prompt 的前缀,中间和结尾不缓存
最小长度一般需要 > 1024 tokens 才划算(否则节省不明显)
缓存有效期OpenAI: 约 10 分钟;Anthropic: 手动管理
适用场景长系统 Prompt(> 500 tokens)+ RAG 上下文(> 2000 tokens)
不适用短 Prompt(< 500 tokens)、每次内容都不同

面试话术:

示例表达(仅在能用本人经历或可复现实验佐证时使用): "Prompt Caching 是 2026 年 API 成本优化的最大突破,原理很简单:长 Prompt 的前缀(比如系统指令+RAG 上下文)每次请求都重复,用 API 内部缓存把这部分 token 成本打 75 折。我在项目中用它配合语义缓存——语义缓存处理完全相同的问题(命中率约 40%),Prompt Caching 处理长上下文的重复前缀(额外节省 50%+)。两者叠加,单次请求成本从 $0.27 降到 $0.05,效果量化后给面试官看,很加分。"