bug: Bedrock reasoning parsing in Dataset Runs and Playground

该报错通常出现在 Langfuse 自托管环境中,使用 Bedrock 连接的自定义模型(例如 openai.gpt-oss-20b-1:0 )在 Playground 或 Dataset Runs 中处理带 reasoning 的响应时发生。优先排查 Bedrock 返回的 reasoning_c

快速结论:该报错通常出现在 Langfuse 自托管环境中,使用 Bedrock 连接的自定义模型(例如 openai.gpt-oss-20b-1:0)在 Playground 或 Dataset Runs 中处理带 reasoning 的响应时发生。优先排查 Bedrock 返回的 reasoning_content 字段是否为结构化对象或数组,而非字符串。

适用环境:Langfuse 自托管 v3.133.0;模型提供方为 AWS Bedrock;涉及模型为 openai.gpt-oss-20b-1:0。Issue 中未确认操作系统、Python、CUDA、显卡或 SDK 版本。

最快修复方案:暂无确认的一步修复方案。Issue 讨论表明不存在配置层面的绕过方法,需要代码层面适配 Bedrock 的结构化响应格式。

注意事项:Issue 已关闭且打了 stale 标签,但讨论摘要中未记录已验证的修复提交或版本号,因此不要直接认定新版本已修复。可优先尝试改用返回纯文本的模型或临时关闭 reasoning/thinking 模式,这属于规避手段,Issue 中未验证其有效性。

问题场景

用户已为 AWS Bedrock 添加 LLM Connection,并将 openai.gpt-oss-20b-1:0 作为自定义模型接入。在 Playground 中选择该模型发送请求,或使用同一 Bedrock 配置执行 Dataset Run 时触发解析问题。用户期望 Playground 能把响应拆分为 reasoning 和最终输出两部分,Dataset Run UI 也能像查看 Evaluators 那样展示 reasoning 内容。

报错原文

Error: Cannot coerce "reasoning_content" message part into a string.

原因分析

可能原因是:Langfuse 在处理消息内容时,期望 Bedrock 返回的 reasoning_content 为字符串,而 gpt-oss 20b 及其他部分 Bedrock 模型会将该字段返回为结构化对象或数组。UI 在解析并分别展示 reasoning 与最终输出时,无法把该结构强制转换为字符串,于是 Playground 与 Dataset Runs 出现同一报错。该问题与 #10232、#8855 中记录的历史问题相关。

环境排查

  • 确认 Langfuse 是否为自托管部署,以及当前版本(Issue 报告为 v3.133.0)。
  • 确认 LLM Connection 是否为 AWS Bedrock,自定义模型 ID 是否为 openai.gpt-oss-20b-1:0。
  • 确认该模型实际返回的 reasoning_content 是字符串还是对象/数组,最简单的方法是在 Playground 直接请求并查看原始响应或日志。
  • 确认问题是否只出现在 gpt-oss 20b,还是其他 Bedrock reasoning 模型也会复现。
  • Issue 未提供 Python、CUDA、PyTorch、显卡或 SDK 版本信息,这些项目无法据此排查。

解决步骤

  1. 复现并定位字段格式:在 Playground 中对 openai.gpt-oss-20b-1:0 发一次请求,查看原始响应中 reasoning_content 的实际结构,确认它是否为对象或数组。
  2. 改用兼容模型验证:如果换成返回纯文本的 Bedrock 模型(如 Issue 提到的 Anthropic Claude)后 Playground 与 Dataset Runs 正常,说明问题集中在结构化 reasoning 响应的解析上。此步骤为规避验证,不代表根本修复。
  3. 如模型支持,临时关闭 reasoning/thinking 模式后重试,仅作为可优先尝试的规避手段。
  4. 等待或跟进代码层面修复:该问题需由 Langfuse 侧适配 Bedrock 的结构化响应格式,Issue 讨论中未给出可自行修改的配置项或补丁。

验证方法

在 Playground 中使用目标 Bedrock 模型发送请求,确认不再出现 Cannot coerce "reasoning_content" message part into a string.,且 reasoning 与最终输出能分别展示;随后用同一配置执行一次 Dataset Run,确认结果可正常解析和查看。若仅更换模型或关闭 reasoning 后恢复,则属于规避成功,原模型的结构化 reasoning 解析问题仍可能未解决。

参考来源

langfuse/langfuse #10646

langfuse/langfuse #10232

langfuse/langfuse #8855

langfuse/langfuse #10483

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 30882

发表回复

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