TOKEN BILLING / EXPLAINED

Token 怎么算,失败会不会扣费

一笔 API 费用要同时看实际 usage、当前模型价格、分组与命中的价格层级。这里把输入、输出、缓存、预扣和失败场景拆开说明,不写死会变化的模型单价。

TOKEN BASICS

Token 不是字符数,也不是固定字数

Token 是模型处理文本时使用的离散单元。中文、英文、标点、空格和代码的切分方式不同,目标模型或供应商的 tokenizer 也可能不同。

01输入 Token

系统提示词、历史消息、工具定义、图片或文档转写等进入模型上下文的内容,可能共同构成输入用量。

02输出 Token

模型生成的文本及部分模型的 reasoning token 可能计入输出或 completion,即使客户端没有展示完整推理内容。

03以 usage 为准

字符数只能粗略估算。最终核对使用模型返回的 usage、任务状态与 JBB Usage Logs,不用固定换算比例。

上下文会累积

多轮对话通常会把历史消息再次发送;同样一句新问题,在长对话里可能产生更多输入 Token。客户端是否截断或摘要历史,也会改变用量。

BILLING MODES

先判断按 Token,还是按次

JBB 当前价格页同时展示按 Token 与按次模型。两种模式不能混用同一套计算方法。

模式怎么读常见附加维度
按 Token分别统计未缓存输入、输出、缓存读取与缓存写入,再乘当前有效单价。长上下文 tier、工具、图片或音频等附加费用。
按次按页面显示的每请求价格乘请求次数,或按任务成功结果数结算。n、分辨率、时长、质量档位和任务类型。

打开实时价格查看目标模型当前计费类型。模型、价格、分组倍率和缓存字段会变化,本页不复制固定价格。

TOKEN FORMULA

输入、输出与缓存分开计算

下面的符号价格已经代表目标模型、所选分组与当前价格层级下的有效单价,单位均按价格页当前显示方式理解。

估算公式 · 单位:每 1M tokens
费用 = 未缓存输入 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 是两件事

RCache Read

请求复用已存在的可缓存前缀时,命中的 Token 可能按缓存读取单价结算,并从普通输入维度中分离。

WCache Write

首次写入或刷新缓存时,目标模型可能报告缓存写入 Token,并采用独立写入价格。

未提供缓存价

不能据此承诺折扣;可能按普通输入结算,或该模型/渠道不提供这个计费维度。

  • 缓存是否命中由模型、渠道、请求前缀和供应商规则共同决定。
  • 改变系统提示词、工具定义、消息顺序或缓存有效期,都可能导致未命中。
  • 不能只看客户端“启用了缓存”;要看 usage 中的缓存字段和 Usage Logs。
  • 缓存读取 Token 不应再次作为普通输入重复计费。

GROUPS & TIERS

同一个模型,也可能命中不同有效单价

分组倍率会改变用户看到的有效价格;部分模型还会根据上下文长度或请求参数匹配不同价格层级。价格页负责告诉你“当前单价”,日志负责告诉你“这次命中了什么”。

  • 分组

    令牌所属分组会参与当前有效价格计算。修改分组或使用聚合 Key 后,应重新核对目标模型价格。

  • 长上下文

    当上下文跨过模型的价格阈值时,输入、输出或其他维度可能进入另一层级,不应只套用短上下文价格。

  • 请求参数

    部分任务会按质量、分辨率、时长、结果数量或工具参数匹配额外倍率。

  • 实时配置

    模型与价格配置会更新。保存历史截图只能解释当时规则,不能替代当前价格页

PRECHARGE & SETTLEMENT

余额先下降,不代表最终就扣这么多

为避免请求在额度不足时继续执行,系统可能在请求前按估算输入、max_tokens、模型和分组规则预扣;上游返回真实 usage 后再结算。

01预估并预扣

请求开始前冻结或扣除一笔估算额度。较大的 max_tokens 可能让预扣看起来更高。

02读取实际 usage

请求完成后,根据实际输入、输出、缓存与附加维度计算本次真实费用。

03多退少补

实际费用减去预扣得到差额;少用的退回,超出估算的补扣。

预扣不是最终扣费

流式响应尚未结束、异步任务仍在运行或日志还没落定时,余额可能只是中间状态。请等待任务终态后再核对。

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 核对一笔费用

  1. 在控制台 Usage Logs 按时间、令牌、模型和 request ID 找到目标调用。
  2. 确认 HTTP 或任务终态:成功、明确失败,还是客户端超时但后台仍在执行。
  3. 核对输入、输出、Cache Read、Cache Write、reasoning 与结果数量等 usage 维度。
  4. 打开实时价格,确认当时使用的模型、分组、计费类型与页面单位。
  5. 查看是否命中长上下文或其他价格 tier,以及图片、工具、音频等附加项。
  6. 检查同一时间是否有 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。