图像 / 视觉输入
介绍如何通过 OpenAI 兼容接口的 image_url 内容块向多模态模型发送图像输入,涵盖消息结构、图像传入方式(URL 与 base64)、多图与图文混排、常见注意事项,以及在不同模型间切换时的兼容性要点。
什么是 image_url 内容块
在 OpenAI 兼容的 Chat Completions 接口中,messages 里每条消息的 content 不再只是一个字符串,而可以是一个「内容块数组」。其中图像块用 type: "imageurl" 表示,值里放一个 url 字段。这就是通常说的「imageurl 内容块」。
多模态模型(支持视觉输入的模型)通过解析这些内容块,把图像和文本一起放进同一次请求里理解。
消息结构长什么样
一条带图的 user 消息,结构大致是:
{
"model": "<支持视觉的模型名>",
"messages": [
{
"role": "user",
"content": [
{ "type": "text", "text": "请描述这张图" },
{ "type": "image_url", "image_url": { "url": "https://example.com/cat.jpg" } }
]
}
]
}
要点:
content是数组,数组里可以同时有text块和image_url块。- 顺序有意义:模型按数组顺序理解,通常把文字说明放在图前面或后面都可以,但把「问题」和「对应图片」放得清楚一些,效果更稳定。
- 纯文本消息仍可以写成字符串,两种写法在同一请求里可以共存。
两种传图方式
方式一:传公网 URL
{ "type": "image_url", "image_url": { "url": "https://example.com/photo.png" } }
优点:请求体小,直接把图片链接交给服务端去抓取。
注意:
- URL 必须是模型服务端能访问到的公网地址。内网地址、需要登录鉴权的地址、带防爬校验的地址通常抓不到。
- 图片格式建议用常见类型(如 JPEG、PNG、WebP),服务端不一定支持所有冷门格式。
- 链接最好稳定,避免一次成功一次失败的临时签名地址。
方式二:传 base64 data URL
{
"type": "image_url",
"image_url": {
"url": "data:image/jpeg;base64,<base64编码后的内容>"
}
}
优点:不依赖外部可访问性,本地图片、需要鉴权的图片都能发。
注意:
- data URL 的 MIME 类型要和真实图片一致,否则可能解析失败。
- base64 会让请求体变大,图片越大越明显,注意请求体大小限制。
- 编码时不要漏掉
data:image/<类型>;base64,前缀。
多图与图文混排
一次请求里可以放多张图,只要在 content 数组里加多个 image_url 块即可:
{
"role": "user",
"content": [
{ "type": "text", "text": "比较这两张图的差异" },
{ "type": "image_url", "image_url": { "url": "https://example.com/a.jpg" } },
{ "type": "image_url", "image_url": { "url": "https://example.com/b.jpg" } }
]
}
实践建议:
- 用文字标清楚哪张图对应哪个问题,例如「第一张图是……第二张图是……」。
- 多图会明显增加输入量,注意成本和上下文长度。
兼容性与切换模型
不同厂商对视觉输入的支持程度不完全一致。用同一套 OpenAI 兼容格式调用多个模型时,要注意:
- 并不是所有模型都支持图像输入。调用前确认目标模型具备视觉能力。
- 有的实现只接受 URL,有的只接受 base64,有的两者都行。切换模型时如果报错,先换另一种传图方式试。
image_url里可能有额外字段(如detail之类的细节控制)。这些字段属于各家实现细节,兼容性不一,不用时建议不要带。
常见问题排查
- 报「无法获取图片」:多半是 URL 服务端访问不到,改用 base64 试试。
- 报格式错误:检查 MIME 类型前缀、base64 是否完整、是否被截断。
- 模型答非所问:把文字指令写得更明确,并确认图片块确实在
content数组里而不是被当成普通字符串。 - 请求过大:压缩图片尺寸,或改用 URL 方式。
用聚合 API 时的一点说明
通过聚合站的一个 API key 调用多个模型时,图像输入的请求格式仍然按 OpenAI 兼容写法组织即可,换模型主要改 model 字段。计费按官方价 ×1.3 扣费,图像输入会按模型自身的计费规则折算成输入量,所以传图多、图大时费用会相应上升,使用前可以先算一下量。