主题
主流大模型对比与计费规则:token 怎么算、钱怎么花、模型怎么选
本文是 AI 应用系统学习系列的 L2 核心篇。前置:LLM 核心概念:Token、上下文与能力边界。 学完可以配合面试题食用:31. LLM 核心概念、37. 成本与延迟优化。
先问一句:为什么月底账单总是比预估高
类比:API 计费像出租车计价器,但这个计价器有三个不显眼的坑——车开之前,司机先把导航路线、你的常去地点全部念一遍(系统消息和工具定义照价收费);路上每遇到一个红灯,司机把从头开始的全程路线重新复述一遍(多轮对话全量重算);下车前司机还在脑内把路线复盘了几分钟,这段思考同样计费(reasoning token)。乘客只记得「我从 A 到 B」,账单却按全程念稿收。
把这笔账算明白是工程问题不是财务问题。同一套 RAG 问答,选型不同月账单差 10 倍是常态:旗舰模型 answering + 小模型检索改写,和全链路旗舰硬扛,价格完全两回事。本文按顺序讲三件事:token 怎么数、计费规则有哪些倍率、模型怎么选。
Token:计费的最小单位怎么数
第 31 篇讲过 BPE:模型不按字词处理文本,按 subword 切。对计费来说记三个换算就够用:1 个汉字 ≈ 1-2 token(常用字多为 1 个,生僻词 2 个),1 个英文单词 ≈ 1.3 token,1000 字中文文章大约 1300-2000 token。粗估用「中文按字数 ×1.5、英文按词数 ×1.3」,精确值交给 tokenizer 算。
容易漏算的是文本之外的三个大头:
- 系统消息和工具定义。每次请求都重发一遍,工具定义动辄上千 token,10 个工具就是每次请求固定多付一笔。
- 多轮对话的历史。API 是无状态的,第 10 轮请求要把前 9 轮全部重发。轮数越多,每轮比上一轮多付的增量越大——这就是滚雪球。
- reasoning token。o1、DeepSeek-R1 这类推理模型,输出前先内部「思考」,思考内容多数 API 不返回或默认不可见,但按输出价计费。一次简单问答,可见输出 200 token、账单 completion 是 2000 token 都可能。
计费规则:四条倍率决定账单
第一,按 token 不按条。同一句「总结这段话」,粘 100 字和粘 1 万字价格差百倍。
第二,输出比输入贵。主流价目表上输出单价通常是输入的 3-5 倍,因为生成是逐 token 自回归,每个 token 都要过一遍全模型;输入是一次并行前向。这对架构有直接指导:能放进输入的规则说明别让模型生成出来,别用大模型逐字改写本可以模板化的内容。
第三,上下文缓存打折。Prompt caching 对重复前缀(系统消息、工具定义、长文档)做缓存,命中的输入部分按折扣计价——主流厂商折扣从 1 折到 4 折不等。多轮对话天然重复前缀,命中率高;把工具定义放请求最前面、保持系统消息字节级一致,是缓存命中的前提条件,改动一个标点缓存就失效。
第四,多轮对话滚雪球。10 轮对话的输入总量不是 10 份,是 1+2+…+10 的三角形。没有缓存时 10 轮对话的实际输入费是无缓存的 5.5 倍;有缓存后增量部分全价、历史部分打折,账单曲线平缓得多。
mermaid
flowchart LR
A[一次请求] --> B[输入 token<br/>系统消息+工具+历史+本次问题]
B --> C{缓存命中?}
C -->|是| D[折扣价<br/>约 1-4 折]
C -->|否| E[全价]
A --> F[思考 token<br/>推理模型专属<br/>按输出价计]
A --> G[输出 token<br/>全价·输入的 3-5 倍]
D --> H[账单]
E --> H
F --> H
G --> Husage 字段怎么读。每次响应都带 usage,成本核算只认它:
json
{
"prompt_tokens": 4820,
"completion_tokens": 1860,
"prompt_tokens_details": { "cached_tokens": 4096 },
"completion_tokens_details": { "reasoning_tokens": 1536 }
}这条 usage 说明:输入 4820 token 里 4096 走了缓存折扣;输出账面 1860 里可见内容只有 324,其余 1536 是思考 token(按输出全价计)。只看可见回复长度估成本,会差出好几倍。
主流模型对比:2026 年怎么选
下表是选型参考坐标。各家定价调整频繁,准确数字以官方价目页为准,这里只记相对关系:
- GPT 系列(OpenAI):综合能力强、生态最全;GPT-5 系列按推理力度分档,旗舰档价格高,mini/nano 档接住了大部分轻量任务。
- Claude 系列(Anthropic):长上下文(1M token 档)、代码与 Agent 任务口碑突出,Agentic Coding 场景的首选之一;旗舰档价格处在第一梯队。
- Gemini 系列(Google):超长上下文(1M-2M token)与原生多模态是差异化优势,Flash 档价格激进,适合大输入量任务。
- DeepSeek:国产梯队里性价比标杆,推理模型(R1/V3.x)API 价格只有海外旗舰的十分之一量级,开源权重可私有化;高峰期限流是主要代价。
- Qwen 系列(阿里):开源阵营主力(Apache 2.0 权重),Qwen2.5/Qwen3 全尺寸覆盖,私有化部署最常选;API 也有竞争力。
- GLM 系列(智谱):国产 API 梯队成员,Agent 与代码能力持续跟进,价格中游。
- Kimi(月之暗面):长文本起家,k2 系列开源后 Agent/工具调用能力进入第一梯队讨论范围。
- 豆包(字节):国内 C 端生态最广,API 价格低,适合高并发轻任务。
选型原则记一条:别看跑分榜选默认模型,按任务分级路由。分类、摘要、格式转换走小模型(mini/flash/deepseek-chat 档);代码生成、复杂抽取走中档;多步规划、难推理才上旗舰。反例是全链路一个旗舰打天下——分类 200 token 的活也按旗舰价付,月账单直接翻几倍。
动手实操
两个脚本:离线用 tiktoken 预估 token,线上读 usage 精确算成本。
python
"""脚本一:tiktoken 离线估算(OpenAI 系;国产模型字数×1.5 粗估也够用)
依赖: pip install tiktoken
"""
import tiktoken
enc = tiktoken.encoding_for_model("gpt-4o")
def count(text: str) -> int:
return len(enc.encode(text))
system = "你是公司知识库助手,只根据引用文档回答。" # 每请求固定开销
tools_def = count(open("tools_schema.json").read()) # 工具定义也是固定开销
history = count("…前9轮对话全文…")
question = count("出差补贴怎么申请?")
total_in = count(system) + tools_def + history + question
print(f"本轮输入约 {total_in} token") # 提前知道雪球滚到多大python
"""脚本二:调 API 读 usage,按价目表精确算单次成本(单价请查官方价目页)
依赖: pip install openai
"""
from openai import OpenAI
client = OpenAI() # 或任何兼容 OpenAI 协议的 base_url
PRICE = { # 单位: 元/百万token,示例值,以官方价目页为准
"input": 4.0, "cached_input": 0.4, "output": 16.0,
}
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "总结以下文档: …"}],
)
u = resp.usage
cached = getattr(u.prompt_tokens_details, "cached_tokens", 0) or 0
reasoning = getattr(u.completion_tokens_details, "reasoning_tokens", 0) or 0
plain_in = u.prompt_tokens - cached
cost = (plain_in * PRICE["input"] # 未命中输入:全价
+ cached * PRICE["cached_input"] # 命中输入:折扣价
+ u.completion_tokens * PRICE["output"]) / 1e6
print(f"输入 {u.prompt_tokens} (缓存命中 {cached}) | "
f"输出 {u.completion_tokens} (含思考 {reasoning}) | 成本 ¥{cost:.4f}")关键行说明:脚本一的 tools_def 别漏——工具定义是每次请求的固定开销,10 个工具常驻约一两千 token;脚本二的 cost 公式把三段价目分开算,reasoning_tokens 已经含在 completion_tokens 里,别重复加。把这两段包进请求中间层,每次调用落一条 usage 日志,月底账单就有明细可查。
算账实例:一次 RAG 问答 vs 一次 10 步 Agent
RAG 问答(走旗舰模型,输入 4 元/M、输出 16 元/M、缓存 0.4 元/M):系统消息+工具定义 3000 token(缓存命中)+ 引用文档 4000 + 问题 50,输出 400。成本 ≈ 3000×0.4 + 4050×4 + 400×16 = 0.0232 元。一天 1 万次问答约 232 元,完全可接受。
10 步 Agent 任务(同一模型):每步都要重发系统消息、工具定义和全部中间结果。假设步均输入 8000 token(缓存命中 6000)、步均输出 500(其中 200 是思考 token),10 步合计:输入 6×0.4+2×4 = 10.4 元/M 量 → 80000 token 计 0.83 元;输出 5000 token 计 0.08 元。单次任务约 0.9 元——是单轮问答的 40 倍。三个降本杠杆按见效排序:中间结果用小模型压缩(输入直接变小)、给循环加步数上限(防失控)、每步产物落缓存(重试不重算)。
常见误区与小结
- 按对话轮数估成本。API 按每次请求的全部输入 token 计费,10 轮对话付的是三角形的量,不是 10 份。
- 忽略工具定义开销。十几个工具的 schema 每次请求都全价重发;给它们做缓存前缀、砍掉用不到的工具,是最便宜的成本优化。
- 拿可见回复长度估输出成本。推理模型的思考 token 按输出价计且多数不可见,账单 completion 可以是可见内容的 6 倍。
- 只认跑分榜第一名。榜单测的是单次任务能力,Agent 场景还要看指令跟随稳定性、工具调用成功率和价格,全链路旗舰硬扛是烧钱不是保险。
- 缓存前缀经常变。系统消息里嵌入时间戳、用户名这类每次变化的字段,缓存永远不命中;变化内容放请求末尾,稳定前缀放最前。
小结:本文把计费的三层结构摊开——token 怎么数(文本之外还有工具定义、历史、思考 token)、账单有哪些倍率(输出 3-5 倍、缓存 1-4 折、多轮滚雪球)、选型怎么定(任务分级路由,旗舰只留给难任务)。配上周更的 usage 日志,成本就从「月底惊吓」变成「每笔可查」。至此 AI 应用模块 31-55 共 25 篇全部完成:从 L1 的 token 与 API,到 RAG、Agent、评测,再到运维与成本,这条线覆盖了 LLM 应用工程化的主干。
参考
- OpenAI Pricing 官方价目页:https://openai.com/api/pricing
- Anthropic Docs — Prompt Caching 与 Usage 字段说明:https://docs.anthropic.com
- tiktoken(OpenAI tokenizer):https://github.com/openai/tiktoken