首页 / 文章 / 多模态输入:图片与文件怎么传给模型

多模态输入:图片与文件怎么传给模型

讲清 base64 与 URL 两种图片传法的取舍、格式和体积限制,说明 PDF 这类文件哪些模型能直接吃,并给出可运行的图片请求示例与成本估算,适合接入识图功能时对照。

两种传法:URL 和 base64

图片有两种传法:给一个公网可访问的 URL,或者把图片编码成 base64 塞进 data URL。URL 传输量小、请求快,但要求图片能被上游访问到,内网图片和带签名的临时链接经常失效。base64 不依赖外网,体积会涨三分之一左右,请求体容易超过网关限制。

签名 URL 还有过期问题:链接生成时有效,模型真正去取的时候已经 403。批量任务里尤其明显,一批图放到队列里排半小时,前面的链接就死了。

临时图片、本地文件用 base64;已经在 CDN 上的公开图片用 URL,能省带宽也省解析时间。

base64 的体积约为原图的 1.33 倍,一张 3MB 的照片编码后 4MB,再算上 JSON 转义,请求体可能到 5MB 以上。多数网关对这个量级还算宽容,移动网络上传会很慢。

一个能跑的图片请求

python
import base64
import requests

def data_url(path: str, mime: str = "image/jpeg") -> str:
    with open(path, "rb") as f:
        return f"data:{mime};base64," + base64.b64encode(f.read()).decode()

resp = requests.post(
    "https://ai.idcidiot.com/v1/chat/completions",
    headers={"Authorization": "Bearer sk-..."},
    json={
        "model": "gemini-3.8-flash",
        "messages": [{
            "role": "user",
            "content": [
                {"type": "text", "text": "这张图里的表格有几行?只回数字。"},
                {"type": "image_url", "image_url": {"url": data_url("table.jpg"), "detail": "high"}},
            ],
        }],
        "max_tokens": 50,
    },
    timeout=120,
)
print(resp.json()["choices"][0]["message"]["content"])

URL 写法把 image_url.url 换成 https://... 即可,其余不变。detail 设成 low 会降采样,小字和表格线容易糊掉,识别任务一般用 high。

格式与体积

常见支持 png、jpeg、webp,gif 是否按多帧处理看厂商。上传前把长边压到 1500 像素上下、单张控制在 1MB 以内,大多数识别任务够用。

体积上限、像素上限、支持格式以官方文档为准,超限一般返回 400,报错里会写清楚是哪个字段。压缩用 Pillow 一行就够:img.thumbnail((1500, 1500))。

动图别指望模型逐帧理解,抽第一帧或者转成三张静图更可靠。带透明通道的 png 在部分模型上会被填成白底,深色文字可能看不清,传之前先合到白底上。压缩完体积还是大,就拆成两张图分别传,比一次传一张巨图稳。

文件不等于图片

PDF、Excel 这类文件并不是所有模型都能直接吃。Claude 与 Gemini 支持直接传 PDF;OpenAI 的 chat/completions 不收 PDF,需要先抽文本或者用它的文件接口。传之前先确认模型支持哪些输入类型,模型页会列出 input_modalities。

一份 200 页的 PDF 直接塞进去,token 消耗可能比你想的高一个数量级。先抽目录和相关章节,再决定要不要整份传。

扫描版 PDF 没有文字层,抽文本抽出来是空的,这类只能按图片处理,成本按页数走。

成本怎么算

图片按 token 计费,换算规则跟分辨率、厂商有关。gemini-3.8-flash 在 Gemini Antigravity 分组输入 0.975 美元每百万 token,一张折合 1000 token 的图约 0.001 美元;一天 500 张不到 0.5 美元。真正贵的是把整本扫描件当图片传。

账单异常时先看 prompt_tokens 有没有暴涨,再回头看是不是图片尺寸失控。

动手前把图片数量、单张 token、调用次数乘一遍。OCR 预处理之后文本可能只剩几百 token,比直接传图便宜一个量级,识别率也更稳。

常见失败

  • 400:data URL 少了 data:image/jpeg;base64, 前缀,或者 base64 里混进了换行。
  • 400 或 415:格式不支持,或者文件是 webp 改了后缀。上传前用 file 命令确认真实格式,比看后缀可靠。
  • 超时:单张图太大,先压缩再传。
  • 答非所问:detail 设成了 low,或者图片本身分辨率太低。
  • 多图对不上号:一次传多张图时,给每张配一句文字说明,模型才知道哪张是正面、哪张是背面。

模型清单见 模型总览,gemini-3.8-flash 的上下文和输出上限在 模型页,价格对照在 定价页,更多接入细节可以翻 文章列表。先拿十张真实图片跑一遍,比对着文档猜格式快。

用 二五云API 跑通这些模型

OpenAI 兼容接口,一个 Key 调用 GPT、Claude、Gemini、DeepSeek、Kimi 等模型,按量计费。

免费注册查看模型价格

相关文章