多模态 LLM:图片、音频、视频怎么接
OpenAI 的图像与视觉接口 已经把看图写进通用模型;Gemini 和 Claude 各有官方视觉页。能力进了 API,不等于可以靠无出处准确率选型。没跑对照实验,就不打分。
成熟的是接入,不是分数
2024 年的演示点是 GPT-4o。2026-09 的通用旗舰是 GPT-5.6;文档里的看图示例用 gpt-5.6。Gemini 文档示例用 gemini-3.7-flash(模型页)。Claude 视觉示例用 claude-opus-5(Opus 5)。
三家都能看图出文字。差在官方承认的边界:谁接视频、谁只看图、文件多大被拒、缩小之后坐标还对不对。这些能在文档里核对。跨厂「谁更准」没有可复跑测试集,就不写。
选通用多模态。 一张截图、一页 UI、一段已经切好的音频,要的是描述、抽取、问答,并且结果有人看。
不选排行榜。 选型看输入种类和上限,不看印象里的百分比。
| 输入 | 选 | 不选 |
|---|---|---|
| 单张/少量图 → 文本 | GPT-5.6 / Claude Opus 5 / Gemini 3.7 Flash | 自造一个万能 analyze 封装当文档 |
| 代码或 UI 截图 | 同上;Claude 建议图在文本前 | 默认模型看见的像素等于原文件 |
| 长录音理解、说话人、非语音声 | Gemini 音频接口 | 把 Claude 视觉页当成音频产品 |
| 视频文件 / YouTube | Gemini 视频接口 | 假设 GPT 视觉页等于视频理解 |
| 出图、改图 | 另走图像生成模型 | 让 Claude 生成图像(官方写了不会) |
图片:三家都能看,生成不是同一件事
OpenAI:Responses API 或 Chat Completions 看图;出图另走 gpt-image-2。图可以是 URL、base64、或 Files API 的 file ID。看图示例摘自视觉指南,未在本机跑过。
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5.6",
input=[
{
"role": "user",
"content": [
{"type": "input_text", "text": "what's in this image?"},
{
"type": "input_image",
"image_url": "https://api.nga.gov/iiif/a2e6da57-3cd1-4235-b20e-95dcaefed6c8/full/!800,800/0/default.jpg",
},
],
}
],
)
print(response.output_text)官方限制(同一页):PNG / JPEG / WEBP / 非动画 GIF;单请求 payload 最大 512 MB、最多 1500 张图;医学影像不适合;小字、旋转、全景、精确空间定位、计数都会错。detail 为 original 时仍可能被缩放。超 patch 预算的图会被拒,不是自动缩到能过。OCR、小控件、computer use 需要精细坐标时,先按该页的 sizing 规则自己缩小,再把返回坐标映射回原图。
Claude:JPEG / PNG / GIF / WebP;API 单图 10 MB(Bedrock / Google Cloud 5 MB);最大边 8000 px。20 张图以上的请求有更严的边长限制。超过分辨率上限会缩小,坐标工作流必须自己先 resize,或把 oversized 设成报错。FAQ 写明:不能生成或编辑图像;不能指认照片里的人;低质量、旋转、小于 200 px 的图会幻觉;不能可靠判断一张图是不是模型生成的。
import anthropic
client = anthropic.Anthropic()
message = client.messages.create(
model="claude-opus-5",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "url",
"url": "https://platform.claude.com/docs/images/vision-example.jpg",
},
},
{"type": "text", "text": "Describe this image."},
],
}
],
)
print(message)摘自 Claude 视觉文档。常见失败:把高分辨率截图直接丢进去,模型看到的是缩小后的图,返回的像素坐标对不上原图。Claude 还建议图放在文本前面。多轮对话里反复贴 base64 会把请求体撑大,重复用的图应改 Files API 的 file_id。
Gemini:原生多模态,看图走 image understanding。文档示例模型为 gemini-3.7-flash。内联字节加提示词总请求约 20 MB 上限,更大走 Files API。media_resolution 控制每张图或每帧的 token 上限。下面请求形状按官方 Interactions 示例字段来,未在本机跑过。
# 示意:官方文档用 Interactions API,model=gemini-3.7-flash
# 完整鉴权与 endpoint 以 Gemini image understanding 页为准
curl -sS "$GEMINI_INTERACTIONS_URL" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.7-flash",
"input": [
{"type": "text", "text": "Caption this image."}
]
}'选 Claude / GPT-5.6。 代码截图、UI、需要跟文本工具链同一套账号。
选 Gemini。 同一条请求里还要接音频或视频。
不选。 用多模态做医学诊断、CAPTCHA、精确数清点、鉴定合成图。
音频:转写是一条产品,理解是另一条
会议录音要「总结决策」,先分清:只要字,还是要内容理解。两条链路的上限不一样,不能用同一个封装混打。
只要字:OpenAI 走转写 API,推荐 gpt-transcribe;词级时间戳用 whisper-1。单文件 25 MB。说话人要用 gpt-4o-transcribe-diarize,文档写了这不是默认转写模型。出处:speech to text。
要理解(摘要、时间戳问答、非语音声):Gemini 的 audio 页写的是描述、转写、翻译、说话人、情绪、按时间戳切段。官方硬数字:每秒音频 32 tokens(一分钟 1920);单 prompt 最长 9.5 小时;降采样到 16 kbps;多声道会并成单声道;内联请求总大小 20 MB,更大用 Files API。实时语音另走 Live API;文档写 generateContent 不做实时转写。
9.5 小时和 25 MB 不是同一类限制。Whisper 路径先撞文件体积,压缩码率就能塞进更长的录音。Gemini 路径先撞时长和 token,音质会被降到 16 kbps,环境声还在,频谱细节不在。要逐字稿,不要指望理解模型当专业 ASR;要「这段警报是什么」,不要只用 Whisper 的纯文本。
# 示意,字段来自 Gemini audio 文档示例
# model=gemini-3.7-flash,input 里是文本 "Describe this audio clip" 外加音频部分Claude 现行视觉页是图 → 文。没有把长会议、说话人区分写成该页的产品能力。缺官方页的能力,不当成有。
选 OpenAI 转写。 要逐字稿、字幕、英译、词级时间戳。
选 Gemini。 要在同一模型里听内容、听环境声、按时间戳提问。
不选。 用无出处准确率决定供应商;也不要用理解模型的摘要代替字幕文件。
视频:先看谁在文档里接文件
Gemini 的 video understanding 明确接视频:File API(付费 20 GB / 免费 2 GB)、Cloud Storage、小于 100 MB 的内联、公开 YouTube URL。总请求超过 20 MB、视频较长、或同一文件要复用,走 Files API。文档还写了默认大约每秒 300 tokens(低分辨率约 100),File API 侧按 1 FPS 抽帧。
1 FPS 的含义:一秒钟的 UI 闪烁、一次点击高亮,模型可能看不见。产品演示如果关键信息只在某一帧,应单独截那一帧走图像接口,不要假设「已经看过视频」等于「看过每一帧」。音频轨按文档会一起进模型,旁白和画面可以一起问;这也是图像抽帧拼十张图做不到的。
示例提示词来自该页:Please summarize the video in 3 sentences. 模型 ID 与音频相同,gemini-3.7-flash。
OpenAI 视觉指南列的是看图和出图,不是「上传 mp4 做理解」的对照页。出视频是另一条产品,不要和理解混写。Claude 视觉页是图像。没有官方出处的跨厂视频准确率,不写。
选 Gemini。 产品演示录像、需要听声画一起问。
不选。 在只有图像接口的模型上假设它看过整段视频;也不要用抽帧手工拼多张图冒充视频理解。
什么时候不该把文件丢进多模态
多模态请求贵在视觉 token 和音频 token,不在「感觉更智能」。一张 4K 截图按官方规则可能被缩成模型能看的尺寸,费用仍按缩完后的 patch 算;一段一小时会议按 Gemini 的 32 tokens/秒,大约 11.5 万 audio tokens,还没算文本提示。能先裁、先转写、先抽关键帧,就先做,再把短结果送给模型。
不送原片的情况。 只要字幕文件:走转写,不要把整段 wav 交给看图模型。只要某一帧的按钮文案:截那一帧,不要上传整段 mp4。只要「这页 PDF 的表」:能抽文本就抽文本;扫描件才走视觉。
仍送原片的情况。 问题依赖版式、颜色、箭头、说话人同时在场、画面和旁白对不上。这些压缩成纯文本会丢证据。送的时候写明模型实际看到的分辨率或帧率,避免把 downscale 之后的坐标抄进 issue。
OpenAI 视觉页按模型家族列了 detail:low / high / original / auto,不是所有模型都支持 original。需要精细坐标时先对模型页,不要假定 auto 等于原图像素。
边界
- 官方限制比排行榜有用。 25 MB、20 MB、10 MB、9.5 小时、1 FPS,这些能在文档里核对。没有 URL 的准确率不能。
- 看和生成是两条 API。 GPT 看图用 Responses;出图用
gpt-image-2。Claude 只看。Gemini 看图、看音频、看视频是理解侧;出图是另一组图像生成模型,不要写进理解选型。 - 缩小和抽帧会改模型看见的东西。 Claude 超限会 downscale;Gemini 视频默认 1 FPS。坐标、字幕、瞬间动作要以处理后的画面为准,并在结果里写清。
- 失败要能看见。 OpenAI 图像输入超 patch 上限会拒请求。Claude 多图请求有更严的边长限制。Gemini 内联超 20 MB 应改 Files API,而不是重试同一 payload。Files API 上传有时效(官方文件页写 48 小时),过期后再引用会失败,这不是「模型突然不会看了」。
选型收到一句话:默认看图用正在用的通用模型;长音频和视频优先 Gemini;要逐字稿走 Whisper / gpt-transcribe;要出图走开图 API,不要让理解模型假装会画。