如果你在用 Claude、GPT-4o、Gemini 跑生产级应用,账单里大概率藏着一笔"冤枉钱"——不是模型贵,而是你没把官方白送的折扣开关打开。这一轮情报不谈换小模型、不谈 prompt 压缩(那些前几轮讲透了),只讲四把官方已经给你、但 90% 开发者从没碰过的省钱闸刀:原生 Prompt Caching、Batch API、语义缓存代理、输出端止血。组合到位,月账单从 ¥8000 砍到 ¥1500 不是玄学,是算术。
这批信息差的杀伤力在于:它们是官方机制,不是 hack。Anthropic、OpenAI、Google 都在文档里明码标价写着"打一折""对折",但默认全关。原因很简单——付费 prompt 的钱是它们赚的,没动力主动提醒你。
这是四把刀里最锋利的一把。原理很直白:你的请求里如果有一大段重复的前缀(系统提示、知识库文档、Few-shot 示例、长对话历史),官方会在服务端把它缓存住。下次同样前缀进来,这段不再按原价算,直接打一折。
各家政策(核心比例,按官方文档口径):
| 厂商 | 缓存命中价(读取) | 缓存写入价 | 触发条件 | TTL |
|---|---|---|---|---|
| Anthropic | 原价 10%(省 90%) | 原价 ×1.25 | 代码里显式加 cache_control 标记,前缀≥1024 token |
5 分钟 / 可选 1 小时 |
| OpenAI | 原价 50%(省一半) | 无额外写入费 | 自动触发,无需改代码,前缀≥1024 token | 5~10 分钟(低谷期最长 1 小时) |
| Google Gemini | 原价 25% 左右 | 按小时存储费 | 显式创建 cached content | 可自定义(默认 1 小时) |
Anthropic 的关键操作:在 system prompt 或 messages 里加一个字段就行。伪代码长这样:
client.messages.create(
model="claude-sonnet-4-...",
system=[{
"type": "text",
"text": "<你那 8000 token 的产品手册/RAG 文档>",
"cache_control": {"type": "ephemeral"} # ← 就这一行,省 90%
}],
messages=[{"role": "user", "content": user_query}]
)
1 小时 TTL 是被忽视的进阶玩法:5 分钟缓存在真实流量里很容易过期(用户思考超 5 分钟再发问就 miss 了)。把 ttl 设成 "1h",缓存写入费变成原价的 2 倍,但读取仍然一折——对 RAG、客服、文档问答这类同一文档反复问的场景,命中率从 30% 飙到 85% 以上,净算下来还是大赚。
OpenAI 的坑:它是前缀匹配、自动触发,意味着你必须把稳定的内容放最前面、变化的内容放最后。很多人把动态用户输入塞在 system prompt 中间,导致前缀天天变,缓存形同虚设。正确姿势:[系统提示] + [文档] + [few-shot] + [用户本轮输入],从左到右稳定性递减。
信息差点:国内很多接 Claude API 的中间商默认不透传
cache_control,或者把请求拆分转发,导致缓存彻底失效。直接走官方或确认代理支持透传,是省这笔钱的前提。
如果你的任务不需要实时返回(批量打标、数据集清洗、文档摘要、评估集跑分、日志分析),把它扔进 Batch API,整个请求打五折,代价是 24 小时内才出结果。
| 厂商 | 折扣 | 完成窗口 | 单批上限 |
|---|---|---|---|
| Anthropic Message Batches | 50% off | ≤24 小时 | 100,000 请求 / 256 MB |
| OpenAI Batch | 50% off | ≤24 小时 | 友好的 JSONL 提交 |
| Gemini Batch | 50% off | ≤24 小时 | 支持 Gemini 全系 |
操作三步走(以 Anthropic 为例):① 把你的 N 个请求写成一个 JSONL 文件;② POST /v1/messages/batches 上传;③ 轮询或等 webhook,下载结果 JSONL。代码量不超过 30 行。
真正的王炸是"双开关叠加":Batch API 的 50% 折扣和 Prompt Caching 的一折是乘法关系,不是加法。也就是说,一段被缓存的输入前缀,在 Batch 模式下,缓存读取价 = 原价 × 10% × 50% = 原价的 5%。
flowchart TD
A["请求进入<br/>10,000 token 前缀 + 500 token 用户输入"] --> B{实时性要求?}
B -->|否| C["Batch API<br/>整体 ×0.5"]
B -->|是| D["同步 API"]
C --> E{前缀是否已缓存?}
D --> E
E -->|命中| F["缓存读取价 ×0.1"]
E -->|未命中| G["首次写入 ×1.25<br/>5min/1h 后转为读取"]
F --> H["最终单价<br/>≈ 原价 × 0.5 × 0.1 = 5%"]
G --> H
style H fill:#2d6a4f,color:#fff
style F fill:#52b788,color:#fff
一个跑评估集的真实场景:10 万条样本,每条带 6000 token 的评测说明文档。同步原价要烧掉一大笔;改成 Batch + 把说明文档用 cache_control 缓存,账单直接砍到原来的二十分之一以下。这是做模型评测、数据标注团队最该知道却最常忽视的招。
官方 Prompt Caching 是前缀字符级匹配——你问"怎么退款"和"如何申请退款",前缀不一样,缓存 miss。但语义缓存(semantic cache)解决的是意思相同就算命中:把每个问题转成 embedding 存进向量库,新问题来了先算相似度,超过阈值(比如 0.92)就直接返回历史答案,完全不调模型。
主流工具栈(开箱即用,无需改业务代码):
| 工具 | 类型 | 特点 | 适合 |
|---|---|---|---|
| LiteLLM | 开源代理 | 内置 Redis 缓存 + 一键切换 100+ 模型 | 已有多模型、想统一网关 |
| GPTCache | 开源库 | 纯语义缓存,embedding + 向量检索 | Python 项目深度定制 |
| Helicone | 托管可观测+缓存 | 请求日志 + 缓存 + 计费分析一体 | 想要可视化账单洞察 |
| LangCache (Redis) | Redis 官方模块 | 生产级语义缓存,毫秒级 | 高并发线上服务 |
LiteLLM 最省心的接法:它作为代理挡在你和官方 API 之间,配置里开两行,所有经过的请求自动享受缓存。Claude Code、Cursor、自己写的 SDK 都能无痛接——只要把 base_url 指向 LiteLLM 即可。
命中率决定成败:客服、FAQ、文档问答、代码补全这类场景,重复/近似问题占比常达 40%~70%。Helicone 公开案例里,语义缓存让部分客户的 LLM 调用成本下降 50%~80%。关键调参是相似度阈值:调太高(0.98)几乎不命中,调太低(0.80)会把不同问题误判成相同——建议从 0.90 起步,按业务误命中率回调。
一个反直觉的点:语义缓存和官方 Prompt Caching 不冲突,是叠加层。语义缓存挡掉"重复问题"(整请求跳过),Prompt Caching 挡掉"重复前缀"(请求内省钱)。两层一起上,效果是相乘的。
前三把刀砍的是输入,这一把砍输出——而输出 token 的单价通常是输入的 5 倍(Sonnet 级 $15/Mtok vs $3/Mtok)。模型每多吐一个 token,你的钱就多花 5 倍于输入的速率。但绝大多数人从不约束输出长度。
三个立刻能用的止血手段:
max_tokens 必设:不设等于默许模型写到天荒地老。按任务设上限,摘要任务 200、分类任务 10、抽取任务 50。response_format: json_schema、Anthropic 的 tool use 强约束都能做到。一个分类任务,自由文本输出可能 80 token,JSON 输出只要 {"label":"A"} 4 个 token——省 95% 输出费。stop_sequences 截断:知道答案到哪结束(比如代码生成到某个标签),提前设 stop,模型一吐完就停,不拖泥带水。链式调用里的隐藏出血点:多步 Agent 工作流中,每一步的输出会成为下一步的输入。如果中间步骤让模型"详细解释推理过程",这些冗长输出会滚雪球般进入后续上下文,输入费也跟着暴涨。中间步骤强制短输出(JSON、关键值),只在最终步骤允许自由文本,是 Agent 场景的省钱铁律。
以一个文档问答 bot 为例:每天 1000 次请求,每次带 10,000 token 的知识库前缀 + 500 token 用户问题,输出 500 token。Sonnet 级别定价(输入 $3/Mtok、输出 $15/Mtok,代表性数字)。
| 方案 | 输入成本/天 | 输出成本/天 | 日合计 | 月合计(30天) | 节省 |
|---|---|---|---|---|---|
| 裸调(什么都不开) | $31.50 | $7.50 | $39.00 | $1,170 | 基线 |
| + 开 Prompt Caching(前缀 90% off) | $4.90 | $7.50 | $12.40 | $372 | 省 68% |
| + 输出端止血(输出压到 150 token) | $4.90 | $2.25 | $7.15 | $215 | 省 82% |
| + 语义缓存(40% 请求整跳过) | $2.94 | $1.35 | $4.29 | $129 | 省 89% |
| + Batch API(非实时任务再 ×0.5) | $1.47 | $0.68 | $2.15 | $64 | 省 94.5% |
从 ¥8000+($1,170)掉到 ¥450 左右($64)——这就是"账单砍九成"的算术来源。注意每一步都是乘法叠加:90% × (1-输出压缩70%) × (1-语义跳过40%) × 50%,最终残留约 5%~10%。
graph LR
subgraph 优化前["优化前 $1,170/月"]
A1["输入 $945"] --- A2["输出 $225"]
end
subgraph 优化后["优化后 $64/月"]
B1["缓存命中+语义跳过后<br/>输入 ≈ $44"] --- B2["结构化截断后<br/>输出 ≈ $20"]
end
优化前 == "砍 94.5%" ==> 优化后
style 优化前 fill:#7f1d1d,color:#fff
style 优化后 fill:#14532d,color:#fff
| 维度 | 大多数人(你在做) | 信息差持有者(该做的) |
|---|---|---|
| 重复前缀 | 每次原价重传 | cache_control 一折读取 |
| 批量任务 | 同步逐条调 | Batch API 整体五折 |
| 相似问题 | 重复花钱问 | 语义缓存 40%~70% 整跳过 |
| 输出长度 | 不约束,模型自由发挥 | max_tokens + JSON Schema 砍 70% |
| 叠加关系 | 只用一招 | 四招相乘,残留 5%~10% |
| TTL 选择 | 默认 5 分钟易过期 | 1 小时 TTL 命中率翻倍 |
| 代理透传 | 不确认中间商是否透传缓存 | 直连官方或验证代理支持 |
cache_control:在最长、最稳定的前缀(system prompt / 知识库文档)上加 ephemeral 标记,5 分钟能接上,立刻看缓存读取占比。1h,观察命中率曲线。pip install litellm,开 Redis 缓存,base_url 指过去,零业务改动开始命中。⚠️ 数据说明:本文价格为代表性数字,用于说明省钱比例的算术关系;各家最新 token 单价请以官方定价页为准。核心洞察(缓存一折、Batch 对折、四招相乘)是稳定机制,不随单价波动而失效。
本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护。 聚焦5G/6G核心网、3GPP标准、AI工具实战。知识星球「51学通信」提供深度技术答疑和行业洞察。
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
