快速结论:该 Bug 出现在使用 `langfuse.run_experiment` 时,如果数据集(dataset)项的 `metadata` 中包含与实验运行参数(如 `name`)同名的键,该项元数据会覆盖传入的运行级元数据。优先排查是否在数据集项中定义了与运行参数冲突的键,并升级到含修复的 SDK 版本。
适用环境:Langfuse Python SDK(langfuse-python),可能同时影响 JS/TS SDK(langfuse-js)。Langfuse Cloud 和自托管环境均受影响,具体 SDK 版本及 Python/CUDA 等依赖未在 Issue 中明确。
最快修复方案:暂无确认的一步验证方案(已修复但未发布正式版本)。团队已通过 PR langfuse-python#1756 修复了元数据优先级问题:运行级元数据现在会优先于数据集项的元数据。升级到包含该修复的下一个 Python SDK 发布版本即可。
注意事项:若无法立即升级 SDK,可临时避免在数据集项的 `metadata` 中定义与 `run_experiment` 参数同名的键(如 `experiment_run_name`、`name` 等)。JS/TS SDK 的对应修复见 PR langfuse-js#870。
问题场景
用户在调用 `langfuse.run_experiment` 时,传入的 `name` 参数被数据集项的 `metadata` 中同名键覆盖,导致 trace 中的 `experiment_run_name` 显示的是历史实验运行名称而非本次传入的参数。
报错原文
bug: python SDK run_dataset lets item metadata overwrite run metadata
The item metadata trumps all other sources of metadata, including any run metadata passed into the entry point.
原因分析
可能原因:在 Langfuse Python SDK 的 `run_dataset` 逻辑中,数据集项的 `metadata` 被全量合并到运行级元数据时,未正确实现优先级策略(运行级元数据应优先于数据集项元数据),导致同名字段被后者覆盖。该问题在 langfuse/_client/client.py 第 2955 行附近。
环境排查
- 确认使用的 Langfuse Python SDK 版本(建议升级到最新,或等待修复版本发布)。
- 检查数据集项的 `metadata` 中是否包含与 `run_experiment` 参数同名的字段(如 `experiment_run_name`、`name`)。
- 如自托管,检查 Langfuse 服务端版本(本问题与服务器版本无关)。
解决步骤
- 升级 SDK:等待并升级到包含修复的 Python SDK 版本(参考 PR #1756,通常会在下一版本发布)。
- 临时规避:如果暂时无法升级,在创建数据集项时,避免将 `experiment_run_name`、`name` 等运行参数放入 `metadata` 中。或者手动在调用 `run_experiment` 后覆盖 trace 的对应字段。
- 检查 JS/TS SDK:如果使用 JS 版本,同样需要升级(参考 PR #870)。
验证方法
运行 `run_experiment` 并传入与数据集项 metadata 同名的参数(例如 `name=”my-experiment”`),检查生成的 trace 中 `experiment_run_name` 是否等于传入的值。若为传入值,则问题已解决。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


