把成本预测算清楚,先把”输入/输出 token 各按多少钱计费”区分开。Token 是大模型处理文本的最小单位,1 个 token 大约对应 3-4 个英文字符或 1 个中文字;输入 token 是你发给模型的内容(system prompt、上下文、对话历史),输出 token 是模型实际生成的回答。绝大多数商业 API(如 OpenAI、Anthropic、Google)都把输出 token 单价定在输入 token 的 3-5 倍——根本原因是输出要逐 token 自回归生成,每一步都要跑一次完整的前向计算。团队在搭建知识库问答时,最初按”消息长度=成本”做预算,结果月末账单比预估多出 2 倍多;查账才发现,问题不是输入 token,而是模型给出的长篇解释把输出 token 顶到了预算外。理解这个差异,是把大模型应用从”烧钱”做成”可预测成本”的第一步。
一、Token 到底是什么、长什么样
主流 tokenizer(如 BPE、WordPiece、SentencePiece)会把文本切成子词单元。”ChatGPT is amazing!” 在 GPT 风格的 BPE 下会被切成 ["Chat", "G", "PT", " is", " amazing", "!"] 共 6 个 token;中文因字符级切分更细,1 个汉字常对应 1-2 个 token。不同模型的 tokenizer 不可互换——同一段中文在 GPT、Claude、Gemini 上的 token 数可能差 20%。
| 文本类型 | 粗略 token/字 比例 | 含义 |
|---|---|---|
| 英文 | 1 token ≈ 0.75 个英文单词 | BPE 切子词 |
| 中文 | 1 token ≈ 1-2 个汉字 | 字符级粒度较细 |
| 代码(Python) | 1 token ≈ 4-6 字符 | 关键字与符号密集 |
| JSON / 结构化数据 | 1 token ≈ 3-4 字符 | 标点和引号占多 |
计费上,所有主流厂商都按”每百万 token 单价”报价,输入、输出、缓存命中分别标价。把业务请求的”输入 token 数 + 输出 token 数 × 倍率”算清楚,基本能预测单次成本。
二、输入 / 输出计费的差异与原理
计费差异不是市场策略,而是计算成本差异。输入 token 是一次性前向并行处理(一次吃下整段上下文),输出 token 则是逐 token 自回归——每生成一个新 token 都把之前所有 token 重新跑一次前向。序列越长,输出成本越接近”输入 × 序列长度”的平方级增长。
下面这张表汇集了 2025 年主流模型在输入、输出、缓存命中三个维度的报价(每百万 token,美元):
| 模型 | 输入 | 输出 | 缓存读取 | 缓存写入 |
|---|---|---|---|---|
| GPT-4o | 2.50 | 10.00 | 1.25 | — |
| GPT-4o mini | 0.15 | 0.60 | 0.075 | — |
| o1(推理档) | 15.00 | 60.00 | 7.50 | — |
| Claude Sonnet 4.5 | 3.00 | 15.00 | 0.30 | 3.75 |
| Claude Haiku 3.5 | 0.80 | 4.00 | 0.08 | 1.00 |
| Gemini 2.0 Flash | 0.10 | 0.40 | 0.025 | — |
| DeepSeek V3 | 0.27 | 1.10 | 0.07 | — |
从这张表能直接读出三件事:
- 输出普遍是输入的 3-5 倍:Sonnet 4.5 是 5 倍、GPT-4o 是 4 倍、o1 是 4 倍。
- 缓存读取单价极低:Sonnet 4.5 缓存读仅 0.30,约是标准输入价的 1/10,适合大段 system prompt 或文档前缀。
- 推理档模型单价高一个量级:o1 输出 60 美元/百万 token,复杂推理用得起就用、用不起就降档。
用 GPT-4o 算一笔具体账:1 个月跑 1 万次客服问答,每次输入 500 token、输出 300 token——输入成本 = (500 × 10,000 / 1M) × 2.50 = 12.5 美元;输出成本 = (300 × 10,000 / 1M) × 10.00 = 30 美元;总成本 42.5 美元。输出占七成。把同样的输入换成 Claude 3.5 Sonnet 3 美元 / 15 美元,总成本反而升到 60 美元——可见”输入便宜、输出贵”在比价时不能只看输入价。
三、Agent 与多轮对话里的成本放大效应
单次问答的输入/输出还算可控;进入 Agent 场景后,成本会被”循环调用 + 历史累积”迅速放大。每次 tool call 后,模型要把累积的对话历史(含工具返回值)整体作为下一轮输入再发一次;20 步的 agent run 实际输入 token 可能是单轮的 10-20 倍。估算 Agent 成本的标准做法是:单轮成本 × 期望步数 × 1.3(给重试和上下文膨胀留余量)。
下面这段用 Anthropic SDK 做 token 计数和成本预估的代码,可以直接嵌入 Agent 入口:
import anthropic
client = anthropic.Anthropic()
# 第一步:先 count_tokens,避免把超长上下文直接发出去
count = client.messages.count_tokens(
model="claude-sonnet-4-5",
messages=[{"role": "user", "content": very_long_document}],
)
print(f"input tokens = {count.input_tokens}")
# 第二步:估算单次成本(每百万 token 单价,美元)
PRICE_INPUT = 3.00
PRICE_OUTPUT = 15.00
expected_output_tokens = 400
estimated_cost = (
count.input_tokens / 1_000_000 * PRICE_INPUT
+ expected_output_tokens / 1_000_000 * PRICE_OUTPUT
)
print(f"estimated cost = ${estimated_cost:.4f}")
# 第三步:超过预算就降档或截断上下文
if estimated_cost > 0.05:
context = trim_to_budget(very_long_document, budget_tokens=2000)
注意三件事:count_tokens 与最终实际计费 token 数会有少量偏差(特殊 token、role 标签等);expected_output_tokens 只能估,最终账单以模型实际生成的 token 数为准;缓存命中后实际计费会显著低于估算。
四、几条被反复验证的省钱策略
第一个策略是”按任务难度分模型”。能用 GPT-4o mini 解决的 FAQ,就别上 Sonnet;能用 Sonnet 解决的,就别上 Opus。简单分类+路由能砍掉 40%-70% 的账单。
第二个策略是”prompt 缓存”。当 system prompt + 大段文档前缀在多次请求中复用,Anthropic 的 cache read 单价是 0.30 美元/百万 token,仅是标准输入的 1/10;OpenAI 的自动缓存对超 1024 token 的前缀也给到 50% 折扣。
第三个策略是”控制输出长度”。明确要求”用 3 句话以内回答”或”以 JSON 列表返回”,能直接把输出 token 砍掉 30%-50%,同时还让解析更确定。批量任务用 Batch API(异步、24h 返回)能再打 5 折。
到这里,Token 是什么、输入/输出计费为什么差这么多、Agent 场景怎么预估成本、降本的核心套路就讲完了。账单失控往往不是因为单次贵,而是低估了”输出 token × 多轮 × 缓存缺失”叠加后的复利。
常见问题(FAQ)
Q1:1 个 token 等于多少个汉字?
约 1-2 个汉字,具体取决于模型 tokenizer;建议用厂商自带的 count_tokens 工具精确测算。
Q2:为什么输出 token 比输入贵好几倍?
输出是逐 token 自回归生成,每一步都要重跑前向;输入是一次性并行处理,计算成本更低。
Q3:怎么把 Agent 成本算准?
按”单轮成本 × 步数 × 1.3″估,开 prompt caching 减输入,控输出长度减输出,超预算就降档或截断。