1.1 Token 是什么,以及它的计费模型到底怎么算 读完这一节,你应该能用一句话说清楚:「大模型账单上的每一分钱,都是按 Token 的个数,再乘以每个 Token 的单价算出来的——而 Token 既不是字、也不是词,而是一种被分词器切碎后的计费单位。」 很多团队第一次看到大模型账单时都会有一个错觉:我明明只发了两句提示词,怎么扣了八千个 Token?问题就出在「Token 到底是什么」这件事上。这一节我们不做教科书式的定义堆砌,而是从「你打开账单那一刻的困惑」倒推回去,把 Token、计费模型、以及那些最容易让人多花钱的隐藏项,一个一个拆开讲透。
读完这一节,你应该能用一句话说清楚:「大模型账单上的每一分钱,都是按 Token 的个数,再乘以每个 Token 的单价算出来的——而 Token 既不是字、也不是词,而是一种被分词器切碎后的计费单位。」
很多团队第一次看到大模型账单时都会有一个错觉:我明明只发了两句提示词,怎么扣了八千个 Token?问题就出在「Token 到底是什么」这件事上。这一节我们不做教科书式的定义堆砌,而是从「你打开账单那一刻的困惑」倒推回去,把 Token、计费模型、以及那些最容易让人多花钱的隐藏项,一个一个拆开讲透。
先说结论:在自然语言处理里,Token 是模型处理文本的最小单位,但它和我们能看见的「字」或「词」没有一一对应的关系。不同的模型用不同的分词器(tokenizer),切出来的 Token 数量差异很大。
以英文为例,单词「understanding」在 GPT 系列的分词器里通常被切成「under」「stand」「ing」三个 Token;而中文因为没有天然的空格分词边界,处理方式和英文不同——中文更多是「按字或按子词」切分。根据 OpenAI 官方给出的经验口径,中文 1 个汉字通常约等于 1 到 2 个 Token(常见经验值是 1 个汉字≈1 个 Token,但带标点或复合语义时可能更多)。这就是为什么你写一段 2000 字的中文,账单上可能显示 2200~3000 个 Token。
这里有个容易被忽视的坑:同一个意思,不同的写法,Token 数完全不同。下面这张对比图能直观说明问题。
| 写法 | 字符数 | 大致 Token 数 | 备注 |
|---|---|---|---|
| 用口语写「帮我写个能自动回复客户问题的机器人」 | 18 字 | ≈20 | 自然表达,分词紧凑 |
| 用冗余写「请请提供一个可以帮助自动回复客户提问的机器人程序」 | 26 字 | ≈34 | 长句+书面语,Token 暴涨 |
| 同样需求用英文 "Build a chatbot to auto-reply to customers" | 44 字符 | ≈11 | 英文在某些模型上反而更省 |
这不是让你去「省字写作」——正文该写清楚还得写清楚。但它说明了一件关键的事:Token 数量由「模型怎么切」决定,而不由「人怎么读」决定。理解这一点,你才会明白后面的缓存策略为什么有效:缓存命中的本质,是「同样一段 Token 序列不再被重新计算、重新计费」。
很多人以为「调用一次模型 = 输出多少字就付多少钱」,这是第二个大误会。一次完整的对话补全(completion)调用,账单通常包含以下几块:
我特意把「检索召回的上下文」标成最大的一块,因为它是一个隐蔽的成本黑洞:当你给模型塞了 30 篇文档当上下文,哪怕模型只用了其中 1 篇,那 30 篇的 Token 全都按输入计费。这正是后续「请求缓存」和「智能路由」要解决的问题之一——要么让重复检索不再反复计费,要么把简单问题路由到便宜的小模型,别用大模型去处理本可以用小模型搞定的事。
为了让后面的成本优化有「可计算的抓手」,我们把账单抽象成一个公式。设一次调用:
成本 = 输入 Token 数 × 输入单价 + 输出 Token 数 × 输出单价 + 推理 Token 数 × 推理单价 + 缓存相关项
如果是多轮对话,且每轮都把历史拼回去,那么第 N 轮的输入 Token 数会随轮次线性增长。设单轮新增输入为 a,输出为 b,则前 N 轮累计输入 Token 约为 a×N + b×(N−1),输出累计为 b×N。这就是「长对话越聊越贵」的数学来源。
从公式能直接推出四条降本路线,后面章节会逐一展开:
除了最常见的「按 Token 数计费」,工程上你还会遇到几种变体,做成本治理时必须先认清自己属于哪一种:
回到公式。假设你的系统每天有 10000 次调用,其中 4000 次是高度重复的同类问题(例如「怎么重置密码」「营业时间几点」)。如果不做缓存,这 4000 次每次都完整计费;如果做了语义缓存,命中后可能只按「缓存读取」的低价计费、甚至不计模型推理费。那么:
原成本 = 10000 × T × P
加缓存后 ≈ (6000 × T × P) + (4000 × T × P_read),其中 P_read ≪ P
当命中率到了 40%,账单可能直接降三成以上。这还只是一个保守估计——在检索类(RAG)场景里,上下文 Token 动辄几千,缓存命中省下的远不止三成。「缓存命中率」是降本的杠杆支点,而它正好是后面第三章要精密建模的核心指标。
读到这里,你已经具备成本意识的基本盘。现在可以做几件零成本的小事,为后续系统化治理铺路:
虽然「按 Token 计费」是行业共识,但落到具体平台,口径差异足以让你的成本预估偏差数倍。举几个需要警惕的点:
因此,1.1 建立的公式要「本土化」:先去读你所用平台的计费文档,把「哪些部分单独计价、是否有预缓存折扣」填进公式,再谈优化。这也是本教程反复强调「建议结合官方文档核实」的原因——我不替你编造某个平台的精确单价。
假设你运营一个客服助手,使用某按 Token 计费的模型,大致单价(仅为示意,非真实报价):输入 0.01 元/千 Token、输出 0.03 元/千 Token、推理 0.02 元/千 Token。一个典型「查询订单」对话:
单次成本 ≈ (1800+120)/1000×0.01 + 400/1000×0.02 + 300/1000×0.03 ≈ 0.0192 + 0.008 + 0.009 = 0.0362 元。
如果一天有 5000 次这类查询,日成本约 181 元,月成本约 5430 元。现在设想:其中 40% 是高度重复的「订单到哪了」类问题,若用语义缓存命中,命中部分只产生极低的缓存读取费(约原输入费的 1/10),那么月成本可降至约 3500 元出头,省下近 35%。这一个例子就说明了:降本不是玄学,是可算的。
Q × T × P,由此推出四条降本路线:降量、降 Token、降单价、提命中率。下一节(1.2)我们不再谈抽象模型,而是把目光对准你的真实账单,找出那「成本最高的 10 类请求」——它们才是缓存与路由最该优先下手的地方。