多模态请求怎么写
视觉模型的请求里,消息内容从字符串变成数组:文本块与图片块按顺序排列,模型按这个顺序理解它们的关系。图片通常有两种给法,一是给可访问的链接,二是直接内嵌 base64 数据。多数实现还提供细节档位参数,用来权衡清晰度与 token 成本。写多模态请求最常见的两类问题,就是内嵌数据缺少类型前缀,以及图片顺序与说明文字对不上。
基本信息
| 内容字段 | 由字符串改为数组,元素带类型标记 |
|---|---|
| 图片块 | 包含图片地址或内嵌数据,可附带细节档位 |
| 文本块 | 用于说明看什么、按什么格式回答 |
| 内嵌数据 | 必须带数据类型与编码前缀,否则请求失败 |
| 顺序语义 | 数组顺序即模型看到的顺序,说明文字要紧跟对应图片 |
| 成本口径 | 图片按分辨率折算为输入 token |
图片块字段速查
| 字段 | 作用 | 注意 |
|---|---|---|
| 类型标记 | 区分文本块与图片块 | 写错会直接报结构错误 |
| 地址字段 | 放可访问链接或内嵌数据 | 内嵌数据必须以数据前缀开头 |
| 细节档位 | 控制解析精度与成本 | 部分实现支持,低档位可省 token |
| 多图顺序 | 决定模型对图片关系的理解 | 与说明文字一一对应 |
| 格式支持 | 图片格式是否被接受 | 常见格式的支持情况以官方文档为准 |
典型使用场景
- 票据识别:拍一张发票,直接抽出金额与开票方
- 报错截图分析:把报错界面与文字描述一起发给模型
- 多图对比:同一商品的多角度照片一起送入做判断
- PDF 页图问答:把文档页面渲染成图片后提问
- 图表读取:从截图中的折线图里读出趋势结论
两种图片传法
两种图片传法
# 方式一:公网可访问的图片链接
"content": [ {"type": "text", "text": "这张图里有什么"},
{"type": "image_url", "image_url": {"url": "https://example.com/a.png"}} ]
# 方式二:内嵌数据(注意前缀,缺失就会返回 400)
"content": [ {"type": "text", "text": "读出票面金额"},
{"type": "image_url", "image_url": {"url": "data:image/png;base64,iVBORw0..."}} ]
# 多图:按顺序追加图片块,并在文本里说明每张图分别是什么
# 图片较大时先压缩或裁剪,能明显降低折算后的 token 数常见报错与原因
| 报错 | 原因 | 处理 |
|---|---|---|
| 结构错误 | 内容写成字符串却放了图片 | 改成数组形式的内容块 |
| 格式不支持 | 内嵌数据前缀缺失或写错 | 补上数据类型与编码前缀 |
| 请求体过大 | 图片尺寸或数量超限 | 压缩图片、减少张数或改用链接 |
| 识别结果差 | 图片模糊、倾斜或分辨率过低 | 先做旋转与裁边,再送模型 |
给图片配一句明确的指令,效果远好于只发一张图:说明要看什么、要输出什么字段,模型的回答会稳定得多。
内嵌数据会让请求体显著变大:批量处理时优先走链接或文件上传方式,避免请求体超限与额外的传输开销。