AI API 成本追踪:Token 与模型分组
理解模型价格、Token 用量、分组倍率与请求日志如何共同构成 AI API 成本,并建立可复查的用量控制方法。
AI API 成本追踪最有价值的状态,是每一笔费用都能对应到一条请求、一个模型、一个模型分组和一组真实计量数据。月度总额可以说明费用发生了变化,单请求记录才能解释为什么变化。
Modelflare 把模型价格、真实用量、分组策略和请求日志关联起来,避免用户只根据屏幕上看到的文字估算成本。
一条请求费用的四个层次
1. 模型价格
每个模型都有自己的计价基础。很多文本模型区分输入和输出 Token,图片、音频、Rerank 等 API 则可能使用不同计量单位。无法用一组固定 Token 单价表达的能力,还可能使用版本化的复杂计价规则。
应用不应把价格复制进代码,应以模型与价格中的实时模型和 API 格式为准。
2. 请求的真实用量
网关记录已完成请求返回或推导出的 Usage。对于按 Token 计价的文本模型,输入和输出会分别保留,因为两者单价可能不同。
终端里可见的流式文字并不是可靠的费用 Oracle。工具项、推理、缓存输入、标准化 Token 或供应商私有 Usage,都可能影响结算,却不会全部表现为普通 Assistant 文本。
3. 模型分组倍率
最终选中的路由分组可以在基础用量费用上应用销售倍率。例如分组 Ratio 为 0.9,意味着该请求按基础模型费用的 90% 计算。
这个倍率只属于请求用量计费,不会改变充值时实际增加的余额。
4. 最终请求记录
用量日志把结算结果与模型、分组、状态、Token、时序及其他安全运维元数据关联起来。失败或取消请求可能走不同结算路径,因此持久化后的结果比客户端估算更权威。
在用量日志中比较什么
费用变化时,可以沿这些维度对比:
- 模型: 是否切换到输入、输出或特性价格不同的模型;
- 分组: 主分组或回退分组是否使用不同倍率;
- 协议: Chat Completions 与 Responses 的 Usage 结构是否不同;
- 输入规模: 提示词、检索上下文、文件或工具结果是否变大;
- 输出规模: Completion 限制或 Agent 循环是否产生更多输出;
- 状态与重试: 失败是否带来额外的已完成尝试;
- 时序: 更长的生成时间是否真的对应更多输出,而不只是排队。
最好通过固定 Request ID 或专用 API Key 隔离工作负载,不要把账户里互不相关的请求混在一起比较。
建立实际成本边界
按工作负载拆分 API Key
生产、开发、自动化和个人工具分别使用不同 Key。每个 Key 可以有独立名称、有效期、分组策略,以及有限或无限 Quota。
有意识地选择分组
不要只根据分组名称选择。应同时检查实时模型能力、分组倍率、访问条件、RPM 和回退策略。一个价格更低、回退明确的主分组,往往比难以解释的隐式路由更可控。
先控制输入,再控制输出
大段 System Prompt、重复对话历史、检索文档和工具结果经常占据主要输入用量。删除已经不影响答案的上下文,并避免在客户端可以安全引用或缓存时反复发送不变数据。
检查 Agent 循环
一次用户操作可能产生多条模型请求。成本分析要分别追踪每轮工具调用与重试,不能把最终看到的一段回答当成唯一一次 API 调用。
为什么客户端估算会漂移
本地 Tokenizer 或字符数可以用于规划,但可能与最终费用不同,因为:
- 供应商的标准化和计数方式可能不同;
- 缓存、推理、图片、音频或工具单位可能采用独立价格;
- 网关按真实选中的模型与分组结算;
- 失败请求和退款取决于实际请求生命周期;
- 价格可以变化,但历史请求保留自己的记录结果。
财务核对应该综合持久化用量和钱包记录,而不是只根据一个展示字段反推账户余额。
一套可重复的检查流程
- 把用量日志过滤到一个 API Key 和时间范围;
- 按模型和最终分组归类请求;
- 比较每条请求的输入、输出、状态和费用;
- 检查异常值是否来自重试、长上下文、工具循环或回退;
- 修改路由前确认实时价格与分组策略;
- 工作负载需要硬性边界时,为 Key 设置有限 Quota;
- 修改后用相同指标重新检查。
成本控制的起点是归因。只要模型、分组、用量和请求结果仍然保持关联,团队就能优化真正的费用来源,而不是根据汇总数字猜测。