<!-- title: 输出贵五倍：三招砍掉没人盯的输出税 -->
<!-- domain: cost-hacks -->

# 账单刺客藏在输出端：你以为省钱省对了地方，其实输错方向

如果让你猜一笔 AI 账单里最烧钱的部分，十个人有九个会盯着**输入 token**——于是全网都在教你做 prompt caching、压 prompt、换 tokenizer、批处理、上小模型路由。这些都是对的，但它们全都在砍**入口**。

问题在于：**出口的价格是入口的 3 到 5 倍，而几乎没人优化它。**

以 Anthropic 2026 年 7 月官方定价为例：Claude Opus 输入 $15 / 百万 token，输出 $75 / 百万 token——**5 倍**。GPT-4o 是 4 倍，Sonnet 是 5 倍，Haiku 是 5 倍。换句话说，模型每多吐一个字给你，烧掉的钱是它读一个字的四到五倍。可你打开任何一份"省钱清单"，讲的全是怎么少喂它。

这就是本轮要拆的信息差：**输出端有三笔隐形税——废话税、重试税、无缓存税——99% 的人一笔都没拦。**下面把三笔税算给你看，再给三招直接砍掉。

---

## 一、先看清这场价格不对称：为什么优化方向错了

很多人有个错觉：既然 prompt caching 能把输入砍到 0.1 倍（Anthropic 缓存命中只收基准输入价的 10%），那我的账单不就下来了？

**错。缓存只摊薄输入端，输出端是纯线性叠加的。**

看这张图就懂了——左边输入端可以被缓存一层层摊平，右边输出端每一轮都是全新生成、全新计价，没有任何缓存能救你：

```mermaid
graph LR
    subgraph IN["输入端：有缓存可摊薄"]
        I1["第1轮输入<br/>全价 1x"] --> I2["第2轮重复输入<br/>缓存命中 0.1x"]
        I2 --> I3["第3轮重复输入<br/>缓存命中 0.1x"]
    end
    subgraph OUT["输出端：无缓存 纯线性叠加"]
        O1["第1轮输出<br/>全价 5x"] --> O2["第2轮新输出<br/>全价 5x"]
        O2 --> O3["第3轮新输出<br/>全价 5x"]
    end
    I3 -. 缓存帮不到输出 .-> O3
    style OUT fill:#fff0f0,stroke:#cc3333
    style IN fill:#f0fff0,stroke:#33aa33
```

真实场景里这有多贵？一个多轮 agent，假设每轮平均输出 800 token。在 Sonnet（$15/M 输出）上跑 10 轮，光输出就是 `10 × 800 × $15/1M = $0.12`，看着不多——但放大到一天 100 万次调用，就是 **$12 万/天**的纯输出成本，而其中相当一部分是**废话、重试、重复重述**。这三笔钱，没有任何 caching 能帮你省。

下面三招，专门砍这三笔。

---

## 二、第一招：砍废话税——模型默认"啰嗦"，是你没给它限高

### 现象
几乎所有大模型出厂都被微调成"礼貌、详尽、爱解释"。你问一个 Yes/No，它给你三段铺垫加一句总结。**它每多写一个字，你按 5 倍价付费。**

### 账怎么算
假设一个分类任务，理想输出是 `{"label":"positive"}`（约 6 token），但默认模型给你：

> "根据您提供的文本内容，经过仔细分析情感倾向，可以判定该评论的整体情感为积极正面……" + JSON（约 150 token）。

25 倍的输出差距，按 5 倍单价算，**等价于 125 倍的输入成本被白白烧掉**。在 GPT-4o-mini 上这点钱不算什么，但同样逻辑搬到 GPT-4o / Sonnet / Opus 上，规模一上来就是真金白银。

### 操作步骤（立刻可做）
1. **硬顶 `max_tokens`**：每次调用都设。分类任务设 `max_tokens=50`，摘要设 300。这是物理上限，模型再啰嗦也烧不到上限之外。
2. **系统提示里写死格式**：`"只输出 JSON，不要解释，不要前后缀，不要 markdown 代码块。"`——这三个"不要"能直接砍掉 30–50% 的废话 token。
3. **禁止寒暄词**：`"不要说'好的'、'当然'、'让我来'。"` 这类开场白在中文任务里特别费钱，且经常是无效输出。
4. **要数字不要叙述**：`"用逗号分隔，不要换行，不要标题。"`

### 效果
笔者实测一个文档抽取 pipeline，仅靠"设 `max_tokens` + 禁寒暄 + 强制纯 JSON"三件套，**输出 token 平均下降 40–55%**。按输出占大头算，整张账单直接掉两成以上。

---

## 三、第二招：砍重试税——Structured Outputs 让你一次成功，告别"解析失败重来"

这一笔是**最隐蔽、也最冤**的输出税，因为它花的是"完全不该花"的钱。

### 现象
你让模型吐 JSON，然后代码里 `json.loads()`。结果模型偶尔漏个引号、多段 markdown、或者编了个字段名，解析抛异常，你怎么办？**最常见的偷懒做法：catch 异常，把同一个 prompt 再发一遍，最多重试 3 次。**

每一次重试，你都在为**一次完整输入 + 一次完整输出**二次买单。而输出是 5 倍价。

### 重试链路有多贵，看这张图

```mermaid
flowchart TD
    R0["请求"] --> R1{"json.loads<br/>校验"}
    R1 -->|解析失败| R2["重试 第2次<br/>付费：输入+输出"]
    R2 --> R3{"校验"}
    R3 -->|又失败| R4["重试 第3次<br/>再付：输入+输出"]
    R4 --> R5["成功"]
    R5 --> R6["实际付费 = 3×输入 + 3×输出<br/>输出按 5x 计费是大头"]
    R1 -->|原生 Structured Outputs| R7["强制贴合 JSON Schema<br/>一次成功"]
    R7 --> R8["付费 = 1×输入 + 1×输出<br/>零重试"]
    style R6 fill:#ffd0d0,stroke:#cc3333
    style R8 fill:#d0ffd0,stroke:#33aa33
```

算笔账：假设某接口 5% 的请求会格式失败、平均重试到第 2.5 次才成功。这意味着**那 5% 的流量实际消耗了 12.5% 的输出 token**。如果你的接口里有 10% 是 JSON 任务，整体输出账单里有 **1.25% 是纯重试税**——更恶心的是，它带来的是**零业务价值**，纯粹在为模型的格式不稳定买单。

### 操作步骤：用原生 Structured Outputs 根除它
1. **OpenAI**：用 `response_format` + `json_schema`（Structured Outputs 模式，非旧的 `json_object`）。它在解码层**强制**输出贴合 schema，理论上不会格式失败。文档：`platform.openai.com/docs/guides/structured-outputs`。
2. **Anthropic**：Claude 原生不强制 JSON，但社区标准做法是 **Tool Use（function calling）当结构化出口**——让模型把结构化数据填进 tool 的入参里，参数有 schema 校验，失败率远低于裸 JSON。文档：`docs.anthropic.com/en/docs/build-with-claude/tool-use`。
3. **校验失败别整体重试**：如果还用裸 JSON，至少做到**局部修复**——把上一次的错误信息塞回去做 `repair`，而不是把整段 prompt 原样重发。
4. **用小模型做格式守门员**：大模型出原始结果，扔给 `gpt-4o-mini` / Haiku 做格式化和校验。格式化是简单活，用 5 倍价的 Opus 做就是浪费。

### 效果
切到原生 Structured Outputs 后，JSON 任务的**重试率从 5–15% 降到接近 0**。对于结构化抽取为主的产品，这是直接砍掉一整块输出税，且**顺带提升了稳定性**——这是个少见的"省钱的同时还变好用"的操作。

---

## 四、第三招：砍无缓存税——把输出当结果缓存起来，别让模型重复劳动

这是三招里**最反直觉**的一笔。

### 现象
prompt caching 厉害吧？可它**只缓存输入**。模型生成的每一次输出，都是全新算的、全新计费的，**输出端没有任何官方缓存机制**。

于是有个反常识的结论：**你做的"多轮重述"——让模型每一轮把前面的结论复述一遍——是在用 5 倍价的输出 token，去重复生产你已经有的内容。** 这在 agent 链路里极其常见：A agent 产出的结论，B agent 又"总结"一遍，C agent 再"确认"一遍，每一遍都是新输出、新计费。

### 操作步骤
1. **结果缓存（exact + 语义）**：对确定性查询（如"提取这份合同的第3条"），把 `(输入hash → 结构化结果)` 存进 Redis。命中即返回，零模型调用。对相近查询，上语义缓存（把 query 向量化，相似度 >0.95 直接复用上次输出）。
2. **别让 agent 重述，让它引用**：把上一步的结构化结果**直接作为下一轮的输入**（走输入端、走缓存、走 0.1 倍价），而不是让下一个模型"基于上文重新组织一遍"（走输出端、走 5 倍价）。**把信息流动从"输出→输出"改成"输出→输入"，这是省钱的物理本质。**
3. **多轮对话里别全量重写历史**：很多框架默认每轮把整段历史塞进 prompt 让模型"回顾"——这部分历史复述属于输出端浪费。改成**摘要 + 引用 ID** 的结构，让模型只产增量。

### 一个反直觉的对比
| 做法 | 信息流 | 走的计价端 | 相对成本 |
|---|---|---|---|
| Agent B 复述 Agent A 结论 | 输出→输出 | 全部走输出 5x | 1.0 |
| 把 A 结论拼进 B 的 prompt | 输出→输入 | A 走输出，B 端命中缓存 0.1x | ~0.3 |

同样一条信息，**换一个流向，成本差 3 倍以上。**

---

## 五、把三笔税摆在一起：信息差对照表

| 维度 | 大多数人在做的（被收割） | 没人在做的（信息差） |
|---|---|---|
| 优化重点 | 死磕输入：caching、tokenizer、批处理 | 同等重视输出端（贵 3–5 倍） |
| 默认输出 | 接受模型啰嗦，让它自由发挥 | `max_tokens` 硬顶 + 禁寒暄 + 强制纯格式 |
| JSON 任务 | 正则解析、失败重试 N 次 | 原生 Structured Outputs / Tool Use，零重试 |
| agent 链路 | 每个节点重新"总结"上文 | 结论走输入端引用，复用缓存 0.1x |
| 多轮历史 | 全量塞回让模型"回顾" | 摘要 + ID 引用，只产增量 |
| 缓存认知 | 以为 caching 能省一切 | 知道缓存只摊输入，输出靠结果缓存 |

---

## 六、行动指南：今天就做的五件事

1. **跑一次 token 归因**：拉最近 7 天的账单，把"输入 vs 输出"金额拆开看。如果输出占比超过 60%（多轮/agent 产品通常会），恭喜你找到了最大油矿。
2. **给所有调用加 `max_tokens`**：全仓库 grep 一次 API 调用，没设上限的全部补上，按任务类型给合理值。
3. **JSON 任务全切 Structured Outputs**：OpenAI 上 `json_schema` 模式，Claude 上 Tool Use。先在一个高频接口上跑 A/B，看重试率变化。
4. **审计 agent 链路的"重述"环节**：找出哪些节点在重复生产已有信息，改成结论走输入引用。
5. **给高频确定性查询上结果缓存**：从 exact hash 开始，简单有效，再视情况上语义缓存。

> 一个经验阈值：纯聊天/创意类产品，输出税占比约 40–50%；**结构化抽取、agent 自动化、文档处理类产品，输出税能占到 70% 以上**——这类产品的成本优化战场，根本不在输入端。

---

## 参考来源

- Anthropic 官方定价与 Prompt Caching（cache write +25%、read 0.1×、仅输入端）：https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching
- OpenAI Structured Outputs 指南（JSON Schema 强制、零重试）：https://platform.openai.com/docs/guides/structured-outputs
- OpenAI Reasoning 模型与 reasoning_effort 参数（控制隐藏输出 token）：https://platform.openai.com/docs/guides/reasoning
- Anthropic Tool Use（结构化输出替代方案）：https://docs.anthropic.com/en/docs/build-with-claude/tool-use
- 各厂商最新 API 定价（截至 2026 年 7 月，以官网为准）：https://openai.com/api/pricing/ 与 https://www.anthropic.com/pricing

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