
bug: missing cost and token metrics on DRI table
快速结论:该问题发生在使用 Langfuse JS/TS SDK 对数据集运行实验(Experiment)时,尽管 Trace 级别已经正确记录了 cost 和 token 信息,但 DRI(Dataset Run Item)表以及 Run 级别聚合统计中的总成本、平均成本均为空。优先排查 cost 在 ingestion 时是否包含了 total 字段,以及 SDK 的 cost schema 是否与 UI 期望的字段名一致。
问题场景
用户在 Langfuse Cloud(或 self-hosted)上,通过 @langfuse/client 和 @langfuse/otel 等 SDK(v4.2.0)配合 Vercel AI SDK(v5.0.35)执行 dataset 实验。实验中,generateObject 调用通过 experimental_telemetry 正确记录了 cost 到 Trace,但实验的 Run 级别和 Run Item 级别的聚合指标(总 cost、平均 cost)均未显示。
报错原文
Cost and token metrics are missing at both run level and run item level in the experiment DRI table, even though trace-level cost details are present.
原因分析
这是一个已知的 cost 聚合问题。可能原因包括:
- 聚合逻辑未将 Trace 级别的 cost 传播到更高层的实验指标(Run / Run Item)中。
- UI 端期望 cost 在
costDetails对象下有一个名为total的关键字段,如果该字段缺失或命名不匹配,则 UI 可能在显示时将其视为 0。 - 后端或前端聚合逻辑存在 bug,近期代码库虽然有命名一致性及聚合方面的更改,但若聚合未正确执行,问题仍会存在。
环境排查
- Langfuse SDK 版本:
@langfuse/client^4.2.0,@langfuse/otel^4.2.0,@langfuse/tracing^4.2.0 - Vercel AI SDK 版本:
ai^5.0.35 - 使用环境:Langfuse Cloud(若 self-hosted,需确认版本及数据库结构)
解决步骤
- 检查 cost ingestion 字段名:确认在 ingestion 的
costDetails中,是否显式设置了total字段。例如,{"costDetails": {"total": 0.002, ...}}。如果使用了其他自定义键名,UI 可能不会识别。 - 验证 Trace 数据格式:在 UI 中查看具体 Trace 的原始 JSON,确认 cost 字段是否包含在预期位置(如
usage或costDetails),并且total键存在且值非零。 - 升级 SDK 版本:更新
@langfuse/client及相关包到最新版本,已知后续版本有关于 cost 聚合的修复。可优先尝试此项。 - 检查实验聚合逻辑:如果上述步骤无效,可能是后端或前端聚合逻辑的 bug。可提交新 Issue 或查阅已知 PR(如 #9468)是否已合并。
验证方法
重新运行实验后,检查 UI 中的 DRI 表格:Run 级别和 Run Item 级别是否显示总 cost 和平均 cost。同时查看 Trace 详情页面,确认 cost 数据无误。


