TOKEN BASICS
Token 不是字符数,也不是固定字数
Token 是模型处理文本时使用的离散单元。中文、英文、标点、空格和代码的切分方式不同,目标模型或供应商的 tokenizer 也可能不同。
系统提示词、历史消息、工具定义、图片或文档转写等进入模型上下文的内容,可能共同构成输入用量。
模型生成的文本及部分模型的 reasoning token 可能计入输出或 completion,即使客户端没有展示完整推理内容。
字符数只能粗略估算。最终核对使用模型返回的 usage、任务状态与 JBB Usage Logs,不用固定换算比例。
多轮对话通常会把历史消息再次发送;同样一句新问题,在长对话里可能产生更多输入 Token。客户端是否截断或摘要历史,也会改变用量。
BILLING MODES
先判断按 Token,还是按次
JBB 当前价格页同时展示按 Token 与按次模型。两种模式不能混用同一套计算方法。
| 模式 | 怎么读 | 常见附加维度 |
|---|---|---|
| 按 Token | 分别统计未缓存输入、输出、缓存读取与缓存写入,再乘当前有效单价。 | 长上下文 tier、工具、图片或音频等附加费用。 |
| 按次 | 按页面显示的每请求价格乘请求次数,或按任务成功结果数结算。 | n、分辨率、时长、质量档位和任务类型。 |
打开实时价格查看目标模型当前计费类型。模型、价格、分组倍率和缓存字段会变化,本页不复制固定价格。
TOKEN FORMULA
输入、输出与缓存分开计算
下面的符号价格已经代表目标模型、所选分组与当前价格层级下的有效单价,单位均按价格页当前显示方式理解。
费用 = 未缓存输入 tokens / 1,000,000 × P_in
+ 输出 tokens / 1,000,000 × P_out
+ 缓存读取 tokens / 1,000,000 × P_cache_read
+ 缓存写入 tokens / 1,000,000 × P_cache_write
+ 工具 / 图片 / 音频等附加费用
符号价格示例,不绑定具体模型
- 请求用量20 万未缓存输入 + 5 万输出 + 10 万缓存读取
- 单位换算
0.2 × P_in + 0.05 × P_out + 0.1 × P_cache_read - 没有缓存写入本例没有 Cache Write,因此该项为 0;不能把缓存读取再计入普通输入。
如果命中动态 tier、reasoning token、工具、多模态或按次附加项,最终费用还会包含相应维度。以当次 Usage Logs 为准。
PROMPT CACHE
Cache Read 与 Cache Write 是两件事
请求复用已存在的可缓存前缀时,命中的 Token 可能按缓存读取单价结算,并从普通输入维度中分离。
首次写入或刷新缓存时,目标模型可能报告缓存写入 Token,并采用独立写入价格。
不能据此承诺折扣;可能按普通输入结算,或该模型/渠道不提供这个计费维度。
- 缓存是否命中由模型、渠道、请求前缀和供应商规则共同决定。
- 改变系统提示词、工具定义、消息顺序或缓存有效期,都可能导致未命中。
- 不能只看客户端“启用了缓存”;要看 usage 中的缓存字段和 Usage Logs。
- 缓存读取 Token 不应再次作为普通输入重复计费。
GROUPS & TIERS
同一个模型,也可能命中不同有效单价
分组倍率会改变用户看到的有效价格;部分模型还会根据上下文长度或请求参数匹配不同价格层级。价格页负责告诉你“当前单价”,日志负责告诉你“这次命中了什么”。
- 分组
令牌所属分组会参与当前有效价格计算。修改分组或使用聚合 Key 后,应重新核对目标模型价格。
- 长上下文
当上下文跨过模型的价格阈值时,输入、输出或其他维度可能进入另一层级,不应只套用短上下文价格。
- 请求参数
部分任务会按质量、分辨率、时长、结果数量或工具参数匹配额外倍率。
- 实时配置
模型与价格配置会更新。保存历史截图只能解释当时规则,不能替代当前价格页。
PRECHARGE & SETTLEMENT
余额先下降,不代表最终就扣这么多
为避免请求在额度不足时继续执行,系统可能在请求前按估算输入、max_tokens、模型和分组规则预扣;上游返回真实 usage 后再结算。
请求开始前冻结或扣除一笔估算额度。较大的 max_tokens 可能让预扣看起来更高。
请求完成后,根据实际输入、输出、缓存与附加维度计算本次真实费用。
实际费用减去预扣得到差额;少用的退回,超出估算的补扣。
流式响应尚未结束、异步任务仍在运行或日志还没落定时,余额可能只是中间状态。请等待任务终态后再核对。
FAILURE MATRIX
不能简单说“失败免费”或“失败都扣费”
要区分失败发生在哪一层、后台收到的任务状态、是否已有 usage,以及客户端是否自动重试。
| 你看到的情况 | 通常如何处理 | 核对重点 |
|---|---|---|
401 / 403、参数或模型权限错误,未进入上游 | 通常不产生正常模型 usage 费用。 | HTTP 状态、错误正文、是否有请求日志。 |
| 明确 upstream failure 或异步任务进入 Failure | 普通预扣通常退回;任务 Success 才进入最终结算。 | 任务终态、退款记录、同一 request ID。 |
| HTTP 200、成功任务状态,但空结果或部分结果 | 可能仍按 usage、请求次数或成功结果数结算。 | 不要只看客户端画面;看后台状态和 Usage Logs。 |
| 特定内容安全违规拒绝 | 可能在普通退款之外收取独立违规费用。 | 当前违规规则与日志;本页不写死金额。 |
| timeout、断流、客户端自动 retry | 每次 retry 可能成为独立请求并分别结算。 | 按时间和 request ID 排除重复调用。 |
如果服务端收到成功形态或任务状态为 Success,即使客户端没有渲染出图片,也可能按次结算。先确认响应、任务终态和日志,再判断是否异常扣费。
AUDIT ONE REQUEST
按 request ID 核对一笔费用
- 在控制台 Usage Logs 按时间、令牌、模型和 request ID 找到目标调用。
- 确认 HTTP 或任务终态:成功、明确失败,还是客户端超时但后台仍在执行。
- 核对输入、输出、Cache Read、Cache Write、reasoning 与结果数量等 usage 维度。
- 打开实时价格,确认当时使用的模型、分组、计费类型与页面单位。
- 查看是否命中长上下文或其他价格 tier,以及图片、工具、音频等附加项。
- 检查同一时间是否有 retry 形成多条独立日志,再对照最终余额变动。
FAQ
Token 与计费常见问题
- 01中文一个字等于一个 Token 吗?
不一定。切分取决于目标模型 tokenizer,标点、数字、英文和代码也会改变结果,以实际 usage 为准。
- 02缓存命中后一定更便宜吗?
不一定。只有目标模型、渠道和当前价格配置提供独立缓存价格时,才能按该维度结算;先看价格页与日志。
- 03为什么余额先扣很多,后来又回来?
这通常是预扣与最终结算的差额。请求结束后会根据真实 usage 多退少补。
- 04请求报错为什么还有费用?
客户端报错不等于后台失败。后台可能已成功、产生 usage、返回部分结果,或客户端自动重试了另一笔请求。
- 05为什么 reasoning 模型输出不长,费用却高?
部分不可见 reasoning token 可能计入 output/completion;同时还要核对上下文长度和命中的价格 tier。
- 06价格页和历史账单不一致怎么办?
价格页反映当前配置,历史账单反映当次请求。以请求时间、日志中的价格维度和当时规则核对。
请保存 request ID、时间、模型、令牌、客户端错误与对应 Usage Logs;不要发送完整 API Key。