快速结论:该问题发生于 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 的成本值)。
解决步骤
- 可优先尝试:在
web/src/pages/project/[projectId]/users.tsx中定位调用usdFormatter的位置(约第 459-463 行),将参数从usdFormatter(value, 2, 2)修改为更灵活的小数精度(例如usdFormatter(value, 2, 6)以支持更多小数位)。 - 或者复用在
EstimatedCostRow组件中的逻辑(位于web/src/features/batch-actions/components/RunEvaluationDialog/EstimatedCostRow.tsx第 18-21 行),为极小成本值显示 “< $0.01"。 - 考虑实现动态精度:当数值低于某一阈值(例如 $0.01)时自动显示更多小数位数,确保非零值不被舍入为 0。
验证方法
修改代码后重启 Langfuse 前端服务,在 UI 中导航至“每位用户成本”视图,检查原本显示 $0 的条目是否显示正确的非零货币值(例如 $0.003 或 < $0.01),并与 API 响应进行对比确认一致。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


