Corrupted evaluation-rule filter prevents disabling or deleting an active rule via public API

该报错发生在 Langfuse 公共 API 操作包含 LLM-as-a-judge 分配的迁移版评估规则时,所有公共 API 操作(含禁用和删除)都会返回 HTTP 500。优先排查规则中是否使用了 booleanObject 或 positionInTrace 过滤器变体,这两种变体未被 Fer

快速结论:该报错发生在 Langfuse 公共 API 操作包含 LLM-as-a-judge 分配的迁移版评估规则时,所有公共 API 操作(含禁用和删除)都会返回 HTTP 500。优先排查规则中是否使用了 booleanObjectpositionInTrace 过滤器变体,这两种变体未被 Fern 契约覆盖,导致序列化失败。

适用环境:Langfuse Cloud,公共 API/CLI schema 4.10.0,2026-08-23 观察到;相关代码在 web/src/features/evals/server/unstable-public-api/ 目录。

最快修复方案:暂无确认的一步修复方案。Issue 提出将 PATCH 禁用和 DELETE 路径改为直接操作数据库存储记录,绕过公共 API 序列化层(Option 1),以及跳过从 existingPublic 派生 nextFilter(Option 2),但均未在 Issue 中验证。

注意事项:以上修复方案仅基于代码分析和评论推断,尚未经过测试验证;在官方修复发布前,公共 API 无法安全禁用或删除此类规则,需通过其他管理界面操作。

问题场景

用户在 Langfuse Cloud 中通过公共 API 操作一个迁移后的评估规则(migrated/v2 evaluation rule),该规则包含两个 LLM-as-a-judge 分配并正在产生评分。对该规则执行任何公共 API 操作时,均返回 HTTP 500 错误,包括读取详情、仅禁用({"enabled": false})、完整替换过滤器后禁用、删除以及列表查询。同一项目中其他使用正常 isRootObservation = true 过滤器的规则可以正常读写和禁用,说明不是项目权限问题。

报错原文

{"message":"Evaluation rule filter is corrupted","code":"internal_error"}

原因分析

可能原因:PR #15248(2026-07-23 合并)引入了 toApiWritableEvaluationRule(config) 函数,该函数对损坏或不支持的过滤器目标会直接抛异常。updatePublicEvaluationRuledeletePublicEvaluationRule执行任何变更操作之前都会先调用该序列化函数,导致损坏的过滤器在读取阶段就触发异常,规则变得不可管理。

具体来说,booleanObjectpositionInTrace 过滤器变体未被 Fern 契约(commons.EvaluationRuleFilter)覆盖,遗留规则使用任一变体都会导致适配器无法序列化。另一处相关数据点:PR #15994(2026-08-11 合并)虽然重构了删除机制,但适配器序列化仍然在删除尝试之前运行,因此问题未被解决。

环境排查

  • 确认 Langfuse 环境类型(Cloud 或自托管)及版本。
  • 检查公共 API/CLI schema 版本是否为 4.10.0 或更高。
  • 检查受影响的评估规则是否来自旧版本迁移,是否包含 LLM-as-a-judge 分配。
  • 检查规则过滤器中是否使用了 booleanObjectpositionInTrace 过滤变体。
  • 对比同一项目中其他正常规则的结构,确认差异。
  • 如果使用自托管环境,检查 web/src/features/evals/server/unstable-public-api/evaluation-rule-service.tsadapters.ts 中相关函数是否与 Issue 描述一致。

解决步骤

  1. 可优先尝试:使用 Langfuse 管理界面而非公共 API 来操作受影响的规则,检查是否能通过 UI 停止或删除规则。
  2. 可优先尝试:检查项目设置中是否有“迁移”或“兼容模式”选项,尝试回退规则配置到旧版格式。
  3. 可优先尝试:创建一条新规则替代旧规则,避免继续产生成本。
  4. 联系 Langfuse 支持团队,提供规则 ID 和完整的 JSON 配置,说明公共 API 无法操作的情况。
  5. 关注官方修复进度:参考 Issue #16445 中的 Option 1(PATCH 禁用和 DELETE 路径直接操作 DB 记录,绕过公共 API 序列化)和 Option 2(完整替换过滤器时跳过从 existingPublic 派生 nextFilter)。
  6. 如果自托管环境,可考虑应用 PR #15994 的修复,但需注意该 PR 仅解决了删除机制,未解决序列化前置调用问题。

验证方法

在修复后,对同一评估规则执行以下操作验证:GET /api/public/unstable/evaluation-rules/{id} 能返回规则详情(可能含损坏警告),PATCH 仅发送 {"enabled": false} 能成功禁用规则,DELETE 能成功删除规则。确认操作不再返回 HTTP 500,且规则停止产生评分和费用。

参考来源

langfuse/langfuse #16445

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 20040

发表回复

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