Token、输入输出与缓存------AI开发计费全解
本文面向刚开始接触 AI API 开发的同学,资料整理时间:2026-04-27。
覆盖:Token 基础 → 输入/输出计费 → 上下文窗口 → Prompt Caching → 中转站。
价格数据来源:OpenAI 官网、Anthropic 官网、第三方汇总站(2026-04 核实)。
\[toc\]
1. Token 是什么
调用 AI API 时,模型不是按"字"或"词"来处理文本的,而是按 Token(词元) 来处理。
Token 是模型分词后的最小处理单元,大致规律如下:
| 语言 | 大致换算 |
|---|---|
| 英文 | 1 个 Token ≈ 0.75 个单词,或 3-4 个字符 |
| 中文 | 1 个汉字 ≈ 1-2 个 Token(中文比英文更"贵" token) |
| 代码 | JSON / 结构化代码 token 密度高,比普通文字消耗更多 |
举例:
"Hello world" → 2 tokens
"你好,世界" → 约 5-7 tokens
{"key": "value"} → 约 6 tokens
可以用 OpenAI Tokenizer 直观感受 token 数量。
2. 输入 Token 与输出 Token
每次调用 AI API,费用由两部分组成:
总费用 = 输入 Token 数 × 输入单价 + 输出 Token 数 × 输出单价
2.1 输入 Token(Input Tokens)
你发给模型的所有内容都算输入 token,包括:
- System Prompt(系统提示词):你给模型设定的角色、规则、背景
- 历史对话记录:多轮对话中之前所有的消息
- 用户当前消息:这次你说的话
- 附带的文件/代码内容:你粘贴进去的代码、文档片段
2.2 输出 Token(Output Tokens)
模型生成并返回给你的内容,全部算输出 token。
2.3 为什么输出比输入贵?
这是很多新手困惑的点。
- 输入:模型可以并行处理所有输入 token,一次性完成,效率高
- 输出:模型必须一个 token 一个 token 地顺序生成,第 N 个 token 必须等第 N-1 个生成完才能开始,无法并行
这种"自回归生成"的特性导致输出的计算量远大于输入,所以各家厂商的输出价格普遍是输入的 3-6 倍。
2.4 主流模型最新价格(2026-04)
以下价格均为每百万 token(1M tokens)的美元价格,来源:各平台官网 2026-04 核实。
OpenAI 系列(当前主力模型)
| 模型 | 输入 | 缓存输入 | 输出 | 上下文窗口 | 备注 |
|---|---|---|---|---|---|
| GPT-5.5 | $5.00 | $0.50 | $30.00 | 270K | 旗舰,编程/专业工作 |
| GPT-5.4 | $2.50 | $0.25 | $15.00 | 270K | 性价比旗舰 |
| GPT-5.4 mini | $0.75 | $0.075 | $4.50 | 270K | 强力小模型 |
| GPT-4.1 | $2.00 | --- | $8.00 | 1M+ | 超长上下文专用 |
| GPT-4.1 Mini | $0.40 | --- | $1.60 | 1M+ | 长上下文低价 |
| GPT-4.1 Nano | $0.10 | --- | $0.40 | 1M+ | 最便宜长上下文 |
| GPT-4o | $2.50 | $1.25 | $10.00 | 128K | 老旗舰,仍广泛使用 |
| GPT-4o mini | $0.15 | --- | $0.60 | 128K | 老版低价选项 |
Anthropic Claude 系列(2026-04 最新)
| 模型 | 输入 | 输出 | 上下文窗口 | 备注 |
|---|---|---|---|---|
| Claude Opus 4.6 | $5.00 | $25.00 | 200K(1M beta) | 当前旗舰,比上代便宜 67% |
| Claude Sonnet 4.6 | $3.00 | $15.00 | 200K(1M beta) | 生产主力,性价比最高 |
| Claude Haiku 4.5 | $1.00 | $5.00 | 200K | 速度层,高并发场景 |
| Claude Haiku 3.5 | $0.80 | $4.00 | 200K | 旧版,逐步退出 |
Google Gemini 系列(2026-04)
| 模型 | 输入 | 输出 | 上下文窗口 | 备注 |
|---|---|---|---|---|
| Gemini 2.5 Pro | $1.25 | $10.00 | 1M | 强推理,长上下文 |
| Gemini 2.5 Flash | $0.30 | $2.50 | 1M | 速度快,价格低 |
| Gemini Flash-Lite | $0.10 | $0.40 | 1M | 最便宜,简单任务 |
实际开发建议:
- 能用小模型(GPT-5.4 mini / Haiku 4.5 / Flash-Lite)完成的任务,不要用旗舰模型
- 需要处理超长文档/代码库,优先考虑 GPT-4.1 系列(1M 上下文)或 Gemini 2.5
- Claude Sonnet 4.6 是目前综合性价比最高的生产级模型
3. 上下文窗口(Context Window)
3.1 什么是上下文窗口
上下文窗口是模型在一次请求中能"看到"的最大 token 数量,包括输入和输出的总和。
上下文窗口 = 输入 token + 输出 token ≤ 模型最大限制
超出限制后,模型要么报错,要么自动截断最早的内容(具体行为取决于实现方式)。
3.2 各模型上下文窗口对比
| 模型 | 上下文窗口 | 约等于 |
|---|---|---|
| GPT-4o / GPT-4o mini | 128K | 约 10 万英文单词 |
| GPT-5.4 / GPT-5.5 | 270K | 约 20 万英文单词 |
| GPT-4.1 系列 | 1M+ | 约 75 万英文单词 |
| Claude Sonnet/Opus 4.6 | 200K(1M beta) | 约 15 万英文单词 |
| Gemini 2.5 Pro/Flash | 1M | 约 75 万英文单词 |
Claude 4.6 的 1M 上下文窗口于 2026-03-13 正式 GA,不再是 beta 限制,且不收长上下文附加费。
3.3 多轮对话中的上下文累积
这是新手最容易踩的坑。
AI 本身是无状态的 ,它不记得上一次对话。每次你发消息,客户端(Claude Code、Cursor 等工具)都会把完整的历史对话一起打包发给模型。
第1轮:[system] + [user: 你好] → 少量 token
第2轮:[system] + [user: 你好] + [ai: 你好] + [user: 帮我写代码] → token 翻倍
第N轮:[system] + 所有历史 + [user: 新消息] → token 持续累积
实际影响:
- 对话越长,每次请求的费用越高
- 当历史对话超出上下文窗口,最早的内容会被丢弃,模型"忘记"早期内容
- 在 Claude Code / Cursor 等工具中,长时间的会话会越来越贵,也越来越慢
应对方法:
- 适时开启新对话(
/clear或新建会话) - 把重要背景写进 System Prompt 或规则文件(如
CLAUDE.md、.cursorrules),而不是靠对话历史传递 - 避免把大量无关代码粘贴进对话
4. Prompt Caching(提示词缓存)
4.1 缓存解决什么问题
假设你的 System Prompt 有 5000 个 token,每天调用 API 1000 次,那么光 System Prompt 就要处理 500 万 token,这部分内容每次都一模一样,却每次都要重新计算,非常浪费。
Prompt Caching 的核心思路:把不变的内容缓存起来,后续请求直接复用,跳过重复计算。
4.2 缓存的工作原理
模型处理输入时分两个阶段:
- Prefill(预填充):处理所有输入 token,构建内部的 KV 缓存(Key-Value Cache),这是计算密集的阶段
- Decode(解码):逐个生成输出 token
Prompt Caching 把第一阶段的 KV 缓存保存下来。下次请求如果前缀完全一致,直接跳过 Prefill,从缓存命中点继续,大幅节省时间和费用。
无缓存:
[system 5000 token] + [历史 3000 token] + [新消息 200 token]
→ 全部 8200 token 都要 Prefill 计算
有缓存(命中):
[system 5000 token ✓缓存命中] + [历史 3000 token ✓缓存命中] + [新消息 200 token]
→ 只需 Prefill 200 token,其余直接读缓存
4.3 各平台缓存策略对比(2026-04 最新)
| 平台 | 缓存方式 | 缓存写入价格 | 缓存读取价格 | 最小缓存长度 | 缓存有效期 |
|---|---|---|---|---|---|
| Anthropic (Claude) | 手动标记 cache_control |
5分钟TTL:原价 125% ;1小时TTL:原价 200% | 原价的 10%(省 90%) | 1024 tokens | 5分钟 或 1小时(可选) |
| OpenAI (GPT) | 自动缓存,无需配置 | 无额外写入费 | 原价的 10%(省 90%) | 1024 tokens | 自动管理,不透明 |
| Google (Gemini) | 显式 Context Caching | 按缓存存储时间计费 | 低于正常输入价 | 32K tokens | 可设置 TTL |
重要更新(2026-04):
- OpenAI 的缓存折扣已从早期的 50% 提升到 90%(与 Claude 持平),GPT-5.4 缓存输入仅 $0.25/M
- Claude 现在支持两种 TTL:5分钟(写入成本 +25%)和 1小时(写入成本 +100%),读取均为原价 10%
- Claude 4.6 的 1M 上下文 + 缓存组合,是目前处理超长文档最经济的方案之一
Claude 缓存成本回本计算:
以 5分钟 TTL 为例,写入成本是原价的 125%,读取是 10%:
第1次(写入):1.25x
第2次(读取):0.10x
第3次(读取):0.10x
...
只要命中 2 次以上,总成本就低于不缓存(1.25 + 0.10 = 1.35 < 2.00)
4.4 缓存命中的关键规则
缓存是严格前缀匹配的,从第一个 token 开始逐个比对:
✅ 能命中缓存:
请求A:[system] + [历史] + [新消息A]
请求B:[system] + [历史] + [新消息B] ← 前缀相同,命中
❌ 无法命中缓存:
请求A:[新消息A] + [system] + [历史]
请求B:[新消息B] + [system] + [历史] ← 前缀不同,无法命中
最佳实践:把稳定不变的内容放在最前面
推荐顺序:
1. System Prompt(最稳定)
2. 长文档 / 代码库上下文(较稳定)
3. Few-shot 示例(较稳定)
4. 历史对话(变化较慢)
5. 当前用户消息(每次都变)← 放最后
OpenAI vs Claude 缓存设计差异:
| 维度 | Claude | OpenAI |
|---|---|---|
| 激活方式 | 手动加 cache_control 标记 |
自动检测,无需配置 |
| 边界控制 | 精确,你决定缓存到哪里 | 自动,前缀匹配到哪里算哪里 |
| 多层缓存 | 支持,可设多个断点 | 不支持 |
| 风险 | 忘记标记则不缓存 | 前缀稍有变化就静默失效 |
4.5 Claude 手动标记缓存示例
json
{
"model": "claude-sonnet-4-6-20260301",
"system": [
{
"type": "text",
"text": "你是一个专业的代码审查助手,以下是项目的完整规范文档...[5000 token 的内容]",
"cache_control": {"type": "ephemeral"}
}
],
"messages": [
{"role": "user", "content": "帮我审查这段代码"}
]
}
加上 "cache_control": {"type": "ephemeral"} 后,该内容块及其之前的所有内容都会被缓存。
5. 中转站(API Proxy)
5.1 什么是中转站
中转站是一个部署在国内(或其他可访问地区)的代理服务,它:
-
接收你的 API 请求
-
转发给 OpenAI / Anthropic / Google 等官方接口
-
把响应返回给你
你的代码 → 中转站(国内服务器)→ OpenAI/Claude 官方 API → 返回结果
5.2 为什么需要中转站
- 网络访问:国内直连 OpenAI、Anthropic 等官方 API 不稳定或无法访问
- 统一接口:一个 API Key 同时调用多家模型(OpenAI 格式兼容 Claude、Gemini 等)
- 成本分摊:部分中转站提供比官方更低的价格(通过批量采购或汇率差)
- 简化配置 :不需要自己搭建代理,直接换个
base_url即可
5.3 中转站的计费方式
中转站通常有两种计费模式:
按 Token 计费(后付费)
- 和官方一样,用多少付多少
- 价格通常是官方的 6-8 折(汇率 + 批量折扣)
- 适合用量不稳定的场景
充值额度(预付费)
- 充值一定金额,按实际消耗扣除
- 部分平台有最低充值门槛
- 注意:中转站有跑路风险,不建议一次充太多
5.4 使用中转站的注意事项
安全风险:
- API Key 经过第三方服务器,存在泄露风险
- 选择有口碑、运营时间长的平台
- 不要把中转站 Key 和官方 Key 混用
稳定性:
- 中转站本身可能不稳定,需要有备用方案
- 关键业务建议直连官方 API(配合代理工具)
价格陷阱:
- 部分中转站宣传价格很低,但实际 token 计算方式不透明
- 注意区分"按官方比例"还是"自定义倍率"
- 确认是否支持缓存透传(有些中转站会破坏缓存机制)
5.5 如何切换到中转站
以 Python 为例,只需修改 base_url:
python
from openai import OpenAI
# 官方
client = OpenAI(api_key="sk-xxx")
# 中转站(只改 base_url 和 api_key)
client = OpenAI(
api_key="你的中转站Key",
base_url="https://你的中转站域名/v1"
)
# 其余代码完全不变
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "你好"}]
)
Claude Code、Cursor 等工具也支持自定义 base_url,在设置里修改即可。
6. 费用估算与控制
6.1 快速估算公式
费用(美元)= (输入token / 1,000,000) × 输入单价
+ (缓存命中token / 1,000,000) × 缓存单价
+ (输出token / 1,000,000) × 输出单价
示例: 用 Claude Sonnet 4.6 处理一个 2000 token 输入(其中 1800 命中缓存)、500 token 输出的请求:
= (200 / 1,000,000) × $3.00 ← 未缓存输入
+ (1800 / 1,000,000) × $0.30 ← 缓存命中(原价10%)
+ (500 / 1,000,000) × $15.00 ← 输出
= $0.0006 + $0.00054 + $0.0075
≈ $0.0086(约 0.06 元)
6.2 降低费用的核心策略
| 策略 | 效果 | 难度 |
|---|---|---|
| 用小模型处理简单任务 | 节省 80-95% | 低 |
| 启用 Prompt Caching | 节省 50-90% | 中 |
| 压缩 System Prompt | 减少固定开销 | 低 |
| 控制输出长度(max_tokens) | 避免超长输出 | 低 |
| 适时清空对话历史 | 避免上下文膨胀 | 低 |
| 批量请求(Batch API) | 节省 50%(OpenAI/Claude 均支持) | 中 |
| 选对上下文窗口大小 | 避免为用不到的窗口付费 | 低 |
6.3 设置费用告警
- OpenAI :在 platform.openai.com/usage 设置用量限制和邮件告警
- Anthropic:在 Console 设置月度预算上限
- 中转站:通常有余额告警功能,记得开启
7. 常见问题
Q:为什么我感觉 Claude Code 越用越慢、越来越贵?
A:随着对话轮数增加,每次请求携带的历史 token 越来越多。建议定期 /clear 清空上下文,或把关键信息写进 CLAUDE.md。
Q:中转站的 token 计算和官方一样吗?
A:大多数中转站按官方 token 数计算,但倍率可能不同(如 1.1× 或 0.8×)。使用前确认计费规则,也要确认是否支持缓存透传。
Q:Prompt Caching 需要我手动开启吗?
A:OpenAI 自动开启,无需配置。Claude 需要在请求中手动加 cache_control 标记。Cursor、Claude Code 等工具通常已内置处理,但效果取决于工具实现。
Q:上下文窗口越大越好吗?
A:不一定。更大的上下文意味着更高的费用,且研究表明模型在超长上下文中对"中间"内容的注意力会下降(Lost in the Middle 问题)。按需选择即可。
Q:Claude 的 1M 上下文是 beta 还是正式可用?
A:Claude 4.6 的 1M 上下文于 2026-03-13 正式 GA,不再是 beta,且不收长上下文附加费,按正常 token 价格计费。
Q:token 用完了会怎样?
A:API 调用会返回错误(如 context_length_exceeded),不会自动续费或截断(除非你的客户端做了处理)。
8. 总结速查
Token = 模型处理文本的最小单位,中文约 1-2 token/字
输入 = 你发给模型的所有内容(system + 历史 + 当前消息)
输出 = 模型生成的回复,价格是输入的 3-6 倍
上下文窗口 = 单次请求能处理的最大 token 数(输入+输出)
缓存 = 复用不变的前缀,Claude/OpenAI 均可省 90%
Claude 需手动标记,OpenAI 自动检测
中转站 = 国内代理,解决访问问题,统一接口
参考资料(2026-04 核实):