渡 AI
← 返回博客
· 渡 AI 团队 成本优化ClaudeOpenAI实战

Prompt Cache 实战:把 Claude/OpenAI 调用成本砍到 1/5

Claude Prompt Cache 与 OpenAI Cached Tokens 的实战指南,附 Python/Node 代码示例,立省 60-90% 成本。

一句话:把你的 system prompt + few-shot + 知识库前缀显式标记为 cache,平均省 60-90% 成本

为什么你的账单这么贵

我们看过太多用户的调用日志,最常见的浪费:

  • 每次请求都把 5K token 的系统提示词重发一遍
  • RAG 把 10K token 的知识库切片每次都重新塞
  • 多轮对话每一轮都把前 N 轮历史完整重发

这些内容根本不变,却按”原价”计费。Claude 和 OpenAI 都有 prompt cache,命中后费率分别是原价的 10% 和 50%。但你得显式启用

Claude 的玩法:cache_control

Claude 的缓存最激进 —— 命中费率是原价的 1/10。但需要你手动标记缓存断点。

from anthropic import Anthropic
client = Anthropic(
    api_key="sk-xxxxxxxx",
    base_url="https://api.tathr.com/anthropic",
)

SYSTEM = """你是一个资深 Python 工程师助手……"""  # 假设 5K tokens
KB = open("knowledge_base.txt").read()           # 假设 20K tokens

resp = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    system=[
        {
            "type": "text",
            "text": SYSTEM,
            "cache_control": {"type": "ephemeral"},  # ← 关键
        },
        {
            "type": "text",
            "text": KB,
            "cache_control": {"type": "ephemeral"},  # ← 关键
        },
    ],
    messages=[{"role": "user", "content": "如何写一个 LRU 缓存?"}],
)
print(resp.usage)
# 第一次:cache_creation_input_tokens=25000, input_tokens=10
# 第二次(5 分钟内):cache_read_input_tokens=25000, input_tokens=10

计费拆解(Sonnet 4.6 为例):

  • 不开缓存:25000 × ¥22/1M = ¥0.55 每次
  • 开缓存(第一次):25000 × ¥27.5/1M(写入价 1.25x) = ¥0.69 一次性
  • 开缓存(命中后):25000 × ¥2.2/1M = ¥0.055 每次

一万次调用,从 ¥5500 砍到 ¥550 + ¥0.69 ≈ 省 90%

注意事项

  • 缓存有效期 5 分钟(每次命中续期)
  • 最少缓存长度 1024 token(更短的不让缓存)
  • 最多 4 个 cache_control 断点
  • 缓存是前缀匹配:只要前缀一致就命中,所以放前面的内容越长越值

OpenAI 的玩法:自动命中

OpenAI 不用你做任何标记,输入超过 1024 token 自动缓存。但折扣只有 50%(命中部分按 0.5x 计费)。

from openai import OpenAI
client = OpenAI(
    api_key="sk-xxxxxxxx",
    base_url="https://api.tathr.com/v1",
)

resp = client.chat.completions.create(
    model="gpt-5",
    messages=[
        {"role": "system", "content": SYSTEM},
        {"role": "user", "content": "..."},
    ],
)
# 看 resp.usage.prompt_tokens_details.cached_tokens

所以使用 OpenAI 的关键不是”启用缓存”,而是”让前缀稳定”

  • 不变内容(system、few-shot、KB)放前面
  • 变动内容(用户输入)放后面
  • 不要在每次请求里调整 system prompt 的措辞

如果你违反这条,缓存命中率会从 90% 掉到 0%,账单立刻翻倍。

实测对比

我们做了一个真实场景:客服 chatbot,系统提示词 6K + 知识库 15K + 用户问题平均 100 token + 回答 500 token。

配置单次成本1 万次
Claude Sonnet 4.6,不开 cache¥0.51¥5,116
Claude Sonnet 4.6,开 cache¥0.10¥1,007
GPT-5,无前缀稳定¥1.96¥19,620
GPT-5,前缀稳定¥1.04¥10,440
GPT-5 mini,前缀稳定¥0.21¥2,082

结论

  • 中型生产应用,Claude Sonnet 4.6 + cache 是性价比之王
  • 用 GPT 系列,一定要把 prompt 结构定下来不变
  • 别傻乎乎用 GPT-5 跑客服,mini 完全够用

常见误区

  1. 「我把 prompt 拼接成一个 string 就行」 —— Claude 必须用结构化 system 数组才能用 cache_control。
  2. 「每次请求都 append 当前时间戳」 —— 直接把缓存击穿。时间戳放消息体最后。
  3. 「KB 我每次重新检索 top-5 注入」 —— 检索结果在变,缓存命中率为 0。改成全量 KB 进缓存 + 让模型自己引用,或者分组缓存(按主题预先切好)。
  4. 「我两个模型混用」 —— 缓存按模型隔离。Sonnet 缓存的,Opus 用不了。

在 渡 AI 怎么看缓存效果

我们的控制台在调用日志里展示每次请求的 cached_input_tokenscache_creation_tokens目标命中率 > 70%,低于这个数字说明 prompt 结构需要重构。

立即开始优化你的账单 →

让 Claude 与 OpenAI
直接为你服务

免去 VPN、信用卡、代理的所有麻烦。注册即用,赠 ¥10 体验额度。