
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.ts中stringify函数的实现。
解决步骤
- 可优先尝试:修改
stringify函数,将BigInt序列化为字符串而不是数字。例如,将 replacer 中的Number.parseInt(value.toString())替换为value.toString()。 - 如果无法修改源码,可在业务代码中先将
BigInt字段手动转为字符串(如field: bigintValue.toString())再传入 trace update。 - 确认修改后重新部署 Langfuse 服务。
验证方法
用包含大 BigInt 值(如 12345678901234567890n)的 trace 更新,检查前端 Trace 详情页中该字段是否显示为完整、无精度损失的字符串/值。



