快速结论:该问题发生在通过 OpenTelemetry 上报 Trace 数据时,Trace 列表页(trace list)和 Observation 列表页不展示 input/output 详情,但 Trace 详情页(trace detail view)中数据正确。优先排查上传的根 span 是否携带了结构化数据(对象或数组),以及 root span 的 input/output 是否为纯字符串。
问题场景
用户在 Langfuse Cloud 中通过 OpenTelemetry 上传 Trace 数据后,观察 Trace 列表页与 Observation 列表页,发现 input/output 字段显示为空,但进入具体的 trace 详情视图后,input 和 output 内容正常可见。
报错原文
bug: The trace and observation lists do not display input and output by otel
界面截图显示列表中 input/output 列空白,但详情页内能够正确渲染 input/output 数据。
原因分析
这是一个已知问题,与 Langfuse 在 OTel 数据摄入时如何将根 span(root span)的 input/output 映射到 trace 层级字段有关。后端映射逻辑仅在根 span 的 input/output 为 纯字符串 时生效;如果发送的是结构化数据(例如 JSON 对象或数组),则映射不会触发,导致 trace 层级的列表字段为空。但由于数据仍然正确存储在 observation 级别,因此 trace 详情视图可以正常显示 input 和 output。
环境排查
- 确认使用的 Langfuse 版本(issue 中为 Langfuse Cloud,未自托管)。
- 确认上传 OTel 数据时,根 span 中 input/output 的数据类型(字符串 vs 对象/数组)。
- 确认根 span 是否没有父 span(即 parent span ID 为空)——只有根 span 会创建 trace 级别字段。
- 确认 SDK 与 OpenTelemetry 集成版本(issue 中仅标注“via otel”)。
解决步骤
- 将 input/output 转为纯字符串:在 OTel 根 span 上,将 input 和 output 字段以 JSON 序列化后的字符串形式发送(例如 JSON.stringify 后的结果),而非直接传递对象或数组。这是问题最直接的规避方案。
- 显式设置 trace 级别 input/output:如果 SDK 支持,在 span 结束后调用类似
update_trace的 API,明确为 trace 层级设置 input/output 字段。 - 确认根 span 的正确性:检查上传的 span 是否确实为根 span(无父 span)。只有根 span 才会被映射为 trace 记录。
- 跟踪上游修复进展:该问题在 Langfuse 的 GitHub 仓库中已被跟踪(#9970),相关 PR 已逐步改进了 OTel 属性映射逻辑,但结构化数据到 trace 级别的映射限制仍未完全解决。可优先尝试上述工作方式。
验证方法
将 OTel 上报代码中根 span 的 input 和 output 字段改为纯字符串发送,然后查看 Langfuse Trace 列表页,确认 input/output 列能够正确显示内容;同时确认 trace 详情页数据无异常。改动后重新上传一次 trace 即可验证。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


