[BUG] Bedrock file constraints swap the image and document size limits

使用 CrewAI 向 Bedrock 模型发送多模态文件时, BEDROCK_CONSTRAINTS 把图片和文档的大小上限写反了:图片上限被放宽到 4.5 MB,PDF 上限被收紧到 3.75 MB。范围在 3.75 MB 至 4.5 MB 之间的图片不会被 AUTO 模式压缩,会原样发往 Be

快速结论:使用 CrewAI 向 Bedrock 模型发送多模态文件时,BEDROCK_CONSTRAINTS 把图片和文档的大小上限写反了:图片上限被放宽到 4.5 MB,PDF 上限被收紧到 3.75 MB。范围在 3.75 MB 至 4.5 MB 之间的图片不会被 AUTO 模式压缩,会原样发往 Bedrock 并触发 ValidationException;同一区间内的 PDF 则在 STRICT 模式下被 CrewAI 提前以 FileTooLargeError 拒绝。优先排查 crewai_files/processing/constraints.py 中这两项阈值是否已交换。

适用环境:Issue 确认的环境为 macOS(报为 macOS 26)、Python 3.13、crewAI 版本为 main 分支提交 b0c16c1(crewai-files 1.15.28),使用 uv 管理的虚拟环境;问题针对 Bedrock(AWS Converse API)目标模型,验证时使用了 us-east-1 的 Claude Haiku 4.5 与 Nova 系列模型。

最快修复方案:暂无确认的一步修复方案。Issue 提出的方案是把 BEDROCK_CONSTRAINTS 中的图片上限改为 3_840_000、PDF 上限改为 4_608_000,并同步修正 docs/edge/*/concepts/files.mdx 中的提供方表格;维护者在 live Converse API 上用该改动验证有效,但需以合并后的 PR #8159 为准。

注意事项:上述数值来自 Issue 讨论中的实测:Claude 对 base64 编码后的体积按 5 MiB 计限,折算原始图片上限约 3,932,160 字节,3,840,000 字节仍在该线内;Nova 模型对 4,608,000 字节图片不报错,说明 3.75 MB 的图片限制是 Claude 侧的行为,并非 Bedrock 全模型一致。若业务上混用不同模型,统一取更严格阈值更稳妥。修复合并前的本地改动属于临时方案,升级后应回退。

问题场景

在 CrewAI 中使用 Bedrock 作为文件处理目标,通过 FileProcessor("bedrock") 或 format_multimodal_content(files, "bedrock") 处理并发送图片、PDF。Issue 复现脚本对约 4 MB 的 PNG 走 AUTO 模式、对约 4 MB 的 PDF 走 STRICT 模式,分别触发“图片超限被发送”和“PDF 被误拒”两种相反的表现。

报错原文

image bytes before/after: 4043732 4043732
crewai_files.processing.exceptions.FileTooLargeError: PDF 'report.pdf' size (3.8MB) exceeds maximum (3.7MB)

main 实测:
Bedrock ValidationException: The model returned the following errors: messages.0.content.0.image.source.bytes: image exceeds 5 MB maximum: 5391616 bytes > 5242880 bytes
crewAI FileTooLargeError: PDF 'report.pdf' size (4.0MB) exceeds maximum (3.7MB)

原因分析

最可能的原因是 crewai_files/processing/constraints.py 中的 BEDROCK_CONSTRAINTS 把两项上限写反:图片为 4,608,000 字节(4.5 MB),PDF 为 3,840,000 字节(3.75 MB),而 Bedrock Converse API 文档给出的是图片不超过 3.75 MB、文档不超过 4.5 MB。由此产生两个后果:AUTO 模式下 3.75 MB 至 4.5 MB 的图片通过 CrewAI 校验、不被优化,原样送达 Bedrock 后超限;STRICT 模式下同区间的 PDF 被 CrewAI 误判为超限而提前拒绝。文档中的提供方表格存在同样的颠倒。

环境排查

  • 确认 crewAI / crewai-files 版本是否为含该缺陷的版本(Issue 中为 main b0c16c1、crewai-files 1.15.28)。
  • 确认文件处理目标为 Bedrock,并确认实际调用的 Bedrock 模型(Claude 与 Nova 的限制不同)。
  • 确认待发送图片与 PDF 的原始字节数,尤其是是否落在 3.75 MB 至 4.5 MB 之间。
  • 确认文件处理模式为 AUTO 还是 STRICT,两者失败表现不同。
  • 确认 Python 版本与 crewai-files 的对应关系(Issue 为 Python 3.13),以及是否使用第三方修改过的 constraints 文件。

解决步骤

  1. 检查 crewai_files/processing/constraints.py,确认 BEDROCK_CONSTRAINTS 中图片上限当前为 4,608,000、PDF 上限为 3,840,000。
  2. 可优先尝试:将图片上限改为 3_840_000、PDF 上限改为 4_608_000;该改动在维护者的 live Converse API 校验中表现为:4,043,710 字节 PNG 被优化到约 962,570 字节并返回 end_turn,4,200,000 字节 PDF 原样发送并返回 end_turn。
  3. 同步修正 docs/edge/*/concepts/files.mdx 中对应提供方的表格行,避免文档与代码继续不一致。
  4. 若已在本地改动,跟踪并切换到合并后的修复版本(PR #8159),不要在升级后保留手改文件。

验证方法

用 Issue 的复现思路重新执行:构造约 4 MB 的 PNG,走 AUTO 模式后对比处理前后字节数,应看到体积明显下降且请求返回 end_turn,而非 ValidationException;构造约 4.2 MB 的 PDF,STRICT 模式下应被原样发送并返回 end_turn,不再抛出 FileTooLargeError。也可直接检查 BEDROCK_CONSTRAINTS 的取值是否已为图片 3,840,000、PDF 4,608,000。

参考来源

crewAIInc/crewAI #8158

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 29781

发表回复

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