豆包 API 通过火山方舟提供服务,账单不是“调用一次收一次”的固定费用,而是由输入 Token、输出 Token、缓存、推理方式和保障资源共同决定。很多团队按单一单价做预算,上线后发现成本偏高,原因往往不是模型涨价,而是输入结构、缓存命中率和调用方式与估算时不同。

本文把豆包 API 的计费拆成可以逐项核对的部分,并给出估算和降本的顺序。具体单价以站内模型价格和火山方舟官方价格页为准,价格与规则可能调整。

说明:豆包、火山方舟与火山引擎均为其权利人的商标。本文仅用于技术说明,不表示任何合作关系,计费与开票规则以官方页面为准。

一、账单由哪几项构成

火山方舟的在线推理按 Token 后付费,但完整账单还可能包含缓存存储、批量推理、保障包和精调费用。

计费项 什么时候产生 计费单位 备注
输入(缓存未命中) 提示词首次进入上下文 Token 对应 prompt_tokens
输入(缓存命中) 复用了此前缓存的前缀 Token 对应 cached_tokens,单价通常更低
缓存存储 开启上下文缓存后 Token × 小时 按自然小时内的最大存储量计
输出 模型生成正文或结构化结果 Token 对应 completion_tokens
批量推理 离线批处理任务 Token 有独立价格,通常不抵扣免费额度
TPM 保障包 预置每分钟吞吐 购买时长 不调用也计费
模型单元 独占算力 购买时长 不调用也计费
精调 训练阶段 Token × 轮次或算力 与推理费用分开

先分清“用多少付多少”和“买了就付”两类费用,预算才不会漏项。前者随流量波动,后者是固定成本。

二、输入和输出分别怎么算

输入是请求里所有进入上下文的内容:system prompt、历史消息、工具定义、检索到的文档、图片等多模态内容。这些内容都会被折算成 Token,按输入单价计费。输出是模型实际生成的内容,按输出单价计费,通常单价更高。

几个容易被忽略的细节:

  • 多轮对话如果每次都带完整历史,输入 Token 会随轮数累积,而不是只算最新一句。
  • 工具调用的 schema、函数说明也占输入 Token,工具越多,固定开销越大。
  • 图片、音频等多模态输入会按规则折算,不能只按文字长度估算。
  • 推理类模型产生的思考内容通常计入输出,具体口径以官方计费说明为准。

所以预算不能只问“输入多少钱、输出多少钱”,还要问“我的请求里,输入和输出各占多少”。客服机器人输入多、输出短,长文生成则相反,两者的成本结构完全不同。

三、上下文缓存:能省钱,也会产生费用

上下文缓存的逻辑是复用稳定的前缀。两次请求开头完全一致时,命中部分按更低的缓存命中单价计费,只有新增内容按普通输入计费。但它不是免费的:

  1. 缓存命中按 cached_tokens 计费,价格低于普通输入,但不是零。
  2. 缓存存储按小时计费,通常以每个自然小时内存储的最大 Token 数结算。
  3. 缓存是尽力而为,不承诺一定命中;命中率低时,存储费可能超过节省下来的输入费。

让缓存真正省钱的做法,是把稳定内容放在请求开头:固定 system prompt、固定工具定义、固定知识前缀;把时间戳、随机 ID、用户昵称、动态检索结果放到末尾。如果业务本身每次请求都完全不同,建议先关闭缓存,观察账单后再决定。

四、在线、批量与保障包怎么选

火山方舟提供多种推理方式,价格和适用场景不同:

  • 在线推理按 Token 后付费:适合流量不确定、延迟要求一般的业务,不调用不收费,新用户通常有可抵扣的免费额度。
  • 批量推理:适合离线标注、内容审核、批量摘要等不要求实时返回的任务,价格通常更低,但不支持免费额度抵扣。
  • TPM 保障包:适合流量可预估、需要稳定吞吐的生产业务,按天或按小时购买,即使不调用也收费。
  • 模型单元:提供独占算力,适合精调模型或有特殊并发需求的场景,属于固定成本。

选型时不要只比较单价。批量推理便宜,但结果延迟高;保障包稳定,但闲时也在烧钱。把业务按“实时/离线”和“流量是否可预估”分成两类,再匹配计费方式,通常比单纯换模型更有效。

五、用 usage 字段做一次真实估算

不要按字数猜 Token。每次调用后记录响应里的 usage,连续观察一周,就能得到自己业务的真实结构。

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["ARK_API_KEY"],
    base_url="https://ark.cn-beijing.volces.com/api/v3",
)

resp = client.chat.completions.create(
    model=os.environ["ARK_ENDPOINT_ID"],  # 推理接入点 ID 或模型 ID,以控制台为准
    messages=[
        {"role": "system", "content": "你是客服助手,回答不超过三句话。"},
        {"role": "user", "content": "订单发货后还能改地址吗?"},
    ],
)

print(resp.usage)  # 记录输入、输出与缓存字段

估算按下面顺序做:

  1. 固定记录口径:时间、项目、模型、输入 Token、输出 Token、缓存命中、是否流式、重试次数。
  2. 抽样一周,算出各场景的平均输入和平均输出,不要用全站平均值。
  3. 按“输入 × 输入单价 + 输出 × 输出单价”算单次成本,缓存命中部分单独按更低单价计算。
  4. 乘以日均调用量,再乘 30,得到月度推理费用。
  5. 加上缓存存储、批量任务、保障包或模型单元等固定项。
  6. 预留一部分缓冲,覆盖重试、峰值和价格调整。
  7. 每月用账单反推一次,修正估算模型。

如果响应没有返回缓存细分字段,就记录总输入和总输出,再用账单或用量页面反推。关键是口径一致,不要把不同入口、不同日期的数据混在一起比较。

六、成本控制的顺序不要反

  1. 先量化:按项目、模型、场景拆出真实 Token 结构,找出成本最高的三个调用。
  2. 再提缓存命中:稳定前缀放在开头,减少动态内容,观察命中率变化。
  3. 再减输入:检索只召回相关片段,历史消息做摘要,工具结果只保留必要字段。
  4. 限制输出:设置合理的 max_tokens,要求 JSON 或固定字段,减少重复解释。
  5. 做模型分流:分类、抽取、改写走轻量模型,复杂推理再升级。
  6. 离线任务转批量:不要求实时返回的任务放进批量推理,避开高峰期。
  7. 最后才是谈单价:输入没治理、缓存没命中时,换再便宜的模型也降不下来。

七、预算和账单怎么管

  • 一个项目一把 Key,测试和生产分开,避免互相挤占额度。
  • 给 Key 设置消费上限和余额告警,异常调用时能及时止损。
  • 每周按“项目、模型、场景”对账,找出增长最快的调用。
  • 把缓存、批量、模型分流带来的节省单独记录,否则无法证明优化有效。
  • 需要人民币付款、统一账单和发票的团队,可以用 OpenAI 兼容的中商起航 AI 网关接入,价格与计费口径以模型价格为准。

常见问题

豆包 API 有免费额度吗?

在线推理通常有新用户免费额度,可抵扣按 Token 后付费的消耗;批量推理和精调一般不支持免费额度抵扣。额度和有效期以火山方舟控制台为准。

缓存存储为什么也收费?

缓存需要占用服务端存储资源,因此除了缓存命中的 Token 费用,还会按存储量和时长计费。命中率低时,先优化前缀结构,必要时关闭缓存。

批量推理一定更便宜吗?

批量推理的 Token 单价通常更低,但结果不是实时返回,且不支持免费额度。适合离线任务,不适合在线客服这类要求低延迟的场景。

重试的请求会计费吗?

只要服务端完成了推理并产生 Token,通常就会计费,即使客户端因超时没有收到结果。失败请求是否计费以账单和官方说明为准,重试逻辑要加退避和上限。

为什么自己估算和账单对不上?

常见漏算项包括历史消息、工具定义、多模态折算、缓存存储、重试请求和保障包固定费。用请求 ID 对照用量日志,才能定位差异。

下一步

先在中商起航 AI 网关创建测试 Key,用真实任务跑一周,记录输入、输出和缓存命中,再按模型价格折算预算。模型可用性与价格以价格页为准。

相关阅读: