图片输入(视觉理解)

在 BigModel.io 的 Chat Completions 和 Messages 请求中以 URL 或 base64 发送图片给视觉模型,并排查纯文本模型导致的错误。

本页目录
  1. 用 Chat Completions 发送图片
  2. 本地文件用 base64
  3. 用 Messages API 发送图片
  4. 图片如何转发
  5. 验证配置
  6. 常见问题排查
  7. 相关文档

视觉模型可以在同一条消息里同时接收图片和文字。在 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
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"}}
      ]
    }]
  }'
Python
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)
Node.js
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:

Python
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}"}}
Node.js
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 的图片块:

Python
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。

#相关文档

更新于 · 以 Markdown 查看