
bug: tool config does not get passed in dataset experiments via UI
快速结论:该报错发生在通过 Langfuse UI 创建数据集实验(Dataset Experiment)并选择已配置工具(Tool Config)的提示词(Prompt)时,实验运行过程中工具配置(tools 和 tool_choice)不会被传递给 LLM 调用。优先排查实验流程中的数据传递链路是否缺失工具配置字段。
问题场景
用户在 Langfuse UI 中创建一个包含工具配置(Tool Config)的提示词(Prompt),然后使用该提示词创建一个数据集实验(Dataset Experiment)。实验运行后,底层的 LLM 调用并未携带原提示词中定义的 tools 和 tool_choice 参数,导致工具功能失效。
报错原文
bug: tool config does not get passed in dataset experiments via UI
When selecting a prompt for a dataset experiment via UI, the tool config is not passed to the LLM invocation
原因分析
这是一个经过确认的功能缺失(gap),而非数据传递的偶发错误。工具配置(tools 和 tool_choice)在提示词上已正确定义,但实验流程中以下三层均未支持传递该配置:
- UI 层:
CreateExperimentData模式和PromptModelStep表单组件未捕获工具配置字段。 - API 层:
ExperimentMetadata模式仅存储prompt_id、provider、model、model_params和structured_output_schema,缺少tools或tool_choice。 - Worker 层:实验处理器(experiment handler)调用
fetchLLMCompletion()时,虽然该函数本身支持tools参数,但实验处理器从未传递该参数。
总结:底层 LLM 调用基础设施已支持工具配置,但实验流程未从提示词中提取并传递这些配置。
环境排查
- Langfuse 版本:Self-hosted v3.207.0(该版本中确认存在此问题)
- 确认是否使用了包含工具配置(
tools和tool_choice)的提示词创建数据集实验 - 确认其他类型的实验(如非 UI 创建)是否也存在相同问题(推测为通用缺失)
解决步骤
该问题需要代码层面的修复,暂未发布补丁。可能的修复方向如下(可优先尝试自行贡献或等待官方更新):
- 扩展 UI 层:在
PromptModelStep表单组件中添加对tools和tool_choice字段的支持。 - 扩展 API 层:更新
ExperimentMetadata模式,增加tools和tool_choice字段。 - 扩展 Worker 层:在实验处理器中,从提示词配置中提取
tools和tool_choice,并将其传递给fetchLLMCompletion()函数(该函数在第 168 行已支持tools参数,见packages/shared/src/server/llm/fetchLLMCompletion.ts)。 - 参考已有实现:此前结构化输出模式(structured output schema)的支持通过 PR #9437 以类似方式添加,可作为实现工具配置支持的参考模式。
验证方法
修复后,通过 UI 创建一个包含工具配置的提示词,并用该提示词运行一个数据集实验。检查实验输出的 LLM 调用日志或响应,确认 tools 和 tool_choice 是否被正确传递给模型。若工具按预期被调用,则问题已解决。



