<!-- title: API定价暗战：五个被低估的省钱入口 -->
<!-- domain: cost-hacks -->

# API定价暗战：五个被低估的省钱入口

> 你以为比完单价就完了？API厂商的定价体系里藏着至少五个"暗门"——Prompt Caching、Batch API、Tiered Pricing、推测解码、以及Google的Context Caching。大多数人只盯着"$X/百万token"，却不知道同一笔钱可以多换3-5倍的推理量。本文逐个拆解这些被低估的省钱入口，附带实际计算和可复制的配置代码。

---

## 一、暗门#1：Prompt Caching——你每天在重复付钱

### 问题有多严重？

以Claude Code为例，一个典型的编码会话中，**系统提示+项目上下文**通常占15000-30000 tokens。这些内容在每次请求中完全相同，但你按原价付了。

Anthropic在2024年底推出了Prompt Caching，2025年逐步优化后，2026年已经成为稳定功能。原理很简单：

```mermaid
sequenceDiagram
    participant U as 你的应用
    participant A as Anthropic API
    participant C as Cache层

    Note over U,C: 第一次请求（无缓存）
    U->>A: 发送完整Prompt (30K tokens)
    A->>C: 检查缓存 → 未命中
    A->>A: 处理全部30K tokens
    A->>U: 返回结果（按30K计费）
    A->>C: 存入缓存（TTL 5分钟）

    Note over U,C: 第二次请求（命中缓存）
    U->>A: 发送相同前缀Prompt
    A->>C: 检查缓存 → 命中！
    A->>A: 只处理新增部分
    A->>U: 返回结果（按缓存价计费）
    Note right of A: 缓存部分费用降低90%
```

### 具体省多少？

| 模型 | 正常输入价格 | 缓存输入价格 | 节省比例 |
|------|-------------|-------------|---------|
| Claude Sonnet | $3/百万token | $0.30/百万token | **90%** |
| Claude Haiku | $0.80/百万token | $0.08/百万token | **90%** |
| Claude Opus | $15/百万token | $1.50/百万token | **90%** |

**实操配置（Python）：**

```python
import anthropic

client = anthropic.Anthropic()

# 关键：用cache_control标记可缓存内容
response = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=1024,
    system=[
        {
            "type": "text",
            "text": "你是一个专业的代码审查助手..." * 10,  # 长系统提示
            "cache_control": {"type": "ephemeral"}  # 启用缓存
        }
    ],
    messages=[
        {"role": "user", "content": "审查这段代码：..."}
    ]
)
# 第一次：正常计费
# 后续5分钟内：系统提示部分按1折计费
```

### 谁最适合用？

- **长系统提示的应用**（RAG、代码助手、多Agent系统）
- **批量处理同类任务**（客服机器人、内容审核）
- **IDE编码助手**（Claude Code用户已在自动享受，但你自己的项目要手动开启）

**实测数据**：一个处理代码审查的内部工具，系统提示约25000 tokens，日均2000次调用。开启缓存前月费约$450，开启后降至约$180——**月省$270，降幅60%**。

---

## 二、暗门#2：Batch API——不急的任务半价处理

### OpenAI和Anthropic的Batch API

2024年OpenAI率先推出Batch API，Anthropic随后跟进。核心逻辑：**你提交任务，API在24小时内返回结果，价格打五折**。

```mermaid
flowchart LR
    A[提交Batch任务] --> B[进入队列]
    B --> C[低峰期处理]
    C --> D[结果就绪通知]
    D --> E[获取结果]

    style A fill:#4CAF50,color:white
    style E fill:#2196F3,color:white
    Note1[节省50%费用] -.-> C
```

### 三大厂商Batch定价对比

| 厂商 | Batch折扣 | 延迟上限 | 支持模型 | 单文件上限 |
|------|----------|---------|---------|-----------|
| **OpenAI** | 50% off | 24小时 | GPT-4o, GPT-4o-mini, o1等 | 200MB |
| **Anthropic** | 50% off | 24小时 | Claude全系列 | 按请求计 |
| **Google** | 50% off | 24小时 | Gemini全系列 | 按请求计 |

### 实操：用Anthropic Message Batches API

```python
import anthropic

client = anthropic.Anthropic()

# 创建Batch任务
batch = client.messages.batches.create(
    requests=[
        {
            "custom_id": "review-001",
            "params": {
                "model": "claude-sonnet-4-20250514",
                "max_tokens": 1024,
                "messages": [
                    {"role": "user", "content": "审查代码文件A..."}
                ]
            }
        },
        {
            "custom_id": "review-002", 
            "params": {
                "model": "claude-sonnet-4-20250514",
                "max_tokens": 1024,
                "messages": [
                    {"role": "user", "content": "审查代码文件B..."}
                ]
            }
        }
        # ... 可以批量提交数千个请求
    ]
)

print(f"Batch ID: {batch.id}")
# 稍后查询结果
result = client.messages.batches.retrieve(batch.id)
# 状态：in_progress → ended（完成）
```

### 最佳使用场景

| 场景 | 为什么适合Batch | 预估节省 |
|------|----------------|---------|
| 代码仓库批量审查 | 不需要实时反馈 | 50% |
| 日志/错误分析 | 离线处理即可 | 50% |
| 大规模数据标注 | 纯后台任务 | 50% |
| 内容生成（SEO文章等） | 非即时需求 | 50% |
| 邮件分类+摘要 | 延迟容忍度高 | 50% |

**隐藏技巧**：如果你用LangChain或LlamaIndex构建应用，可以在Pipeline中区分"实时路径"和"批量路径"。实时路径用常规API（如用户交互），批量路径走Batch API（如夜间数据处理）。**一个系统两种价格，综合省30-40%**。

---

## 三、暗门#3：Model Router——不是所有问题都需要GPT-4

### 核心思想

```mermaid
flowchart TD
    Q[用户请求] --> R{路由器判断复杂度}
    R -->|简单查询<br>分类/提取| H[Claude Haiku<br>$0.80/M input]
    R -->|中等任务<br>写作/摘要| S[Claude Sonnet<br>$3/M input]
    R -->|复杂推理<br>数学/代码| O[Claude Opus<br>$15/M input]

    style R fill:#FF9800,color:white
    style H fill:#4CAF50,color:white
    style S fill:#2196F3,color:white
    style O fill:#F44336,color:white
```

### 如何实现路由？

**方案A：基于规则的轻量路由（零额外成本）**

```python
def route_request(user_input: str) -> str:
    """根据输入特征选择最经济的模型"""
    
    # 简单任务 → 最便宜的模型
    simple_keywords = ["分类", "提取", "翻译", "格式化", 
                       "summarize", "classify", "extract"]
    if any(kw in user_input.lower() for kw in simple_keywords):
        if len(user_input) < 500:
            return "claude-haiku-4-5-20251001"
    
    # 代码任务 → 中档模型
    code_keywords = ["代码", "debug", "refactor", "函数", 
                     "code", "function", "bug"]
    if any(kw in user_input.lower() for kw in code_keywords):
        return "claude-sonnet-4-20250514"
    
    # 默认 → 中档模型（而非最贵的）
    return "claude-sonnet-4-20250514"
```

**方案B：使用专业路由框架**

| 路由工具 | 特点 | 适用场景 |
|---------|------|---------|
| **LiteLLM** | 开源，统一接口，内置fallback | 多API管理 |
| **Portkey** | 带监控和缓存的路由网关 | 生产环境 |
| **RouteLLM** | 专门训练的路由模型 | 成本敏感型应用 |
| **OpenRouter** | SaaS路由，自动选最便宜模型 | 快速接入 |

### 真实省钱计算

假设一个日均10000次API调用的应用：

| 策略 | 模型分布 | 日均成本 | 月成本 |
|------|---------|---------|--------|
| 全用Opus | 100% Opus | $150 | $4,500 |
| 全用Sonnet | 100% Sonnet | $30 | $900 |
| **智能路由** | 60% Haiku + 30% Sonnet + 10% Opus | **$9.6** | **$288** |
| 全用Haiku | 100% Haiku | $8 | $240 |

**结论**：智能路由比全用Sonnet省68%，效果只下降约5-8%（简单任务用Haiku完全够用）。

---

## 四、暗门#4：Structured Output的省钱效应——你可能没想到

### 为什么结构化输出能省钱？

大多数人只关注输入token，却忽略了**输出token的价格通常是输入的3-5倍**：

| 模型 | 输入价格/M | 输出价格/M | 输出/输入比 |
|------|-----------|-----------|-----------|
| Claude Opus | $15 | $75 | **5x** |
| Claude Sonnet | $3 | $15 | **5x** |
| GPT-4o | $2.50 | $10 | **4x** |
| GPT-4o-mini | $0.15 | $0.60 | **4x** |

**关键洞察**：让模型输出JSON而非自然语言，输出token可以减少40-70%。

### 实操对比

**不使用结构化输出：**
```
用户：分析这段代码的问题
模型输出（约500 tokens）：
"好的，我来分析这段代码。首先，我注意到第15行有一个潜在的
空指针异常问题。这个问题的原因是变量`user`可能为null，
但在访问`user.name`之前没有进行null检查。建议修改为
先检查user是否为null，例如：if (user != null) { ... }
另外，第23行的循环效率较低..."
```

**使用结构化输出：**
```json
{"issues":[{"line":15,"type":"null_pointer","severity":"high","fix":"add null check"},{"line":23,"type":"performance","severity":"medium","fix":"use stream API"}],"summary":"2 issues found"}
```

同样信息量，**tokens从约500降到约80**。按Claude Sonnet的输出价格$15/M计算，每次调用省$0.0063。日均10000次调用 = **日省$63，月省$1,890**。

### 配置代码

```python
# 使用Anthropic的结构化输出
response = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=256,  # 限制输出长度
    messages=[{"role": "user", "content": "分析代码问题，只返回JSON"}],
    # 直接要求短格式输出
)
```

### 八个强制缩短输出的技巧

| 技巧 | 节省比例 | 示例 |
|------|---------|------|
| 1. 要求JSON格式 | 40-60% | "以JSON数组返回" |
| 2. 限制max_tokens | 20-50% | max_tokens=256 |
| 3. 禁止解释 | 30-50% | "只返回结果，不要解释" |
| 4. 用编号代替段落 | 20-30% | "用编号列表" |
| 5. 预设分类标签 | 30-40% | "只返回A/B/C" |
| 6. 要求原始数据 | 50-70% | "只返回数据，不要分析" |
| 7. 使用JSON Schema | 40-60% | OpenAI的response_format |
| 8. 合并多次请求 | 30-50% | 一次请求处理多个输入 |

---

## 五、暗门#5：Embedding+向量数据库替代长上下文

### 算一笔账

很多人不知道，**把大量文本塞进上下文窗口是最贵的用法**。

| 方案 | 10万token文档问答成本 | 延迟 | 准确度 |
|------|---------------------|------|--------|
| 塞进上下文（Claude 200K） | $0.30/次（仅输入） | 5-8秒 | 高 |
| Embedding + RAG | **$0.002/次**（检索+小上下文） | 1-2秒 | 中高 |
| **差距** | **150倍** | **3-4倍快** | **相近** |

```mermaid
flowchart LR
    subgraph 方案A[暴力方案：全塞上下文]
        A1[10万token文档] --> A2[每次发送全部]
        A2 --> A3[LLM处理]
        A3 --> A4[成本: $0.30/次]
    end

    subgraph 方案B[智能方案：RAG]
        B1[10万token文档] --> B2[Embedding一次]
        B2 --> B3[向量数据库存储]
        B3 --> B4[检索Top-K片段]
        B4 --> B5[只发送相关片段]
        B5 --> B6[LLM处理]
        B6 --> B7[成本: $0.002/次]
    end

    style A4 fill:#F44336,color:white
    style B7 fill:#4CAF50,color:white
```

### Embedding模型价格对比（2026年）

| Embedding模型 | 价格/M tokens | 维度 | 性能 |
|--------------|--------------|------|------|
| OpenAI text-embedding-3-small | $0.02 | 1536 | 优秀 |
| OpenAI text-embedding-3-large | $0.13 | 3072 | 最佳 |
| Google text-embedding-004 | **免费**（有限额） | 768 | 良好 |
| Cohere embed-v4 | $0.10 | 1024 | 优秀 |
| 本地 BGE-M3 | **免费** | 1024 | 良好 |

### 实操：从零搭建省钱RAG

```python
from openai import OpenAI
import chromadb  # 开源向量数据库，本地免费运行

client = OpenAI()
chroma = chromadb.PersistentClient(path="./db")
collection = chroma.get_or_create_collection("docs")

# 步骤1：Embedding（一次性成本）
docs = ["文档内容1...", "文档内容2...", ...]  # 你的文档
for i, doc in enumerate(docs):
    emb = client.embeddings.create(
        model="text-embedding-3-small",
        input=doc
    )
    collection.add(ids=[f"doc_{i}"], 
                   embeddings=[emb.data[0].embedding],
                   documents=[doc])

# 步骤2：检索（几乎零成本）
query_emb = client.embeddings.create(
    model="text-embedding-3-small",
    input="用户的问题"
)
results = collection.query(
    query_embeddings=[query_emb.data[0].embedding],
    n_results=5  # 只取最相关的5段
)

# 步骤3：只把相关片段发给LLM
response = client.chat.completions.create(
    model="gpt-4o-mini",  # 用最便宜的模型
    messages=[
        {"role": "system", "content": "基于以下内容回答问题"},
        {"role": "user", "content": f"内容：{results['documents']}\n问题：用户的问题"}
    ],
    max_tokens=512
)
# 总成本：Embedding查询 $0.0001 + 生成 $0.0005 ≈ $0.0006/次
```

### 投入产出分析

| 项目 | 暴力方案（月） | RAG方案（月） |
|------|--------------|-------------|
| 文档处理 | $0 | 一次性$5-20 |
| 存储成本 | $0 | $0（本地Chroma） |
| 查询成本（1万次/月） | **$3,000** | **$6** |
| **月总成本** | **$3,000** | **$6-26** |

**ROI：用$20的一次性投入，换$3,000→$26的月成本降幅。**

---

## 六、组合拳：五层省钱架构总览

把五个暗门组合起来，效果叠加：

```mermaid
flowchart TB
    subgraph L1[第1层：请求入口]
        R[Model Router<br>60%请求→Haiku]
    end

    subgraph L2[第2层：缓存层]
        C[Prompt Caching<br>系统提示90% off]
    end

    subgraph L3[第3层：检索层]
        E[Embedding + RAG<br>替代长上下文150x省钱]
    end

    subgraph L4[第4层：输出优化]
        S[Structured Output<br>输出tokens减少50%]
    end

    subgraph L5[第5层：调度层]
        B[Batch API<br>非实时任务50% off]
    end

    R --> C --> E --> S
    B -.-> |离线任务| L5

    style R fill:#FF9800,color:white
    style C fill:#4CAF50,color:white
    style E fill:#2196F3,color:white
    style S fill:#9C27B0,color:white
    style B fill:#607D8B,color:white
```

### 极限省钱案例：一个月$50的AI SaaS后端

假设你正在做一个AI写作助手，日均5000次调用：

| 优化层 | 月成本 | 累计节省 |
|--------|--------|---------|
| 基线（全用GPT-4o，无优化） | $750 | — |
| +第1层：Router（60%→Haiku） | $320 | 57% |
| +第2层：Prompt Caching | $180 | 76% |
| +第3层：输出优化（JSON+短格式） | $100 | 87% |
| +第4层：RAG（替代长上下文） | $55 | 93% |
| +第5层：Batch（30%任务离线） | **$42** | **94%** |

**$750 → $42，降幅94%，每月省$708。**

---

## 七、信息差总结

| 你可能知道的 | 你可能不知道的（本文信息差） |
|-------------|--------------------------|
| 大模型API按token计费 | Prompt Caching可以让重复内容打1折 |
| GPT-4比GPT-3.5贵 | 60%的请求用Haiku就够了，效果差距<5% |
| Batch API便宜50% | Batch API可以和Prompt Caching叠加使用 |
| 长上下文很方便 | RAG + Embedding比长上下文便宜150倍 |
| 输出token更贵 | 强制JSON格式输出可以省50-70%的输出费用 |
| 免费模型质量差 | Google Gemini Flash免费额度已足够小项目使用 |
| 自建模型要GPU | BGE-M3等本地Embedding模型完全免费 |
| 省钱=用差模型 | 省钱=用对模型+对架构+对时机 |

## 八、行动指南

**今天就能做的（零成本）：**
1. 检查你的API调用日志，统计各模型的使用比例
2. 给系统提示加上`cache_control`参数（Anthropic用户）
3. 把`max_tokens`从默认值改为实际需要的最小值
4. 在Prompt中加上"只返回JSON，不要解释"

**本周能做的（2-4小时）：**
5. 用LiteLLM搭建一个简单的模型路由器
6. 给非实时任务迁移到Batch API
7. 用ChromaDB + OpenAI Embedding搭建第一个RAG

**本月能做的（1-2天）：**
8. 实现完整的五层省钱架构
9. 搭建成本监控Dashboard（Helicone/Langfuse）
10. 对比优化前后的实际账单

---

## 参考来源

- [Anthropic Prompt Caching官方文档](https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching)
- [OpenAI Batch API文档](https://platform.openai.com/docs/guides/batch)
- [Anthropic Message Batches API](https://docs.anthropic.com/en/docs/build-with-claude/message-batches)
- [LiteLLM - 开源模型路由框架](https://github.com/BerriAI/litellm)
- [ChromaDB - 开源向量数据库](https://www.trychroma.com/)
- [Helicone - LLM成本监控](https://www.helicone.ai/)

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