很多人第一次看账单会懵:明明只聊了几句,额度怎么掉得这么快;或者写完代码准备上线,却不知道要给项目留多少预算。问题通常不在模型贵,而在于没搞懂 token 是怎么被数出来、又是怎么被算成钱的。这篇不重复概念全貌,只讲怎么估、怎么控、哪里容易漏。
很多人第一次看大模型账单都会懵:明明只是聊了几句,额度怎么掉得这么快;或者代码写完了准备上线,却完全不知道要给项目留多少预算。问题往往不在模型本身贵,而在于没搞懂 token 是怎么被数出来、又是怎么被换算成钱的。这篇不讲分词算法,也不铺概念,只讲怎么估、怎么控、哪里最容易漏。
下面按「先理解计数、再估算、再控费、最后对账」的顺序走。每节都尽量给出可以直接照做的动作,而不是停在名词解释上。适合刚接触大模型 API、准备把功能接进自己项目的开发者。
token 到底切的是什么:从字符到计费单位
你可以把 token 理解成「模型读写的颗粒度」:一段文字送进去,模型不会一个字一个字看,而是先被切成若干小块,每块算一个 token。中文、英文、代码、标点、空格、换行的切法都不一样,所以同样「看起来差不多长」的两段文字,token 数可能差出一大截。这就是为什么用字数直接估钱不靠谱。
另一个容易踩的点是:token 分输入和输出两部分,分别计数、分别计价,不是只算你发出去的那句话。模型回答的每个字、每个标点,同样要消耗。你发出的提示词算输入,模型吐出来的答案算输出,账单上是两笔。
- 模型看到的是 token,不是字,所以「字数 ÷ 某个系数 = token」只能当粗略估计,不能当账
- 中文通常比英文更「费 token」,同样的信息量,中英混排的消耗可能不同
- 代码和标点常被单独切分,压缩过的 JSON、日志片段往往比想象中更占 token
- 数字、URL、特殊符号的切法不稳定,别用固定比例去套所有内容
为什么按 token 收费:清楚一次请求里到底发生了什么
你以为一次调用只发了「用户这一句」,实际上模型收到的是一整包内容:系统提示、历史对话、检索回来的资料、再加上这次提问,全部作为输入一起送进去,也一起计费。所以聊天轮数越多、拼进去的背景越厚,单次请求的输入部分就越重。
输出部分通常单价更高,因为逐字生成比一次性读取更耗算力。这带来一个很实际的结论:让模型少说话,比让你少打字更能省钱。长回答往往比长提问更烧钱。
| 场景 | 按 token 计费的适配度 | 原因 |
|---|---|---|
| 客服问答、批量分类 | 较适配 | 请求短、输出可控、用量可预测 |
| 长文档摘要、数据分析 | 看情况 | 输入长,但只处理必要片段就能压下来 |
| 多轮闲聊式助手 | 容易失控 | 历史反复计费,轮数越多越贵 |
| 固定功能的工具页 | 可考虑订阅或套餐 | 调用量稳定,按量算未必省事 |
判断标准很简单:如果你能预估每天大概多少次请求、每次大概多少输入输出,按 token 就清晰;如果是人在前面随便聊、时长和轮数都不固定,先把控费手段加上,再谈按量还是订阅。
上线前怎么估:三个量先量出来
估算不靠感觉,靠三个量:单次请求的平均输入长度、平均输出长度、每天大概多少次请求。三者相乘得到一个量级,再去站内单价页面核对当时数字,就是日成本的大致范围。注意是量级,不是精确值,别指望一次算准。
- 量输入抽一批真实请求,把系统提示、历史、资料、提问都算进去,取平均;别只统计用户那句话。
- 量输出看模型实际回答的长度,取平均和中位数各一份,两者差距大说明输出不稳定,要按偏大的估。
- 量次数按业务高峰和低谷分别估,日活、每用户调用次数、后台定时任务都要算进去。
- 回推成本把三个量和站内单价页面的当时数字相乘,得到日成本量级;再乘上业务增长预期做上浮。
- 算最坏情况假设用户粘贴长文档、模型啰嗦输出,把单次成本拉到平峰的好几倍,看预算是否扛得住。
估不准是正常的。比数字更重要的是这套动作本身:它逼你去看真实样本,而不是上线后被动对账。
钱都漏在哪:四种最常见的隐形消耗
大多数超支不是因为单价高,而是因为请求里塞了本不该塞的东西、输出了本不必输出的内容。下面四类漏点最常出现,按出现频率排。
| 漏点 | 典型表现 | 治理方向 |
|---|---|---|
| 每轮重发全部历史 | 多轮对话越聊越贵 | 历史做摘要或截断,只带必要轮次 |
| 整篇资料塞进上下文 | 只需两页却传整份 | 先检索出相关片段,再拼进提示 |
| 输出不受控 | 回答长篇大论、格式散 | 用固定字段、条数上限约束输出 |
| 重试与失败请求 | 超时报错后自动重试 | 重试前设上限,避免输入被重复计费 |
- 多轮对话是最隐蔽的:你以为只加了新问题,其实旧内容又被算了一遍
- 长资料建议先在本地或检索层筛出片段,别把整份文档直接丢进去
- 输出约束要写进提示里,比如要求返回固定字段、限定条数、禁止解释性套话
- 定时任务和测试环境流量常被忘在账外,对账时先把这两块单独列出来
这几类漏点的共同点是:它们都不体现在你的代码「功能」上,只体现在账单里。所以排查顺序建议从多轮对话和长资料入手,这两处往往占大头。
能立刻照做的控费清单
下面这份清单不需要改架构,多数是提示词和配置层面的动作,当天就能生效。按从上到下的顺序做,收益递减。
- 给输出加约束要求固定结构、限定条数、禁止多余解释,从源头掐掉废话输出。
- 精简上下文历史做摘要或只保留最近几轮,长资料先检索再拼,不要整篇透传。
- 分任务选模型简单分类、抽取类任务用轻量档位,把贵的那档留给真正复杂的推理。
- 设额度与告警给项目设当日额度上限和异常告警,让异常消耗当天暴露,而不是月底发现。
- 定期复查样本每隔一段时间抽几条真实请求看 token 分布,业务变了消耗结构也会变。
这套动作的适用边界要说清:如果业务本身就需要长上下文、长回答,硬压输出会伤效果。这时候重点应转向「按任务分模型」和「设上限」,而不是一味砍长度。
单价从哪查:别拿记忆里的数字算账
模型单价、输入输出的差价是会变的,别人文章里写的数字、你半年前记的数字,都不能直接拿来算今天的账。要算就拿站内当时的页面数字,并且先确认单位和口径:是按每千 token 还是每百万 token,输入和输出是否分开列。
比价时还有一层坑:同一个模型在不同渠道(官方、聚合平台、中转站)的报价口径可能不同,有的把输入输出合并展示,有的把缓存价单列。不把口径对齐就开始比,结论很容易反。
套餐制与按量制的折算方式也不一样。拿月费直接除 token 数得到的单价只能作参考,因为套餐往往有限速、额度、并发这些额外约束,这些约束本身就是价值的一部分。
下一步把你要用的模型单价和输入输出口径在价格页面对一遍,再去追踪页看历史波动,心里就有数了。→什么情况下这套估算不管用
前面那套「三个量相乘」的估法,前提是你在按量付费。一旦换了计费模式,逻辑就变了,硬套会得出错误结论。下面几种情况要单独看。
- 用订阅制或包月编程套餐时,花费和 token 数不直接挂钩,关注点应转向额度、限速和并发口径
- 本地部署模型没有按 token 的账单,成本转移到硬件、电费和运维人力上,估法完全不同
- 平台有缓存机制时,命中缓存的输入通常更便宜,按全量单价算会明显高估
- 有批量接口或异步任务折扣的渠道,单价和实时调用不是一回事,要分开估
还有一种容易忽略的情况:如果你只是做原型验证、调用量很小,纠结单价意义不大,重点应该放在「别让历史无限膨胀」和「别把测试流量混进生产账单」上。
看懂账单:从数字回到具体行为
账单上的数字本身不会告诉你哪里出了问题,你要做的是把日消耗和当天做的事对应起来。哪天消耗突然抬升,就去看那天上线了什么、跑了什么任务、有没有异常流量。
一个关键的区分是:「用量涨了」和「单价变了」是两种完全不同的原因,处理方式也不一样。用量涨了去查行为和流量;单价变了去查计费模式和渠道,别混为一谈。
- 按天拉出消耗把日消耗和当天的业务动作并排列出来,找异常抬升的那天。
- 定位异常请求从异常那天往回查,看是哪类请求变多了,是用户量涨还是单次变长。
- 区分用量与单价先确认是请求量变化还是计费口径变化,两者的排查方向完全不同。
- 列漏项清单把被忽略的调用、定时任务、测试环境流量单独列出来核对,账对不上往往就藏在这里。
- 回到样本抽几条异常请求的原样内容,看是不是上下文被意外膨胀了。
对不上账是常态,别急着怀疑平台。先把上面这张排查顺序走一遍,多数偏差都能在「漏项」和「上下文膨胀」里找到解释。
token 不是抽象概念,它是你代码里每一句提示、每一次重试、每一轮历史累积出来的真实消耗。
常见问题
token 和字数是什么关系,能直接换算吗?
不能精确换算,只能估。中文一个字可能对应一个或多个 token,英文单词、代码符号的切法又不一样,标点和空格也会被算进去。想估得准一点,用站内换算工具拿你真实的文本跑一遍,比记一个固定比例靠谱得多。
为什么我发的字不多,费用却不低?
多半是输入的「隐形部分」太大了:系统提示、历史对话、检索资料都会一起计费。另外如果模型输出很长,输出侧单价通常更高,也会明显拉高花费。可以先把一次请求的完整输入输出列出来,再判断是哪一块占了大头。
有没有办法让同样的活儿花更少?
常见做法是限制输出长度和格式、精简上下文、把长文档先检索再拼入、按任务挑合适档位的模型。这些都不需要改架构,属于立刻能做的动作。但要注意:过度压缩上下文可能让回答质量下降,得自己权衡。
按量计费和订阅套餐,我该选哪个?
看用量是否稳定。用量波动大、有大量自动化调用,按量更容易控制;用量稳定且集中在编程或日常问答,套餐往往更省心。判断前先看清套餐的额度口径和限速规则,两者不完全可比。
账单和我的预估差很多,先查什么?
先确认有没有被忽略的调用来源,比如定时任务、测试环境、多人共用一个 Key。再区分是用量涨了还是单价变了。最后核对输入输出各自的占比,通常能定位到具体是哪类请求在吃额度。