Manual observation evaluation batches report success after scheduling fails

这个报错通常出现在使用 Langfuse 手动观测评估(manual observation evaluation)批量任务时,评测任务实际没有成功进入队列,但批次仍然被标记为 COMPLETED 且 failedCount=0,本质是调度错误被吞掉。优先排查 scheduler 队列 add()

快速结论:这个报错通常出现在使用 Langfuse 手动观测评估(manual observation evaluation)批量任务时,评测任务实际没有成功进入队列,但批次仍然被标记为 COMPLETED 且 failedCount=0,本质是调度错误被吞掉。优先排查 scheduler 队列 add() 调用是否失败,以及批次失败计数是否覆盖了 assignment 错误。

适用环境:Issue 中确认涉及 Langfuse 的 observation evaluation 功能、worker 中的 scheduleObservationEvals 与 processBatchedObservationEval 流程,以及手动路由所需的 events preview flag。Issue 未提供操作系统、Python、CUDA、显卡或依赖版本信息。

最快修复方案:该问题已在 langfuse/langfuse 中修复,维护者确认将包含在下一个 release 中。升级到包含该修复的 Langfuse 版本即可。

注意事项:Issue 中的复现使用的是生产函数加 mocked infrastructure,并非真实线上故障;修复后仍需确认调度失败能正确进入批次失败计数。若暂时无法升级,可优先检查队列 add() 是否报错,但 Issue 未给出临时绕过方案。

问题场景

用户在 Langfuse 中运行手动观测评估(manual observation evaluation)批量任务,流程为:提供有效的 observation 和匹配的 evaluator,S3 上传与 execution 创建均成功,但队列的 add() 调用被拒绝。此时批次没有任务真正入队,却仍然报告 COMPLETED,processedCount=1、failedCount=0、log=null。作为对照,S3 上传失败时能正确产生 FAILED。该问题通过生产函数配合 mocked infrastructure 复现,不是实时线上故障;手动路由需要启用 events preview flag。

报错原文

Manual observation evaluation batches report success after scheduling fails

Actual: zero queued jobs; batch COMPLETED, processedCount=1, failedCount=0, log=null.
Expected: batch FAILED, processedCount=0, failedCount=1, with the scheduling error in its log.

Simulated queue enqueue failure

原因分析

最可能的原因是 scheduleObservationEvals 中记录了 assignment 错误,但没有把错误向上传播。批次处理器因此把 scheduler 调用当作成功处理,导致评测任务实际上没有进入队列,而批次仍被计为成功完成。Issue 作者提出的修复方向是:收集 assignment 失败,等待所有尝试结束后,再抛出聚合错误,使现有的批次失败计数逻辑能够生效。

环境排查

  • 确认 Langfuse 版本是否已包含该修复;维护者表示会进入下一个 release。
  • 确认是否启用 events preview flag,手动路由依赖该 flag。
  • 确认 observation evaluation 的 S3 上传与 execution 创建流程是否成功。
  • 确认队列依赖的 add() 调用是否可能 reject,例如队列不可用或权限问题。
  • 确认批次返回的 processedCount、failedCount 与 log 字段是否符合预期。
  • Issue 未提供 Python、CUDA、PyTorch、显卡等版本信息,无需补充排查。

解决步骤

  1. 升级 Langfuse 到包含该修复的版本;Issue 已关闭,维护者确认“Fixed. Will be part of next release.”。
  2. 升级后复现原场景:提供一个有效 observation 和一个匹配 evaluator,让 S3 上传与 execution 创建成功,并让队列 add() 拒绝,观察批次结果。
  3. 检查批次是否返回 FAILED,以及 failedCount 是否至少为 1,同时 log 中是否包含调度错误信息。
  4. 如果仍看到 COMPLETED 且 failedCount=0,检查当前运行版本是否确实包含该修复,并重新确认 events preview flag 与队列配置。
  5. Issue 作者提到的“orphaned PENDING execution recovery”被有意保持独立处理,排查时不要把两者混在一起。

验证方法

使用与 Issue 相同的复现路径验证:模拟队列 add() 抛出 Simulated queue enqueue failure,预期批次状态为 FAILED、processedCount=0、failedCount=1,并且调度错误出现在 log 中。若批次仍显示 COMPLETED 且 failedCount=0,则说明修复未生效或版本不匹配。

参考来源

langfuse/langfuse #18306

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 27677

发表回复

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