bug: UI displays $0 per-user cost despite correct non-zero value in API and frontend state

用户运行自托管的 Langfuse(版本 v3.167.4 OSS),在追踪中为不同用户生成了带有输入/输出 Token 的数据,随后在 UI 的“每位用户成本”视图中看到成本显示为 $0,但浏览器开发者工具和 curl 确认 API 响应中的成本值为非零。

快速结论:该问题发生于 Langfuse 自托管实例中,UI 显示每位用户成本为 $0,但 API 实际返回了非零的正确成本值。优先排查前端格式化函数 usdFormatter(value, 2, 2) 导致的精度舍入问题。

问题场景

用户运行自托管的 Langfuse(版本 v3.167.4 OSS),在追踪中为不同用户生成了带有输入/输出 Token 的数据,随后在 UI 的“每位用户成本”视图中看到成本显示为 $0,但浏览器开发者工具和 curl 确认 API 响应中的成本值为非零。

报错原文

UI display: $0
API response: non-zero cost
Frontend state (inspected): non-zero cost

原因分析

可能原因是前端 usdFormatter 函数的精度限制。该函数在“每位用户成本”视图中被调用时传入参数 usdFormatter(value, 2, 2),这将输出强制保留 2 位小数(最小和最大分数位数均为 2)。任何小于 $0.005 的成本值在舍入后都会显示为 $0.00,即使 API 返回了正确的非零浮点数值。代码库中已有类似场景的处理模式:EstimatedCostRow 组件会对极小成本显示为 “< $0.01",但该逻辑未应用于用户成本视图。

环境排查

  • 确认 Langfuse 版本是否为 v3.167.4 OSS(或相近版本)。
  • 通过浏览器开发者工具 Network 面板检查用户成本 API 响应的原始数值。
  • 确认用户的实际成本是否小于 $0.01(例如小于 $0.005 的成本值)。

解决步骤

  1. 可优先尝试:web/src/pages/project/[projectId]/users.tsx 中定位调用 usdFormatter 的位置(约第 459-463 行),将参数从 usdFormatter(value, 2, 2) 修改为更灵活的小数精度(例如 usdFormatter(value, 2, 6) 以支持更多小数位)。
  2. 或者复用在 EstimatedCostRow 组件中的逻辑(位于 web/src/features/batch-actions/components/RunEvaluationDialog/EstimatedCostRow.tsx 第 18-21 行),为极小成本值显示 “< $0.01"。
  3. 考虑实现动态精度:当数值低于某一阈值(例如 $0.01)时自动显示更多小数位数,确保非零值不被舍入为 0。

验证方法

修改代码后重启 Langfuse 前端服务,在 UI 中导航至“每位用户成本”视图,检查原本显示 $0 的条目是否显示正确的非零货币值(例如 $0.003 或 < $0.01),并与 API 响应进行对比确认一致。

参考来源

langfuse/langfuse #13353

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 16214

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注