bug: Responses API doesn’t log input and output correctly in async gather context

该问题出现在使用 Langfuse 的 OpenAI 封装调用 responses.create() ,且调用发生在 asyncio.gather 并发上下文时;Trace 中 input 显示为 [] 、output 显示为 null 。优先排查点应放在 Langfuse 对异步调用与 Respo

快速结论:该问题出现在使用 Langfuse 的 OpenAI 封装调用 responses.create(),且调用发生在 asyncio.gather 并发上下文时;Trace 中 input 显示为 []、output 显示为 null。优先排查点应放在 Langfuse 对异步调用与 Responses API 的追踪兼容性上,而非业务代码本身。

适用环境:自托管 Langfuse v3.49.1,Python SDK 2.60.2;使用 Langfuse 的 openai.AsyncOpenAI 与 @observe、langfuse_context;模型为 gpt-3.5-turbo。Issue 未提供操作系统、Python、CUDA、显卡等环境信息。

最快修复方案:暂无确认的一步修复方案。可优先尝试:在需要正确记录 input/output 的场景改用 chat.completions.create(),或避免在 asyncio.gather 并发上下文中调用 responses.create()。这两种做法均为规避思路,Issue 中未验证可彻底解决。

注意事项:切换为 chat.completions.create() 只是绕过 Responses API 的兼容性问题,并不意味着 Responses API 已被修复;是否与并发数量、flush() 时机或 SDK 版本相关,Issue 中未给出验证结论。

问题场景

用户在 Python 脚本中使用 Langfuse 的 OpenAI 封装(from langfuse import openai,openai.AsyncOpenAI()),在 @observe 装饰的父函数里通过 asyncio.gather 并发执行多个子任务。子任务内调用 responses.create() 时,Langfuse Trace 的 input 为空数组、output 为 null;同一结构改用 chat.completions.create() 时,input 与 output 均能正常记录。复现代码中 use_responses_api=True 即触发问题。

报错原文

bug: Responses API doesn't log input and output correctly in async gather context

input shows as []
output shows as null

原因分析

可能原因:Langfuse 对异步操作的支持存在限制,导致在 asyncio.gather 并发上下文中无法正确捕获 responses.create() 的请求与响应数据。Issue 讨论认为 chat.completions.create() 与 Langfuse 现有异步处理机制的集成更好,因此表现正常;而 Responses API 的追踪可能未完全适配该异步路径。需要注意的是,评论中关于异步支持有限的说明属于推测性解释,Issue 未给出根因确认或修复提交说明。

环境排查

  • 确认 Langfuse 自托管版本是否为 v3.49.1(Issue 报告版本)。
  • 确认 Python SDK 版本是否为 2.60.2。
  • 确认调用使用的是 langfuse.openai 的 AsyncOpenAI,而非原生 openai 客户端。
  • 确认调用是否运行在 asyncio.gather 等并发异步上下文中。
  • 确认 @observe 装饰的父 observation 是否在并发子任务返回后才调用 update_current_observation 与 flush()。
  • Issue 未涉及 CUDA、PyTorch、显卡或节点环境,无需在此项排查。

解决步骤

  1. 先在不修改业务逻辑的前提下复现:将 use_responses_api 分别设为 False 和 True 各运行一次,确认只有 True 时 input/output 异常。
  2. 可优先尝试规避方案一:把 responses.create() 替换为 chat.completions.create(),采用 ChatCompletionSystemMessageParam 与 ChatCompletionUserMessageParam 构造 messages。
  3. 可优先尝试规避方案二:如果必须使用 Responses API,暂时避免在 asyncio.gather 中并发调用,改为串行执行,观察 Trace 中 input/output 是否恢复。
  4. 检查自托管 Langfuse 与 Python SDK 版本,关注后续版本对 Responses API 异步追踪的支持情况;Issue 未提供已验证的升级版本号,不要臆断具体版本。
  5. 若问题仍存在,在 Issue 或新工单中补充最小复现代码与版本信息,便于维护者定位。

验证方法

运行复现脚本后,在 Langfuse 中查看对应 Trace:若 observation 的 input 不再是 []、output 不再是 null,且能看到实际发送的 messages 与模型返回内容,说明记录恢复正常。对父 observation,还应确认 gathered_results 能被正确写入 output。

参考来源

langfuse/langfuse #6686

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 29584

发表回复

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