<!-- title: API默认不打折：三把开关砍掉八成账 -->
<!-- domain: cost-hacks -->

## 你每调一次 API，可能都付了原价

90% 的开发者调大模型 API 的姿势是：把 system prompt、知识库、few-shot 示例一股脑塞进去，然后一个请求一个请求地同步等结果，全用最贵的旗舰模型扛。这种"老实人"用法，相当于去超市永远按标价结账，从不用会员卡、从不参加打折区、从不买临期商品。

但各家 API 厂商其实早就在后台埋好了三把"折扣开关"——**Prompt Caching（上下文缓存）、Batch API（批量异步）、Model Routing（模型路由）**。它们不藏在灰色地带，就写在官方定价页里，但因为默认关闭、需要改代码，绝大多数人从没拧开过。今天这篇就把这三把开关的折扣力度、适用场景、真实账单算清楚。叠加使用，一个普通 RAG 应用月账单从 6000 美元砍到 1000 美元以内是完全可复现的事。

```mermaid
flowchart TD
    A[原始请求流<br/>每次全价·同步·旗舰模型] --> B{成本优化三开关}

    B --> C[开关一: Prompt Caching<br/>重复上下文缓存读 1折]
    B --> D[开关二: Batch API<br/>非实时任务 5折]
    B --> E[开关三: Model Routing<br/>简单任务下放小模型]

    C --> F[缓存命中部分<br/>输入价 ×0.1]
    D --> G[异步批处理<br/>输入+输出 ×0.5]
    E --> H[路由分类器<br/>60%流量给Haiku]

    F --> I[叠加后总账单<br/>约砍掉 80~90%]
    G --> I
    H --> I

    style C fill:#d4edda,stroke:#28a745
    style D fill:#cce5ff,stroke:#007bff
    style E fill:#fff3cd,stroke:#ffc107
    style I fill:#f8d7da,stroke:#dc3545
```

---

## 开关一：Prompt Caching——你那 5 万字的 system prompt 不该每次都重算

这是三把开关里**折扣最狠、最被忽视**的一把。原理很简单：很多应用的输入里有一大段是固定不变的——几千上万 token 的角色设定、工具说明、检索回来的知识库片段、few-shot 例子。每次请求都把这段重新喂给模型、重新算一遍 attention 的 KV cache，纯属烧钱。

Prompt Caching 让你把这段固定前缀"缓存"在厂商那，缓存命中的部分按远低于正常输入价结算：

| 厂商 | 缓存读折扣 | 缓存写溢价 | 最小缓存门槛 | TTL |
|------|-----------|-----------|-------------|-----|
| **Anthropic Claude** | 输入价 **×0.1**（约 9 折 off） | 输入价 ×1.25 | 通常 ≥1024 token | 5 分钟 / 可选 1 小时 |
| **OpenAI** | 输入价 **×0.5**（5 折 off） | 无溢价，按正常价 | ≥1024 token | 自动，约 5~10 分钟 |
| **DeepSeek** | 命中价极低（约 0.1 元/百万） | 写入价略高 | 无硬门槛 | 自动 |
| **Google Gemini** | context caching 显式缓存 | 按存储时长另收 | 较大上下文 | 可自定义小时级 |

关键认知差在这里：很多人以为"缓存"只是个加速优化，**其实它是定价层的折扣**。Anthropic 命中缓存那部分只收 1 折，OpenAI 收 5 折。

**怎么开**：Anthropic 需要在 API 请求里手动打 `cache_control` 标记，把前缀分段标记为可缓存；OpenAI 是**全自动**的，超过 1024 token 的相同前缀会自动命中，无需改代码（这也是很多人根本没意识到自己已经被打了 5 折的原因）。DeepSeek、Gemini 也各有自动/显式两种模式。

**谁最该用**：RAG 应用、带超长 system prompt 的 Agent、固定工具列表的 function calling、跑评测集（同一批 prompt 反复跑）。这些场景的固定前缀占比往往超过 80%，缓存命中率极高，省的就是这 80% 的原价。

---

## 开关二：Batch API——不急的活，异步排队能直接打对折

第二把开关更直接粗暴：**只要你的任务不要求秒回，提交给 Batch API 就直接 5 折**。

很多批量场景本质就不是实时的——给 10 万条客服记录分类、给一批商品写描述、跑一个评测数据集、给一堆文档做摘要总结。这些活你明明可以丢进队列过夜跑，却偏偏同步阻塞着调，白白多付一倍。

| 厂商 | 折扣 | 完成时限 | 单批上限 | 格式 |
|------|------|---------|---------|------|
| **OpenAI Batch** | **50% off** | 24 小时内 | 单文件可上万请求 | JSONL |
| **Anthropic Message Batches** | **50% off** | 24 小时内 | 单批最高 10 万请求 / 256MB | JSONL |
| **Google Gemini Batch** | 折扣类似 | 24 小时 | 大批量 | JSONL |

机制统一：你把成百上千个请求写成一个 JSONL 文件上传，厂商在 24 小时窗口内异步处理完，结果再下载下来，全程按 5 折计费。附带的好处还有：**并发/速率限制（rate limit）比实时接口宽松得多**，不用跟实时流量抢额度。

**怎么用**：写个脚本把任务拼成 JSONL，调用上传接口拿到 `batch_id`，过几小时轮询状态、下载结果文件即可。门槛比想象中低——很多场景从"同步循环调 10 万次"改成"组装一个文件传一次"，代码反而更简单。

**谁最该用**：评测基准跑分、大批量数据标注/分类、内容批量生成、日志/文档批量摘要、embedding 批量向量化（注意：向量化本身是另一个省 token 的坑，这里别混淆）。

---

## 开关三：Model Routing——简单问题不该请 GPT-5/Claude Opus 来回答

第三把开关讲的是**流量分配**。一个真实数据：绝大多数客服问答、意图识别、简单分类、格式化提取，用最便宜的 Haiku/mini 级模型就够了，质量损失几乎察觉不到。但很多人图省事，全量请求都打给旗舰模型，等于用大炮打蚊子，且按蚊子数量收费。

Model Routing 的核心是**加一个分类器（router）**，判断每个请求的难度，简单的下放给小模型，复杂的才升级给大模型。学界和工业界已经有一套成熟开源工具：

| 工具 | 类型 | 核心能力 |
|------|------|---------|
| **RouteLLM**（lm-sys） | 开源路由器 | 训练好的 router 在强/弱模型间路由，论文实测**同质量下成本降约 2 倍** |
| **LiteLLM**（BerriAI） | 开源代理 | 100+ 厂商统一 API、自动 fallback、retry、按 key 分配 |
| **Portkey** | 商业网关 | 路由 + 缓存 + 负载均衡 + 可观测 |
| **Cloudflare AI Gateway** | 托管网关 | 语义缓存、限流、跨厂商分析 |
| **OpenRouter** | 统一 API | 一个 key 路由到几乎所有模型，按需挑便宜档 |

几种典型路由策略：

- **级联（cascade）**：先让小模型答，置信度低再升级给大模型。
- **分类器路由**：用轻量模型判断 query 难度，分流。
- **语义缓存（semantic cache）**：相似问题直接返回历史答案，连模型都不调用——这是省到极致的玩法。
- **时间路由**：闲时用大模型精修，忙时下放小模型控延迟和成本。

RouteLLM 团队的研究结论值得记住：在保持与旗舰模型相当质量的前提下，**最高能把一半以上的流量路由到便宜模型**，整体成本近乎腰斩。

---

## 真实账单：三把开关叠加能省多少

光说折扣太抽象，用一个典型的 RAG + 批处理场景算笔账（按 Claude Sonnet 量级，输入 $3/百万 token、输出 $15/百万 token 估算）。

**场景设定**：一个企业知识库问答应用，每月 10 万次调用，每次请求固定前缀 2 万 token（system + 检索片段 + few-shot），平均输出 300 token。

```mermaid
flowchart LR
    subgraph 优化前["优化前: 老实人用法"]
        A1[全量同步] --> A2[全旗舰模型] --> A3[前缀每次重算]
    end
    subgraph 优化后["优化后: 三开关全开"]
        B1[批处理5折] --> B2[缓存读1折] --> B3[60%下放Haiku]
    end
    A3 --> Cost1[月账单 ≈ 6075美元]
    B3 --> Cost2[月账单 ≈ 900美元]
    style Cost1 fill:#f8d7da,stroke:#dc3545
    style Cost2 fill:#d4edda,stroke:#28a745
```

逐项拆解：

**优化前（全价、同步、旗舰）**
- 输入：2 万 × 10 万 = 20 亿 token = 2000 百万 × $3 = **$6000**
- 输出：300 × 10 万 = 3000 万 token = 30 百万 × $15 = **$450**
- 合计：**约 $6450/月**

**开关一单开（Prompt Caching，假设 85% 命中）**
- 缓存读：2000 × 0.85 × $0.3 = **$510**
- 缓存写：2000 × 0.15 × $3.75 = **$1125**
- 输出不变：$450
- 合计：**约 $2085/月** → 单这一把就砍掉 67%

**开关一+二叠加（再加 Batch，前提是这批活可异步）**
- 输入侧再打 5 折：$1635 × 0.5 ≈ **$818**
- 输出也 5 折：$225
- 合计：**约 $1043/月**

**开关一+二+三全开（60% 流量下放 Haiku，$0.25/$1.25）**
- Haiku 部分（60%）：输入读为主 + 输出，量级大幅下降
- Sonnet 部分（40%）：仅难题走旗舰
- 合计：**约 $900~1100/月**

**结论**：从 $6450 砍到 $1000 出头，**降幅约 83%**，且用户侧几乎无感知（缓存命中是加速、批处理是过夜跑、路由只在难题上才动用旗舰质量）。这张账单就是这三把开关的全部价值。

---

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

| 维度 | 多数人的认知（贵） | 信息差用户（省） |
|------|------------------|-----------------|
| 重复前缀 | 每次重新发送、全价计费 | 打 `cache_control`，命中 1 折 |
| 批量任务 | for 循环同步调，实时全价 | 攒成 JSONL 走 Batch，直接 5 折 |
| 任务难度 | 全部打给 Opus/GPT-5 | router 分流，简单题下放 Haiku |
| 速率限制 | 实时额度被卡脖子 | Batch 享有更宽松的额度 |
| 相似问题 | 每个都重新调模型 | 语义缓存命中，零调用返回 |
| 账单构成 | 只看总金额 | 拆出"缓存读/写/批处理/路由"占比 |

---

## 行动指南：今晚就能动手的三步

1. **先查缓存命中率**。打开你的 API provider 后台的 usage 明细，看有没有 cache_read_input_tokens 这一列。如果为 0，说明你完全没用上缓存。Anthropic 用户立刻在请求里给固定前缀加 `cache_control: {"type": "ephemeral"}`；OpenAI 用户超过 1024 token 的相同前缀已自动命中，确认前缀顺序稳定即可。

2. **把非实时任务切到 Batch**。盘一遍你的定时任务、批处理脚本，凡是"等几小时也没关系"的，统统改写成 JSONL 提交。一次改造，长期 5 折。重点候选：评测跑分、数据标注、批量摘要、embedding 生成。

3. **加一层路由网关**。不想自己写分类器，直接上 LiteLLM 或 RouteLLM，配规则把"意图识别/简单分类/格式化"导给 Haiku，复杂推理才升级。再用语义缓存兜底相似 query。一周内能上线，效果立竿见影。

一句话收尾：API 定价不是铁板一块，它是一张**带一堆暗开关的折扣表**。你不是没资格打折，你只是从没问过收银员"还有没有优惠"。这三把开关拧开，你的账单结构会彻底变样。

---

### 参考来源

- 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/message-batches
- OpenAI Batch API 指南：https://platform.openai.com/docs/guides/batch
- OpenAI Prompt Caching 指南：https://platform.openai.com/docs/guides/prompt-caching
- RouteLLM 开源项目（lm-sys）：https://github.com/lm-sys/RouteLLM
- LiteLLM 开源代理（BerriAI）：https://github.com/BerriAI/litellm

---
> 本文由「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)
