Bedrock Runtime: InvokeModelWithResponseStream, https response error StatusCode:...

2026年01月14日 22:31 error

错误信息

InvokeModelWithResponseStream: operation error Bedrock Runtime: InvokeModelWithResponseStream, https response error StatusCode: 400, RequestID: bba856f0-ac77-4e69-a25a-0b4273414385, ValidationException: ***.***.***.***.***.source.base64: image exceeds 5 MB maximum: 14759984 bytes > 5242880 bytes (request id: 20260114221814226374718uKwTmVWw) (request id: 20260114221813393829780Pdz0ylfr) (request id: 20260114221701515740328RILvsXTw) (request id: 20260114221701310530278vyJ8XeWM)

AI 解决方案

错误分析:AWS Bedrock 图像大小限制错误


1. 错误翻译


原文:ValidationException: ***.***.***.***.***.source.base64: image exceeds 5 MB maximum: 14759984 bytes > 5242880 bytes
译文:验证异常:图像大小超过 5 MB 上限:当前 14,759,984 字节 > 允许 5,242,880 字节

2. 原因分析


  • 根本原因:上传到 AWS Bedrock 服务的 Base64 编码图像超过了该服务的 5 MB (5,242,880 字节) 文件大小限制。

  • 具体问题

  • - 你的图像实际大小为 ~14.1 MB (14,759,984 字节),远超限制。
    - 错误发生在调用 InvokeModelWithResponseStream API 时,服务端在验证请求参数阶段拒绝了请求。

    3. 解决方案


    你需要在上传前对图像进行压缩或尺寸调整。

    Python (PIL/Pillow库) 压缩示例:

    from PIL import Image
    import io
    import base64
    
    def compress_and_encode_image(image_path, max_size_kb=4900, quality=85):
        """
        压缩图像并返回Base64字符串
        :param image_path: 图片路径
        :param max_size_kb: 目标最大大小(KB),建议略低于5120KB以留出缓冲
        :param quality: JPEG质量 (1-100)
        :return: Base64编码字符串
        """
        img = Image.open(image_path)
        
        # 如果图像过大,可以先按比例缩小尺寸
        max_pixels = 2048  # 根据你的需求调整
        if max(img.size) > max_pixels:
            ratio = max_pixels / max(img.size)
            new_size = tuple(int(dim * ratio) for dim in img.size)
            img = img.resize(new_size, Image.Resampling.LANCZOS)
        
        # 转换为RGB模式(如果是RGBA)
        if img.mode in ('RGBA', 'LA'):
            background = Image.new('RGB', img.size, (255, 255, 255))
            background.paste(img, mask=img.split()[-1] if img.mode == 'RGBA' else img)
            img = background
        
        # 压缩循环,确保大小在限制内
        buffer = io.BytesIO()
        img.save(buffer, format='JPEG', quality=quality, optimize=True)
        
        # 如果仍然太大,进一步降低质量
        while len(buffer.getvalue()) > max_size_kb * 1024 and quality > 20:
            quality -= 5
            buffer = io.BytesIO()
            img.save(buffer, format='JPEG', quality=quality, optimize=True)
        
        # 返回Base64编码
        return base64.b64encode(buffer.getvalue()).decode('utf-8')
    
    # 使用示例
    base64_image = compress_and_encode_image("your_image.jpg")
    

    4. ️ 预防措施


  • 前置检查:在调用API前,先检查Base64字符串解码后的大小。5 MB是硬性限制,务必遵守。

  • 图像优化策略

  • 1. 调整分辨率:大多数AI模型不需要极高分辨率图像(如超过2048px)。
    2. 选择合适格式:优先使用JPEG(有损压缩)而非PNG(无损,文件较大)。
    3. 批量处理:如果需要处理多张图片,实现自动化的压缩流水线。
  • 工具推荐

  • - 本地工具:使用 imagemagick (CLI) 或在线压缩网站进行预处理。
    - 开发库:Python的 PIL/Pillow、Node.js的 sharp 库都是高效的图像处理选择。



    下次请