图片输入(视觉理解)
在 BigModel.io 的 Chat Completions 和 Messages 请求中以 URL 或 base64 发送图片给视觉模型,并排查纯文本模型导致的错误。
视觉模型可以在同一条消息里同时接收图片和文字。在 BigModel.io 上,按你调用的接口格式发送图片即可;分组上游使用其他协议时,网关会自动转换格式。
| 接口 | 图片内容块 |
|---|---|
/v1/chat/completions |
{"type": "image_url", "image_url": {"url": "https://..." }},或 data:image/...;base64,... 形式的 URL |
/v1/messages |
{"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": "..."}} |
/v1/responses |
{"type": "input_image", "image_url": "..."} |
只有支持图片输入的模型才能读取图片。在模型目录的模型页面中,查看输入类型是否包含图片,或是否有「视觉」标签。可用性取决于 Key 的分组。
#用 Chat Completions 发送图片
使用公开 URL:
curl https://bigmodel.io/v1/chat/completions \
-H "Authorization: Bearer $BIGMODEL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "YOUR_VISION_MODEL_ID",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "图片里有什么?"},
{"type": "image_url", "image_url": {"url": "https://upload.wikimedia.org/wikipedia/commons/3/3a/Cat03.jpg"}}
]
}]
}'import os
from openai import OpenAI
client = OpenAI(base_url="https://bigmodel.io/v1", api_key=os.environ["BIGMODEL_API_KEY"])
completion = client.chat.completions.create(
model="YOUR_VISION_MODEL_ID",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "图片里有什么?"},
{"type": "image_url", "image_url": {"url": "https://upload.wikimedia.org/wikipedia/commons/3/3a/Cat03.jpg"}},
],
}],
)
print(completion.choices[0].message.content)import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://bigmodel.io/v1", apiKey: process.env.BIGMODEL_API_KEY });
const completion = await client.chat.completions.create({
model: "YOUR_VISION_MODEL_ID",
messages: [{
role: "user",
content: [
{ type: "text", text: "图片里有什么?" },
{ type: "image_url", image_url: { url: "https://upload.wikimedia.org/wikipedia/commons/3/3a/Cat03.jpg" } },
],
}],
});
console.log(completion.choices[0].message.content);把 YOUR_VISION_MODEL_ID 换成模型目录中支持图片输入的模型 ID。
#本地文件用 base64
图片 URL 由模型供应方自行下载,所以本机或内网地址无法访问。本地文件请改用 data URL:
import base64
with open("photo.png", "rb") as f:
b64 = base64.b64encode(f.read()).decode()
image_part = {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{b64}"}}import { readFileSync } from "node:fs";
const b64 = readFileSync("photo.png").toString("base64");
const imagePart = { type: "image_url", image_url: { url: `data:image/png;base64,${b64}` } };#用 Messages API 发送图片
在支持 /v1/messages 的分组上,使用 Anthropic 的图片块:
import base64, os
from anthropic import Anthropic
client = Anthropic(base_url="https://bigmodel.io", api_key=os.environ["BIGMODEL_API_KEY"])
b64 = base64.b64encode(open("photo.png", "rb").read()).decode()
message = client.messages.create(
model="YOUR_VISION_MODEL_ID",
max_tokens=512,
messages=[{
"role": "user",
"content": [
{"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": b64}},
{"type": "text", "text": "图片里有什么?"},
],
}],
)
print(message.content[0].text)#图片如何转发
- GLM、DeepSeek 分组。 请求体原样发给供应方,
image_url内容块(以及detail等选项)在模型支持的范围内都能生效。 - 转换协议的分组。 Chat 的
image_url、Responses 的input_image和 Anthropic 的 base64 图片块之间会相互转换,所以按你调用的接口格式发送即可。
图片输入由上游供应方计数,计数会体现在用量中该请求的 token 用量里,并据此计费。图片大小和数量的限制由供应方决定,超出时会返回供应方的错误。
#验证配置
用视觉模型运行 cURL 示例,回复应描述图片内容(一只猫)。如果回复说看不到图片,或返回 400,说明该模型是纯文本模型。
#常见问题排查
供应方返回 400,或回复说无法查看图片。 模型不支持图片输入,请换一个模型页面列出图片输入的模型。
供应方无法下载图片。 URL 是私有地址、需要登录或拦截爬虫。改用 base64 data URL 发送。
413 请求体过大。 请求超过了网关的请求体大小限制。编码前先缩小或压缩图片;base64 会让体积增加约三分之一。供应方通常还有更小的限制。
/v1/messages 返回 404。 Key 的分组只支持 Chat Completions,请在 /v1/chat/completions 上使用 image_url 格式。
503 api_error「No available accounts」。 模型 ID 错误,或 Key 的分组不提供该模型。见模型 ID。
#相关文档
- 视频生成:用文字和图片生成视频。
- Chat Completions API 参考与 Messages API 参考。
- 模型目录:查找视觉模型。
更新于 · 以 Markdown 查看