多模态输入 / Multimodal Input
让模型接收图像、视频、音频、文件作为输入,一次请求完成"看 + 听 + 答"。图灵平台用 OpenAI 兼容的 content 数组结构把图像、视频、音频统一进 /chat/completions 调用;文件输入是例外,需走 Responses 协议的 input_file(见文件输入)。
何时使用
- 截图 QA、文档 OCR、图片分类、UI 操作分析
- 视频摘要、章节拆分、多帧理解
- 音频转文字 + 立刻回答(语音助手)
- 传入 PDF / Word / 图像批量抽取数据
与独立生成端点的区别:
统一的 content 数组结构
所有多模态输入都以 user / assistant message 的 content: [...] 数组形式传入。每个元素是一个 content block,由 type 区分类型:
type | 携带字段 | 用途 |
|---|---|---|
text | text: string | 普通文字 |
image_url | image_url: { url, detail? } | 图片(URL 或 base64 data URI) |
image_url(带 mime_type,data URI) | image_url: { url: "data:video/mp4;base64,…", mime_type } | 视频(Gemini 2.5+/3.x) |
image_url(多帧序列) | 多个 image_url block | 视频帧(Qwen Omni) |
video_url | video_url: { url } | 视频(Qwen VL、Doubao Seed 2.0;URL 或 base64 data URI) |
input_audio | input_audio: { data, format } | 音频(base64,格式:wav/mp3/flac/opus/pcm16) |
input_file(仅 Responses 协议) | input_file: { filename, file_data } | 文件 Base64 内联(PDF 等),详见文件输入 |
图像输入
方式 A:HTTPS URL
from openai import OpenAI
client = OpenAI(
api_key="your-api-key",
base_url="https://live-turing.cn.llm.tcljd.com/api/v1",
)
response = client.chat.completions.create(
model="turing/gpt-5.4-mini",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "这张图里有什么?"},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/photo.jpg",
"detail": "low" # 或 "high" / "auto"
}
}
]
}]
)
图像链接需对海外服务器可访问(大部分模型推理侧在海外)。国内地址可能 DNS 解析失败或超时。生产建议走 base64。
使用 Google/Gemini 模型通过 HTTPS URL 输入多媒体文件时,URL 指向的公网文件必须 < 15 MB。超过 15 MB 请先压缩、裁剪,或改用平台支持的 base64 内嵌方式。
方式 B:base64 data URI
import base64
with open("photo.jpg", "rb") as f:
b64 = base64.b64encode(f.read()).decode()
response = client.chat.completions.create(
model="turing/gpt-5.4-mini",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "这张图里有什么?"},
{
"type": "image_url",
"image_url": {"url": f"data:image/jpeg;base64,{b64}"}
}
]
}]
)
detail 控制(OpenAI 系)
| 取值 | 行为 | token 成本 |
|---|---|---|
low | 低分辨率编码(512×512 缩略) | 85 tokens (固定) |
high | 原始分辨率 + 多 patch | 数百到数千 tokens |
auto(默认) | 模型自选 | 依赖图像大小 |
支持图像的主流模型
| 供应商 | 模型 |
|---|---|
| OpenAI | 以 模型列表 → OpenAI 中的图像输入标记为准 |
| Anthropic | 以 模型列表 → Claude 中的图像输入标记为准;Claude 最大 5 张图/请求,Chat Completions 协议会自动转换图片结构 |
| 以 模型列表 → Gemini 中的图像输入标记为准 | |
| Qwen | 以 模型列表 → 阿里 中的图像输入标记为准 |
视频输入
Gemini(base64 data URI)
图灵平台目前只支持 base64 内嵌方式传入 Gemini 视频。厂商原生还支持以下方式,平台暂未开放(表格来源:Gemini 官方文档):
| 厂商支持的传入方式 | 最大大小 | 推荐场景 |
|---|---|---|
| 文件 API | 20 GB(付费)/ 2 GB(免费) | 大文件(>100 MB)、长视频(>10 分钟)、可重用文件 |
| Cloud Storage | 2 GB(每文件,无存储空间限制) | 大文件、长视频、持久化可重用文件 |
| 内嵌数据(base64) | < 100 MB | 小文件(<100 MB)、时长 <1 分钟、一次性输入 ✅ 当前支持 |
| YouTube URL | 不适用 | 公开 YouTube 视频 |
Gemini 3 Pro 直接处理视频片段。把视频编码为 base64、以 data:video/<mime>;base64,<data> 传入:
import base64
with open("demo.mp4", "rb") as f:
b64 = base64.b64encode(f.read()).decode()
response = client.chat.completions.create(
model="turing/gemini-3-pro-latest",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "整理视频里提到的实验步骤为 5 条要点。"},
{
"type": "image_url",
"image_url": {
"url": f"data:video/mp4;base64,{b64}",
"mime_type": "video/mp4"
}
}
]
}],
extra_body={"thinkingConfig": {"includeThoughts": True}},
stream=True,
)
curl -N $TURING_BASE_URL/chat/completions \
-H "Authorization: Bearer $TURING_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "turing/gemini-3-pro-latest",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "整理视频里提到的实验步骤"},
{
"type": "image_url",
"image_url": {
"url": "data:video/mp4;base64,{{VIDEO_BASE64}}",
"mime_type": "video/mp4"
}
}
]
}],
"stream": true
}'
推荐:
- 格式:MP4 (H.264) 或 MOV
- 大小:Base64 字符串 < 32 MB
- 时长:建议 < 10 分钟(更长需裁剪/关键帧)
Qwen Omni(视频帧数组)
Qwen Omni 系列用帧数组表达视频——把视频抽帧成多张图片序列:
{
"model": "qwen-omni-turbo-latest",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "这段视频描述了什么?"},
{"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,..."}},
{"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,..."}},
{"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,..."}}
]
}]
}
抽帧建议:5-30 FPS,关键场景变化处采样。
Qwen 视觉理解(video_url)
通义千问视觉理解模型用 video_url content block 传完整视频。模型名不带 turing/ 前缀。
支持的模型以 模型列表 → 阿里 中带视频输入 / 视觉理解能力的 Qwen 型号为准。
参数:
fps:抽帧速率,取值[0.1, 10],默认2。video_url.url:HTTPS URL 或 base64 data URI(data:video/mp4;base64,...)。- Token 估算:单帧约
h × w / (32 × 32) + 2tokens。
请求示例
- cURL
- Python
- Python (base64)
curl -N $TURING_BASE_URL/chat/completions \
-H "Authorization: Bearer $TURING_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"stream": true,
"model": "qwen-vl-max-2025-08-13",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "你是视频内容分析专家。请识别说话者、场景与关键事件,并分条输出。"},
{"type": "video_url", "video_url": {"url": "https://example.com/sample.mp4"}, "fps": 2}
]
}]
}'
from openai import OpenAI
client = OpenAI(api_key=TURING_API_KEY, base_url=TURING_BASE_URL)
stream = client.chat.completions.create(
model="qwen-vl-max-2025-08-13",
stream=True,
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "请识别说话者、场景与关键事件,并分条输出。"},
{
"type": "video_url",
"video_url": {"url": "https://example.com/sample.mp4"},
"fps": 2,
},
],
}],
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
import base64
from openai import OpenAI
client = OpenAI(api_key=TURING_API_KEY, base_url=TURING_BASE_URL)
with open("clip.mp4", "rb") as f:
b64 = base64.b64encode(f.read()).decode()
resp = client.chat.completions.create(
model="qwen3-vl-plus",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "把视频拆成章节并写出每章主题"},
{
"type": "video_url",
"video_url": {"url": f"data:video/mp4;base64,{b64}"},
"fps": 1,
},
],
}],
)
print(resp.choices[0].message.content)
豆包 Doubao Seed 2.0(video_url block)
Doubao Seed 2.0 系列(pro / lite / mini)支持视频理解,使用专用的 video_url content block。支持两种传入方式:base64(本地文件)与公网 URL。
关键限制
- 文件大小 ≤ 50 MB;base64 模式下请求体 ≤ 64 MB
- 推荐 MP4 (H.264) 编码;data URI 的 MIME 类型需与实际格式匹配(如
data:video/mp4;base64,…) - 抽帧速率范围 0.2–5 fps,默认 1 fps;视频中的音频部分不参与理解
- 模型名不带
turing/前缀;具体型号以 模型列表 → 字节 中的 Doubao Seed 2.0 系列为准 - 公网 URL 必须对海外服务器可访问(推理侧在海外),国内私有地址请改用 base64
方式 A:base64
- cURL
- Python
BASE64_VIDEO=$(base64 -i video.mp4 | tr -d '\n')
curl $TURING_BASE_URL/chat/completions \
-H "Authorization: Bearer $TURING_API_KEY" \
-H "Content-Type: application/json" \
-d "{
\"model\": \"doubao-seed-2-0-pro-260215\",
\"messages\": [{
\"role\": \"user\",
\"content\": [
{\"type\": \"video_url\", \"video_url\": {\"url\": \"data:video/mp4;base64,$BASE64_VIDEO\"}},
{\"type\": \"text\", \"text\": \"请描述视频的主要内容\"}
]
}]
}"
import base64
from openai import OpenAI
client = OpenAI(api_key=TURING_API_KEY, base_url=TURING_BASE_URL)
with open("video.mp4", "rb") as f:
b64 = base64.b64encode(f.read()).decode()
response = client.chat.completions.create(
model="doubao-seed-2-0-pro-260215",
messages=[{
"role": "user",
"content": [
{"type": "video_url", "video_url": {"url": f"data:video/mp4;base64,{b64}"}},
{"type": "text", "text": "请描述视频的主要内容"},
],
}],
)
print(response.choices[0].message.content)
方式 B:公网 URL
curl $TURING_BASE_URL/chat/completions \
-H "Authorization: Bearer $TURING_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "doubao-seed-2-0-pro-260215",
"messages": [{
"role": "user",
"content": [
{"type": "video_url", "video_url": {"url": "https://example.com/sample.mp4"}},
{"type": "text", "text": "请描述视频的主要内容"}
]
}]
}'
仅
video_url不带text也可以提交,模型会自动给出整体描述;加上text引导特定任务。Doubao Seed 2.0 的思考能力(reasoning_effort)详见 思考与推理 / 豆包。
音频输入
GPT-4o Audio
import base64
with open("speech.wav", "rb") as f:
audio_b64 = base64.b64encode(f.read()).decode()
response = client.chat.completions.create(
model="turing/gpt-4o-audio-preview",
modalities=["text", "audio"],
audio={"voice": "alloy", "format": "wav"},
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "请先转录这段音频再回答。"},
{
"type": "input_audio",
"input_audio": {"data": audio_b64, "format": "wav"}
}
]
}]
)
支持格式:wav、mp3、flac、opus、pcm16。
Qwen Omni
qwen-omni-turbo-latest 既支持音频输入,也支持音频输出(同步返回 wav)。音频输出通过 modalities: ["text", "audio"] 加 audio.voice 控制(可选 Cherry / Serena 等音色)。
{
"model": "qwen-omni-turbo-latest",
"modalities": ["text", "audio"],
"audio": {"voice": "Cherry", "format": "wav"},
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "回答音频里的问题"},
{"type": "input_audio", "input_audio": {"data": "...", "format": "wav"}}
]
}]
}
文件输入
文件(如 PDF)以 Base64 内联方式传入,走 Responses 协议的 input_file content block —— 注意这与本页其余示例使用的 Chat Completions 不同。
import base64
from openai import OpenAI
client = OpenAI(
api_key="your-api-key",
base_url="https://live-turing.cn.llm.tcljd.com/api/v1",
)
with open("report.pdf", "rb") as f:
b64 = base64.b64encode(f.read()).decode()
response = client.responses.create(
model="turing/gpt-5.4",
input=[{
"role": "user",
"content": [
{
"type": "input_file",
"filename": "report.pdf",
"file_data": f"data:application/pdf;base64,{b64}",
},
{"type": "input_text", "text": "总结这份报告的三个要点"},
],
}],
)
print(response.output_text)
- 仅同时支持文本与图像输入的模型可处理 PDF:解析时会把每页的文本与页面图像一并放入上下文,token 消耗显著上升。
- 内联请求体受大小限制,大文件请先拆分 / 压缩。
支持类型依模型而定:PDF、DOCX、PPTX、图像等。
厂商差异速查
| 能力 | OpenAI | Anthropic | Gemini | Qwen | Doubao Seed 2.0 |
|---|---|---|---|---|---|
| 图片 URL | ✅ | ✅(SDK 自动转 base64) | ✅(公网文件 < 15 MB) | ✅ | ✅ |
| 图片 base64 | ✅ | ✅ | ✅ | ✅ | ✅ |
detail: low/high | ✅ | ✅(通过 image.source) | ⚠ 只 auto | ✅ | ❌ |
| 视频 (base64 data URI) | ❌ | ❌ | ✅ (image_url + mime_type,Gemini 2.5+/3.x) | — | ✅ (video_url) |
| 视频(帧数组) | ❌ | ❌ | ❌ | ✅(Omni 多 image_url) | ❌ |
视频(video_url,可选 fps) | ❌ | ❌ | ❌ | ✅(VL/qwen3-vl/qwen3.5+/qwen3.6+) | ✅ |
| 视频抽帧速率 | — | — | 模型自动 | VL:fps 字段 [0.1, 10],默认 2;Omni:客户端抽帧 | 0.2–5 fps(默认 1) |
| 音频输入 | ✅ (gpt-4o-audio) | ❌ | ✅ (Gemini 2.5+/3.x,image_url + mime_type) | ✅ | ❌(视频内音频也不参与理解) |
| 文件(PDF,base64) | ✅(Responses input_file,仅视觉模型) | — | — | — | — |
最佳实践
- 流式优先:多模态请求上下文大、生成慢,开
stream: true能显著降首 token 延迟 - 大文件走 base64 + 压缩:图像可 resize、视频可降分辨率
- prompt 明确任务:"总结视频内的章节结构"、"比较两张图的差异"比"描述一下"好得多
- 限定输出格式:要求 JSON / 要点列表,减少后处理
- 多图/多视频:合并到同一
content数组里,模型自动关联上下文 - 图像 URL 海外可达:国内地址推荐换成 base64
- Google URL 文件大小:Gemini/Google 的公网 URL 多媒体文件必须 < 15 MB,超过请压缩、切片或改用 base64
参数参考
/api/create-chat-completion—messages.content[]结构、modalities、audio/api/create-message— Claude 的content[].source结构/api/create-response— Responses 协议的input[].content[](input_text/input_image/input_file)
计费影响
图像按 token 计费(视分辨率与模型而定);视频按时长 + 分辨率折算;音频按秒数(且输入输出分别计费)。详见 计费与用量。
常见问题
- 图片 URL 超时 → 换 base64 或用国内 CDN(仍需海外可达)
- Google/Gemini URL 输入被拒 → 检查公网文件是否 < 15 MB,超过需压缩、裁剪或分段
- Gemini 视频太大被拒 → 分段切片或降分辨率
- GPT-4o Audio 没返回语音 → 检查
modalities: ["text", "audio"]是否齐全 - Qwen Omni 多帧识别差 → 抽帧频率提到 10+ FPS
- Claude 图像 token 成本超预期 → 图片自动被放大到 1568×1568;可先压缩到 1024 以内
See also
- 流式响应 — 多模态请求强烈推荐流式
- 图像生成 — 输出图像(不是输入)
- 视频生成 — 输出视频
- Realtime 实时语音 — 双向语音对话
- 计费与用量 — 图片 / 视频 / 音频的 token 折算规则