Skip to content

通过 OpenRouter 的 /api/v1/chat/completions 接口,可以将图片发送给支持视觉的多模态模型。支持直接传 URL(适合公开图片)和 base64 编码(适合本地文件)两种方式。建议将文字 prompt 放在图片内容之前发送,以获得更好的解析效果。

基本说明

通过 /api/v1/chat/completions 接口,在 messagescontent 数组中加入 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/png
  • image/jpeg
  • image/webp
  • image/gif

常见问题

Q: 一次请求可以发送几张图片?

A: 取决于具体的提供商和模型,各家限制不同。发送前建议查看目标模型的文档,或从少量图片开始测试。

Q: URL 和 base64 哪种方式更好?

A: 公开图片优先用 URL,速度更快且不增加请求体积。本地图片或私有图片只能用 base64。

Q: 发送顺序有讲究吗?

A: 建议文字 prompt 放在图片之前,这样解析更准确。如果必须先发图片,可以把它放到 system prompt 中。