同一端点的多模态输入格式:视觉模型兼容性矩阵
多模态 API 中,不同视觉模型对图片输入的编码方式(URL、Base64、文件 ID、消息结构)要求不同。本文给出一套通用的兼容性确认流程和矩阵模板,帮助你在批量请求前先摸清目标端点的真实行为,避免因格式错配导致的批量失败。
为什么需要先确认图片输入格式
即使一个聚合端点暴露了统一的 chat/completions 接口,不同视觉模型对图片字段的解析方式也可能不同。常见差异包括:
- 图片是以公网 URL 提供,还是必须内联 Base64
- 是否支持文件上传后引用文件 ID
- 图片对象放在 content 数组里的位置和字段名
- 是否允许一条消息里多张图,以及上限如何报错
- 对图片格式(JPEG/PNG/WebP)和尺寸的接受程度
如果直接批量发送,一个模型失败就可能导致整批任务中断。所以先做一次小规模探测,成本远低于事后排查。
三类常见的图片编码风格
URL 引用式
content 数组里放一个图片对象,其中 image_url 字段指向可公开访问的地址。优点是请求体小、无需本地编码;缺点是服务端要能访问该 URL,内网地址或带鉴权的链接通常不行。
Base64 内联式
把图片字节编码后拼成 data URI,例如 data:image/png;base64,...。这种方式不依赖外网可访问性,但请求体会显著变大,批量时要注意单请求体积和超时设置。
文件 ID 引用式
先通过文件上传接口拿到一个 ID,再在消息里引用。适合反复使用同一张图的场景,但需要额外的上传步骤,而且并非所有模型都走这条路径。
如何为每个模型确认实际行为
不要依赖文档里的统一描述,用下面的最小探测流程验证:
- 选一张小尺寸、内容明确的图片作为测试样本。
- 对目标模型分别发送三种编码风格的单条请求。
- 记录哪种返回成功、哪种返回格式错误。
- 再发一条包含两张图的请求,观察是否被接受。
- 把结果填入矩阵表格。
一次探测通常只需要几条请求,就能确定这个模型在当前端点下的真实输入契约。
兼容性矩阵模板
| 模型 | URL | Base64 | 文件 ID | 多图 | 备注 |
| --- | --- | --- | --- | --- | --- |
| 模型 A | 通过 | 通过 | 不支持 | 支持 | URL 需公网可达 |
| 模型 B | 不支持 | 通过 | 通过 | 待测 | — |
| 模型 C | 通过 | 通过 | 不支持 | 不支持 | 多图会报错 |
把这张表填完,再决定批量任务的输入格式,可以避免大部分“模型 A 能跑、模型 B 全挂”的情况。
批量发送前的检查清单
- 所有目标模型是否都支持你计划使用的编码方式
- 是否有模型只接受 Base64,从而影响请求体积估算
- 多图请求是否在目标模型上被支持
- 图片格式和尺寸是否在可接受范围内
- 失败时的错误信息是否足以区分“格式错误”和“内容被拒”
把探测结果固化到代码里
一种实用做法是按模型维护一个小型配置表,记录它接受的编码方式和是否支持多图。批量任务在构造请求前先查这张表,对不支持的模型走降级路径(例如把 URL 转成 Base64)。这样即使聚合端点后面接了新的视觉模型,也只需要补充一行配置,而不用改批量逻辑。
常见误区
- 以为端点统一就等于模型统一:聚合层可能做了字段转换,也可能原样透传,不同模型表现不一致。
- 用 URL 测试成功就默认 Base64 也可用:两者走的是不同解析路径。
- 忽略请求体积:Base64 会让 body 明显变大,批量并发时容易触发超时。
- 不做多图测试:单图通过不代表多图可用。
先花几条请求摸清矩阵,再放大批量规模,是使用多模态端点时比较稳妥的顺序。