追踪 LLM 用量与成本
供应商账单不足以支持产品决策,应用侧 Token 计数也不足以完成核算。应使用请求级证据连接两者并持续对账。
速览
连接 App 调用链、网关请求、供应商 Attempt、Response 与工具调用 ID。
记录成功、重试与回退用量,而不是只记录最终响应。
为分析映射单位,同时保留原生字段与计费维度。
比较内部账本与供应商导出,并解释每个重要差异。
证据模型
用量应先在 Provider Attempt 层记录,再汇总到用户请求与业务工作负载。每次尝试都应存储租户、Project、环境、工作负载、路由、供应商、不可变模型版本、原生 Request ID、输入输出单位、缓存维度、重试、延迟、状态和分摊标签。同时保留供应商原生值与标准化字段,避免后续报表抹去源端真正的计量方式。
Usage Event 还不等于成本。需要把它与带有币种、单位、生效时间和价格来源的版本化 Price Record 关联;缓存输入、Reasoning Unit、长上下文阶梯或 Priority Processing 可能采用不同费率。不能直接用今天的价格重算历史事件,而不保留当时估算所用的历史费率。
当供应商公开工具调用、媒体处理、Grounding、存储、Batch 或 Priority 等独立计费维度时,应分别记录,不要压缩为猜测的 Token 总数。若失败或中断响应没有返回用量,应标记为 Unknown,并通过供应商导出对账,而不是静默记为零。
用量数据来源
| 来源 | 最适合 | 选择前验证 |
|---|---|---|
| 响应 Usage | 低延迟产品分析与请求级证据。 | 检查缺失响应、流、重试与供应商特定字段。 |
| 网关账本 | 跨供应商标准化与租户分摊。 | 检查结构定义版本、重复事件与重试归属。 |
| 供应商用量导出 | 权威供应商侧聚合。 | 检查时区、延迟数据、模型别名与计费截止。 |
| 账单或合同 | 财务结算与审计。 | 检查抵扣、税费、承诺、特殊层级与非 Token 费用。 |
账本设计清单
追加按时间排序的用量证据,用调整事件纠错。
要求租户、Environment、Team、Product 与工作负载归属。
存储原生单位名、数值、来源与标准化版本。
用量元数据足够时,不记录提示词或输出内容。
建立对账循环
运营遥测提供快速估算,供应商导出和账单则在之后提供财务证据。对账负责连接两者。应按供应商和计费维度定义容差,因为舍入、延迟用量、币种转换与账单调整都可能产生合理差异。
- 采样 Trace,验证每个请求、Hop、Attempt 与计费动作都有稳定标识。
- 回放重试、故障切换、缓存命中、长流、取消与失败响应。
- 按模型、Project、区域与计费维度比较每日账本和供应商用量导出。
- 账期关闭前调查缺失用量、重复摄取、延迟事件和价格版本不一致。
- 核对账单,并为已匹配、已解释与未解释差异记录负责人和处理状态。
连接运营调用链与财务账本
应用生成父 Trace ID 与业务分摊标签;网关为每次 Provider Call(包括重试和故障切换)创建 Request ID 与子 Attempt。Usage Event 进入只追加账本,并携带确定性 Event Key、源时间与摄取时间,以便处理延迟或重复投递而不重复计数。
Pricing Service 根据事件发生时间解析当时生效的费率,生成与原始用量记录关联的估算。对账任务随后将供应商导出与账单对齐,通过追加 Adjustment 与支持证据处理差异,而不是重写历史。这样 Dashboard 可以快速展示请求成本,财务也能从账单行追溯到具体工作负载。
生产规则:未计入重试、故障切换、未知用量与非 Token 计费维度时,不得把结果称为完整模型成本。
单独追踪工具与实时数据费用
QVeris 调用外部 API、工具、服务与实时数据,其商业计量单位可能是请求、记录、席位、数据包或供应商专用 Credit,而不是 Token。应传播父 Trace、租户和工作负载标签,同时在独立工具账本中记录 Capability ID、外部供应商证据、单位、数量和价格版本。
模型账本与工具账本只在工作流报表层汇总。源记录保持独立,可避免昂贵的数据查询被误标为模型成本,也能清楚显示重试行为:一次模型重试可能复用已有工具结果,而另一条工作流则可能因新鲜度窗口过期而合理刷新。
使用版本化 Price Catalog 计算成本
同时保存原始用量与计算所使用的 Price Version。用今天价格重算历史 Event 会破坏审计能力,而只保存供应商返回的美元总额又无法进行分摊与异常复核。
- 用 Effective-From 与 Effective-To 时间把原生模型 ID 映射到价格。
- 把供应商费、网关费、工具、存储、税费、Credits 与折扣作为独立组件。
- 用于内部计费前,每日将账本汇总与供应商导出对账。
实施参考已根据官方资料核验:OpenTelemetry GenAI conventions。
可用于估算;计费应与供应商原生用量和账单对账。
把每次尝试归属到父工作负载,并标记最终处置。
仅在有正当理由且受治理时;用量追踪通常只需元数据。
官方资料与延伸阅读
供应商账单不足以支持产品决策,应用侧 Token 计数也不足以完成核算。应使用请求级证据连接两者并持续对账。

速览
连接 App 调用链、网关请求、供应商 Attempt、Response 与工具调用 ID。
记录成功、重试与回退用量,而不是只记录最终响应。
为分析映射单位,同时保留原生字段与计费维度。
比较内部账本与供应商导出,并解释每个重要差异。
证据模型
用量应先在 Provider Attempt 层记录,再汇总到用户请求与业务工作负载。每次尝试都应存储租户、Project、环境、工作负载、路由、供应商、不可变模型版本、原生 Request ID、输入输出单位、缓存维度、重试、延迟、状态和分摊标签。同时保留供应商原生值与标准化字段,避免后续报表抹去源端真正的计量方式。
Usage Event 还不等于成本。需要把它与带有币种、单位、生效时间和价格来源的版本化 Price Record 关联;缓存输入、Reasoning Unit、长上下文阶梯或 Priority Processing 可能采用不同费率。不能直接用今天的价格重算历史事件,而不保留当时估算所用的历史费率。
当供应商公开工具调用、媒体处理、Grounding、存储、Batch 或 Priority 等独立计费维度时,应分别记录,不要压缩为猜测的 Token 总数。若失败或中断响应没有返回用量,应标记为 Unknown,并通过供应商导出对账,而不是静默记为零。
用量数据来源
| 来源 | 最适合 | 选择前验证 |
|---|---|---|
| 响应 Usage | 低延迟产品分析与请求级证据。 | 检查缺失响应、流、重试与供应商特定字段。 |
| 网关账本 | 跨供应商标准化与租户分摊。 | 检查结构定义版本、重复事件与重试归属。 |
| 供应商用量导出 | 权威供应商侧聚合。 | 检查时区、延迟数据、模型别名与计费截止。 |
| 账单或合同 | 财务结算与审计。 | 检查抵扣、税费、承诺、特殊层级与非 Token 费用。 |
账本设计清单
追加按时间排序的用量证据,用调整事件纠错。
要求租户、Environment、Team、Product 与工作负载归属。
存储原生单位名、数值、来源与标准化版本。
用量元数据足够时,不记录提示词或输出内容。
建立对账循环
运营遥测提供快速估算,供应商导出和账单则在之后提供财务证据。对账负责连接两者。应按供应商和计费维度定义容差,因为舍入、延迟用量、币种转换与账单调整都可能产生合理差异。
- 采样 Trace,验证每个请求、Hop、Attempt 与计费动作都有稳定标识。
- 回放重试、故障切换、缓存命中、长流、取消与失败响应。
- 按模型、Project、区域与计费维度比较每日账本和供应商用量导出。
- 账期关闭前调查缺失用量、重复摄取、延迟事件和价格版本不一致。
- 核对账单,并为已匹配、已解释与未解释差异记录负责人和处理状态。
连接运营调用链与财务账本
应用生成父 Trace ID 与业务分摊标签;网关为每次 Provider Call(包括重试和故障切换)创建 Request ID 与子 Attempt。Usage Event 进入只追加账本,并携带确定性 Event Key、源时间与摄取时间,以便处理延迟或重复投递而不重复计数。
Pricing Service 根据事件发生时间解析当时生效的费率,生成与原始用量记录关联的估算。对账任务随后将供应商导出与账单对齐,通过追加 Adjustment 与支持证据处理差异,而不是重写历史。这样 Dashboard 可以快速展示请求成本,财务也能从账单行追溯到具体工作负载。
生产规则:未计入重试、故障切换、未知用量与非 Token 计费维度时,不得把结果称为完整模型成本。
单独追踪工具与实时数据费用
QVeris 调用外部 API、工具、服务与实时数据,其商业计量单位可能是请求、记录、席位、数据包或供应商专用 Credit,而不是 Token。应传播父 Trace、租户和工作负载标签,同时在独立工具账本中记录 Capability ID、外部供应商证据、单位、数量和价格版本。
模型账本与工具账本只在工作流报表层汇总。源记录保持独立,可避免昂贵的数据查询被误标为模型成本,也能清楚显示重试行为:一次模型重试可能复用已有工具结果,而另一条工作流则可能因新鲜度窗口过期而合理刷新。
使用版本化 Price Catalog 计算成本
同时保存原始用量与计算所使用的 Price Version。用今天价格重算历史 Event 会破坏审计能力,而只保存供应商返回的美元总额又无法进行分摊与异常复核。
from decimal import Decimal
def request_cost(usage, price):
million = Decimal("1000000")
uncached = Decimal(usage["input_tokens"] - usage.get("cached_input_tokens", 0))
cached = Decimal(usage.get("cached_input_tokens", 0))
output = Decimal(usage["output_tokens"])
return {
"input_usd": uncached / million * Decimal(price["input_per_mtok"]),
"cached_input_usd": cached / million * Decimal(price.get("cached_input_per_mtok", 0)),
"output_usd": output / million * Decimal(price["output_per_mtok"]),
"price_version": price["version"],
"currency": "USD",
}
# Persist the original usage event and each calculated component.- 用 Effective-From 与 Effective-To 时间把原生模型 ID 映射到价格。
- 把供应商费、网关费、工具、存储、税费、Credits 与折扣作为独立组件。
- 用于内部计费前,每日将账本汇总与供应商导出对账。
实施参考已根据官方资料核验:OpenTelemetry GenAI conventions。
FAQ
可用于估算;计费应与供应商原生用量和账单对账。
把每次尝试归属到父工作负载,并标记最终处置。
仅在有正当理由且受治理时;用量追踪通常只需元数据。
