<!-- title: 四个没开的官方开关：API账单砍九成 -->
<!-- domain: cost-hacks -->

## API账单砍九成：四个你没开的官方省钱开关

如果你在用 Claude、GPT-4o、Gemini 跑生产级应用，账单里大概率藏着一笔"冤枉钱"——不是模型贵，而是你没把官方白送的折扣开关打开。这一轮情报不谈换小模型、不谈 prompt 压缩（那些前几轮讲透了），只讲四把**官方已经给你、但 90% 开发者从没碰过的省钱闸刀**：原生 Prompt Caching、Batch API、语义缓存代理、输出端止血。组合到位，月账单从 ¥8000 砍到 ¥1500 不是玄学，是算术。

这批信息差的杀伤力在于：**它们是官方机制，不是 hack**。Anthropic、OpenAI、Google 都在文档里明码标价写着"打一折""对折"，但默认全关。原因很简单——付费 prompt 的钱是它们赚的，没动力主动提醒你。

---

## 开关一：原生 Prompt Caching —— 命中即一折

这是四把刀里最锋利的一把。原理很直白：你的请求里如果有一大段**重复的前缀**（系统提示、知识库文档、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 里加一个字段就行。伪代码长这样：

```python
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 —— 异步任务直接对折

如果你的任务**不需要实时返回**（批量打标、数据集清洗、文档摘要、评估集跑分、日志分析），把它扔进 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%**。

```mermaid
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 倍于输入的速率。但绝大多数人从不约束输出长度。

**三个立刻能用的止血手段**：

1. **`max_tokens` 必设**：不设等于默许模型写到天荒地老。按任务设上限，摘要任务 200、分类任务 10、抽取任务 50。
2. **Structured Output / JSON Schema**：强制模型只输出结构化字段，天然干掉所有"好的，以下是…"、"综上所述…"的废话前缀。OpenAI 的 `response_format: json_schema`、Anthropic 的 tool use 强约束都能做到。一个分类任务，自由文本输出可能 80 token，JSON 输出只要 `{"label":"A"}` 4 个 token——**省 95% 输出费**。
3. **`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%。

```mermaid
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
```

---

## 信息差总结：你知道的 vs 别人不知道的

| 维度 | 大多数人（你在做） | 信息差持有者（该做的） |
|------|------------------|---------------------|
| **重复前缀** | 每次原价重传 | `cache_control` 一折读取 |
| **批量任务** | 同步逐条调 | Batch API 整体五折 |
| **相似问题** | 重复花钱问 | 语义缓存 40%~70% 整跳过 |
| **输出长度** | 不约束，模型自由发挥 | max_tokens + JSON Schema 砍 70% |
| **叠加关系** | 只用一招 | 四招相乘，残留 5%~10% |
| **TTL 选择** | 默认 5 分钟易过期 | 1 小时 TTL 命中率翻倍 |
| **代理透传** | 不确认中间商是否透传缓存 | 直连官方或验证代理支持 |

---

## 行动指南：今晚就能做的五步

1. **审计账单**：打开 Anthropic/OpenAI 后台，看输入输出 token 占比。输出占比超 40%，先动开关四（收益最快）。
2. **加 `cache_control`**：在最长、最稳定的前缀（system prompt / 知识库文档）上加 ephemeral 标记，5 分钟能接上，立刻看缓存读取占比。
3. **改 1 小时 TTL**：RAG / 客服类应用把 TTL 调到 `1h`，观察命中率曲线。
4. **非实时任务挪到 Batch**：盘点所有"等几小时无所谓"的任务（打标、评估、摘要、批量翻译），改写成 JSONL 提 Batch。
5. **挂 LiteLLM 语义缓存**：`pip install litellm`，开 Redis 缓存，base_url 指过去，零业务改动开始命中。

---

## 参考来源

- Anthropic Prompt Caching 官方文档：https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching
- Anthropic Message Batches 官方文档：https://docs.anthropic.com/en/docs/build-with-claude/batch-processing
- OpenAI Prompt Caching 说明：https://platform.openai.com/docs/guides/prompt-caching
- OpenAI Batch API 文档：https://platform.openai.com/docs/guides/batch
- LiteLLM 缓存配置：https://docs.litellm.ai/docs/caching
- GPTCache 项目：https://github.com/zilliztech/GPTCache
- Helicone（可观测+缓存）：https://www.helicone.ai/

> ⚠️ **数据说明**：本文价格为代表性数字，用于说明省钱比例的算术关系；各家最新 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 等场景全覆盖。

![51学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
