You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python的requests向Gemini传递base64字节而非UTF-8字符串?

问题解答

核心结论

Gemini 的 streamGenerateContent REST API 不支持直接传递 base64 字节对象,必须将其转换为 UTF-8 编码的字符串后嵌入 JSON 请求体中,你的初始可行流程是符合 API 要求的标准做法。

具体原因与解释

  1. JSON 序列化限制
    JSON 规范中没有「字节对象」这一数据类型,Python 的 json.dumps() 无法直接序列化 bytes 类型数据,这是语言层面的固有限制,和 Gemini API 无关。

  2. API 请求格式要求
    Gemini 的 streamGenerateContent 仅接受 JSON 格式的请求体,不支持 multipart/form-data 等直接上传二进制文件的格式。所有多媒体内容必须以 base64 编码的字符串形式嵌入 JSON 的 inline_data.data 字段中。

  3. MIME 类型的限制
    application/octet-stream 不在 Gemini 官方支持的 MIME 类型列表中,必须使用对应文件的标准类型:

    • 图片:image/jpeg、image/png、image/gif 等
    • PDF:application/pdf
    • 音频:audio/wav、audio/mp3 等(仅部分模型支持)

优化建议

  • 无需跳过 base64 解码步骤:base64 字节转 UTF-8 字符串的性能开销可以忽略,且是 API 强制要求的格式,不会导致数据丢失。
  • 确保使用正确的 MIME 类型:严格匹配文件格式,否则会返回「无效负载」错误。
  • 标准代码示例(基于你的流程优化):
    import base64
    import json
    import requests
    
    # 读取本地文件
    with open("local_file.pdf", "rb") as f:
        file_bytes = f.read()
    
    # 编码为base64并转为UTF-8字符串(必须步骤)
    base64_str = base64.b64encode(file_bytes).decode("utf-8")
    
    # 构造符合API要求的请求体
    request_body = {
        "contents": [
            {
                "parts": [
                    {"text": "请分析这个PDF的核心内容"},
                    {"inline_data": {
                        "mime_type": "application/pdf",
                        "data": base64_str
                    }}
                ]
            }
        ]
    }
    
    # 发送请求
    api_key = "YOUR_API_KEY"
    url = f"https://generativelanguage.googleapis.com/v1/models/gemini-pro-vision:streamGenerateContent?key={api_key}"
    
    response = requests.put(
        url,
        headers={"Content-Type": "application/json"},
        json=request_body
    )
    
    # 处理流式响应
    for chunk in response.iter_lines():
        if chunk:
            print(chunk.decode("utf-8"))
    

内容的提问来源于stack exchange,提问作者geotolky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 16:02:43