Bedrock evaluators fail on any observation that carries media (Cloud)

在 Langfuse Cloud 上,只要 LLM-as-a-judge 评测把带图(image/jpeg)的观察值映射给 Bedrock 模型,请求就会在真正调用模型前被拦下,报错提到 Bedrock evaluators fail on any observation that carries

快速结论:在 Langfuse Cloud 上,只要 LLM-as-a-judge 评测把带图(image/jpeg)的观察值映射给 Bedrock 模型,请求就会在真正调用模型前被拦下,报错提到 Bedrock evaluators fail on any observation that carries media (Cloud)。优先排查媒体传输方式(URL vs inline)与所选 Bedrock 模型是否支持 image/jpeg。

适用环境:Issue 已确认的环境为 Langfuse Cloud、Bedrock 连接,测试模型 us.anthropic.claude-haiku-4-5-20251001-v1:0、us.anthropic.claude-sonnet-4-6(评论中另提到 us.anthropic.claude-sonnet-5、global.anthropic.claude-sonnet-5);同样的评测在 OpenAI 模型上正常。未提供操作系统、Python、CUDA、显卡信息。

最快修复方案:暂无确认的一步修复方案。Issue 中维护者建议改用 AWS Bedrock 的 OpenAI/Anthropic 兼容端点并配置自定义 base URL,但报告者实测两种端点在 Claude 上均不成立,因此该建议尚未验证可行。

注意事项:LANGFUSE_EVALUATOR_MEDIA_TRANSPORT 属于服务端环境变量,Cloud 用户无法通过项目设置切换为 inline;维护者明确表示 Cloud 不会把不受控的媒体下载进 worker,因为存在安全与性能风险。在 Bedrock 侧给出结论前,多模态评测不要指望通过配置绕过。

问题场景

用户使用 Langfuse 的 LLM-as-a-judge 评测功能,把包含图片(jpeg)的观察值(observation)通过变量映射(例如 {{input}})传给 Bedrock 模型,评测在约 0.2 秒内直接失败,模型调用根本没有发出。同一个评测和同一条观察值换成 OpenAI 模型则正常打分。问题出现在 Cloud 环境的 Bedrock 连接上,且不是模型本身拒绝,而是请求构造阶段就被拦截。

报错原文

The interpolated prompt contains media with type image/jpeg, but the selected model does not support this media type. To continue, narrow the variable mapping so it does not include this media, or select a model that supports image/jpeg.

评论中改用 Anthropic-compatible 端点后,Bedrock 返回的错误为:

POST https://bedrock-runtime.us-west-2.amazonaws.com/anthropic/v1/messages
{"type":"error","error":{"type":"invalid_request_error","message":"URL content sources are not yet supported for this model"}}

原因分析

按报告者对源码的解读,resolveEvaluatorMediaTransport 对任何 Cloud 区域返回 url,非 Cloud 才返回 inline,因此 Cloud 上总是把签名 URL 交给提供方。而 Bedrock 接收的是图片字节(base64),不是 URL,于是 AI SDK 判定 isUrlSupportedByModel === false,enforceProviderSupportedMediaUrls 抛出上面的错误。同时 image/jpeg 位于 EVALUATOR_MEDIA_TYPES 中,所以媒体类型本身能通过更早的检查,最终问题落在传输形式上。评论中维护者确认,Cloud 不使用 inline 是刻意的设计取舍,并非临时故障。

环境排查

  • 确认是否运行在 Langfuse Cloud(而非自托管),Cloud 上无法通过项目设置改变媒体传输方式。
  • 确认评测使用的 LLM 连接是否为 Bedrock,以及映射的观察值是否携带 image/jpeg 媒体。
  • 确认所选的 Bedrock 模型(如 Claude 系列)是否出现在 AWS 兼容性表的相关行中;评论指出 Chat Completions 与 Responses 在 Claude 行上均为不支持。
  • 确认是否有办法访问服务端环境变量 LANGFUSE_EVALUATOR_MEDIA_TRANSPORT;Cloud 用户通常没有。
  • 可以用同一个评测加 OpenAI 模型做对照,快速判断问题是否出在 Bedrock 侧。

解决步骤

  1. 先收窄变量映射,避免把带图字段传给 Bedrock 评测模型,确认评测能正常跑通——这可以验证报错确实由媒体引起。
  2. 按维护者建议尝试 OpenAI/Anthropic 兼容端点:在 Langfuse 中新建 OpenAI 或 Anthropic 连接,将 base URL 指向 AWS Bedrock 的兼容端点。
  3. 用 us.anthropic.claude-haiku-4-5-20251001-v1:0、us.anthropic.claude-sonnet-5 或 global.anthropic.claude-sonnet-5 逐个验证。注意 Issue 中报告者的实测结果是 OpenAI-compatible 端点跳过 Anthropic 模型、Anthropic-compatible 端点返回 “URL content sources are not yet supported for this model”,即该路径在 Claude 上不可用。
  4. 如果必须使用带图评测,暂时改用原生支持 URL 图片的模型(Issue 中已验证 OpenAI 正常)。
  5. 持续关注上游进展:报告者的诉求是让提供方拒绝 URL 时改为下载媒体并以 inline 发送,或允许每个 LLM 连接自行选择传输方式。该改动是否被采纳,Issue 中未给出明确结论。

验证方法

用不携带媒体的观察值跑同一评测,应能正常返回分数;再换回带 jpeg 的观察值,若仍快速抛出同一条报错,说明传输方式问题依旧存在。若改用兼容端点后 Bedrock 侧不再返回 “URL content sources are not yet supported for this model”,并且评测能对带图观察值给出分数,才算问题解决。仅凭 Langfuse 侧不再报错不足以确认,因为拦截可能转移到 Bedrock API 一侧。

参考来源

langfuse/langfuse #18240

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 27672

发表回复

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