图像输入
说明如何在 AnyInt 请求中同时传入文本和参考图。推荐使用 OpenAI 兼容聊天的 image_url 内容块。
这页说明“把图片作为输入传给模型”怎么写请求体。最常见场景是:你有一张或多张参考图,希望模型基于图片回答问题、描述图片、提取信息,或把参考图作为后续生成任务的上下文。
先看结论
如果你只是想“请求时带上图片”,优先使用 OpenAI 兼容聊天接口:
POST https://api.anyint.ai/openai/v1/chat/completions
请求写法是:
messages[].content不再写成普通字符串,而是写成数组。- 文本指令放在
{ "type": "text" }块里。 - 每张图片放在
{ "type": "image_url" }块里。 - 图片用公网 HTTPS URL;如果图片来自本地文件,也可以转成
data:image/...;base64,...data URL 后传入。
模型必须支持图像输入。模型 ID 请优先从 Models API 获取,不要只凭示例硬编码。
OpenAI 兼容请求示例
下面示例把一张参考图和一句文本指令放进同一条 user 消息:
curl https://api.anyint.ai/openai/v1/chat/completions \
-H "Authorization: Bearer $ANYINT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.1-flash-image-preview",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "使用这张参考图,用一句话描述产品风格。"
},
{
"type": "image_url",
"image_url": {
"url": "https://your-domain.com/reference.png"
}
}
]
}
]
}'这段请求里最重要的是 messages[0].content:
[
{
"type": "text",
"text": "使用这张参考图,用一句话描述产品风格。"
},
{
"type": "image_url",
"image_url": {
"url": "https://your-domain.com/reference.png"
}
}
]传入多张参考图
要传多张图片,就继续追加多个 image_url 块。图片顺序就是模型看到的顺序。
[
{
"type": "text",
"text": "比较这两张图的包装差异。"
},
{
"type": "image_url",
"image_url": {
"url": "https://your-domain.com/before.png"
}
},
{
"type": "image_url",
"image_url": {
"url": "https://your-domain.com/after.png"
}
}
]字段说明
| 字段 | 必填 | 含义 | 示例 |
|---|---|---|---|
model | 是 | 支持图像输入的模型 ID。请从 Models API 获取。 | gemini-3.1-flash-image-preview |
messages[].role | 是 | 消息角色。图像输入通常放在 user 消息中。 | user |
messages[].content[] | 是 | 内容块数组,可以同时放文本和图片。 | [{"type":"text",...},{"type":"image_url",...}] |
content[].type | 是 | 内容块类型。文本用 text,图片用 image_url。 | image_url |
content[].text | 文本块必填 | 给模型的文字说明。 | 描述这张图。 |
content[].image_url.url | 图片块必填 | 公网 HTTPS 图片 URL 或 data URL。生产环境优先用公网 URL;图片来自本地文件时可用 data URL。 | https://your-domain.com/reference.png |
图片地址要求
推荐使用能直接返回图片字节的公网 HTTPS URL,例如:
https://your-domain.com/reference.png不要发送本地文件路径,例如:
/tmp/reference.png
C:\Users\you\image.png上游模型无法读取你的本地磁盘。请先把图片上传到对象存储、CDN 或其他可公开访问的位置。
如果你不想先上传图片,也可以把本地图片编码成 base64,然后放进 data URL。PNG 的 data URL 形态是:
data:image/png;base64,<BASE64_IMAGE_DATA>例如:
IMAGE_DATA="$(base64 -i ./reference.png | tr -d '\n')"
curl https://api.anyint.ai/openai/v1/chat/completions \
-H "Authorization: Bearer $ANYINT_API_KEY" \
-H "Content-Type: application/json" \
-d "{
\"model\": \"gemini-3.1-flash-image-preview\",
\"messages\": [
{
\"role\": \"user\",
\"content\": [
{
\"type\": \"text\",
\"text\": \"使用这张参考图,用一句话描述产品风格。\"
},
{
\"type\": \"image_url\",
\"image_url\": {
\"url\": \"data:image/png;base64,$IMAGE_DATA\"
}
}
]
}
]
}"当图片来自本地文件且你不想先上传时,可以使用这种格式。注意请求体大小:base64 会放大体积;很大的图片更适合先上传到对象存储或 CDN,再传公网 HTTPS URL。
Gemini 原生 inlineData
如果你的应用已经使用 Gemini 原生请求体,/gemini/v1beta 路由也可以通过 contents[].parts[].inlineData 传入内联图片字节:
IMAGE_DATA="$(base64 -i ./reference.png | tr -d '\n')"
curl https://api.anyint.ai/gemini/v1beta/models/gemini-3.1-flash-image-preview:generateContent \
-H "Authorization: Bearer $ANYINT_API_KEY" \
-H "Content-Type: application/json" \
-d "{
\"contents\": [
{
\"role\": \"user\",
\"parts\": [
{
\"text\": \"使用这张参考图,用一句话描述产品风格。\"
},
{
\"inlineData\": {
\"mimeType\": \"image/png\",
\"data\": \"$IMAGE_DATA\"
}
}
]
}
]
}"只有在你明确需要 Gemini 原生 contents[].parts[] 负载时才使用这个格式。作为统一默认路径,仍然优先使用上面的 OpenAI 兼容 image_url 写法。
Anthropic 兼容格式
如果你的应用已经使用 Anthropic Messages API,可以使用:
POST https://api.anyint.ai/anthropic/v1/messages
Anthropic 风格的图片块使用 type: "image",图片字节放在 source.data,不是 image_url:
curl https://api.anyint.ai/anthropic/v1/messages \
-H "x-api-key: $ANYINT_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-sonnet-4-6",
"max_tokens": 512,
"messages": [
{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/png",
"data": "<BASE64_IMAGE_DATA>"
}
},
{
"type": "text",
"text": "描述这张图里有什么。"
}
]
}
]
}'如果你没有 Anthropic 格式兼容需求,优先使用上面的 OpenAI 兼容 image_url 写法。
和图像生成的区别
图像输入是“把图片交给模型看”。模型最终返回文本、图片还是混合内容,取决于你选择的模型和路由。
如果你的目标是生成或编辑图片,请继续看:
面向客户的图像输入,当前推荐使用 OpenAI 兼容聊天的 messages[].content[] 和 image_url。如果你的集成明确使用 Gemini 原生 contents[].parts[] 负载,也可以参考 Gemini 兼容 API 页面中的 inlineData 写法。
常见错误
- 把
messages[].content继续写成字符串,导致图片没有地方传。 - 把本地文件路径写进 JSON,而不是公网 URL 或 data URL。
- 图片 URL 需要登录、Cookie、防盗链,或不会直接返回图片字节。
- 模型本身不支持图像输入。
- 把 Gemini 原生
contents[].parts[]和 OpenAI 兼容messages[].content[]混在同一个请求里。 - 在 OpenAI 兼容
image_url.url字段里只传裸 base64,而不是带data:image/...;base64,前缀的 data URL。