bug: loss of precision in BigInt values in reported trace

用户在 Langfuse 云版 v3.52.0 上使用 trace.update() 或类似 API 更新 Trace,并在 output 中传递了包含 BigInt 类型字段的自定义数据。

bug: loss of precision in BigInt values in reported trace

bug: loss of precision in BigInt values in reported trace

快速结论:该报错通常在 Langfuse 前端展示包含 BigInt 字段的 Trace 时触发,优先排查 packages/shared/src/server/utils/transforms/stringify.ts 中的 stringify 函数是否将 BigInt 转成了 Number

问题场景

用户在 Langfuse 云版 v3.52.0 上使用 trace.update() 或类似 API 更新 Trace,并在 output 中传递了包含 BigInt 类型字段的自定义数据。

报错原文

loss of precision in BigInt values in reported trace

原因分析

可能原因:Langfuse 在将后端数据序列化并发送给前端时,使用了 stringify 函数(基于 JSON.stringify 的自定义 replacer),该 replacer 将 BigInt 值通过 Number.parseInt(value.toString()) 转换为 Number 类型。对于超过 Number.MAX_SAFE_INTEGER(9,007,199,254,740,991)的 BigInt 值,此转换会导致精度丢失。

环境排查

  • 确认 Langfuse 版本是否是 cloud v3.52.0(或涉及 stringify.ts 的版本)。
  • 检查 trace output 中是否包含 BigInt 字段,以及该字段的值是否超出 Number.MAX_SAFE_INTEGER
  • 查看 packages/shared/src/server/utils/transforms/stringify.tsstringify 函数的实现。

解决步骤

  1. 可优先尝试:修改 stringify 函数,将 BigInt 序列化为字符串而不是数字。例如,将 replacer 中的 Number.parseInt(value.toString()) 替换为 value.toString()
  2. 如果无法修改源码,可在业务代码中先将 BigInt 字段手动转为字符串(如 field: bigintValue.toString())再传入 trace update。
  3. 确认修改后重新部署 Langfuse 服务。

验证方法

用包含大 BigInt 值(如 12345678901234567890n)的 trace 更新,检查前端 Trace 详情页中该字段是否显示为完整、无精度损失的字符串/值。

参考来源

langfuse/langfuse #6628

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 9769

发表回复

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