Appearance
通过 OpenRouter 的 /api/v1/chat/completions 接口,可以将图片发送给支持视觉的多模态模型。支持直接传 URL(适合公开图片)和 base64 编码(适合本地文件)两种方式。建议将文字 prompt 放在图片内容之前发送,以获得更好的解析效果。
基本说明
通过 /api/v1/chat/completions 接口,在 messages 的 content 数组中加入 image_url 类型的内容块即可发送图片。一次请求可以发送多张图片,具体限制取决于各提供商和模型。
OpenRouter 支持两种图片传入方式:
- URL:适合公开可访问的图片,无需本地编码,效率更高
- Base64:本地文件或非公开图片必须使用此方式
建议先发文字 prompt,再发图片。如果图片必须排在前面,建议放到 system prompt 里。
使用图片 URL
typescript
import { OpenRouter } from '@openrouter/sdk';
const openRouter = new OpenRouter({
apiKey: '<OPENROUTER_API_KEY>',
});
const result = await openRouter.chat.send({
model: 'google/gemini-2.5-flash',
messages: [
{
role: 'user',
content: [
{
type: 'text',
text: "What's in this image?",
},
{
type: 'image_url',
imageUrl: {
url: 'https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg',
},
},
],
},
],
stream: false,
});
console.log(result);使用 Base64 编码图片
对于本地图片,先将文件读取并转成 base64 data URL:
typescript
import { OpenRouter } from '@openrouter/sdk';
import * as fs from 'fs';
const openRouter = new OpenRouter({
apiKey: '<OPENROUTER_API_KEY>',
});
async function encodeImageToBase64(imagePath: string): Promise<string> {
const imageBuffer = await fs.promises.readFile(imagePath);
const base64Image = imageBuffer.toString('base64');
return `data:image/jpeg;base64,${base64Image}`;
}
const imagePath = 'path/to/your/image.jpg';
const base64Image = await encodeImageToBase64(imagePath);
const result = await openRouter.chat.send({
model: 'google/gemini-2.5-flash',
messages: [
{
role: 'user',
content: [
{
type: 'text',
text: "What's in this image?",
},
{
type: 'image_url',
imageUrl: {
url: base64Image,
},
},
],
},
],
stream: false,
});
console.log(result);支持的图片格式
image/pngimage/jpegimage/webpimage/gif
常见问题
Q: 一次请求可以发送几张图片?
A: 取决于具体的提供商和模型,各家限制不同。发送前建议查看目标模型的文档,或从少量图片开始测试。
Q: URL 和 base64 哪种方式更好?
A: 公开图片优先用 URL,速度更快且不增加请求体积。本地图片或私有图片只能用 base64。
Q: 发送顺序有讲究吗?
A: 建议文字 prompt 放在图片之前,这样解析更准确。如果必须先发图片,可以把它放到 system prompt 中。