Vision API — это возможность мультимодальных моделей анализировать изображения наряду с текстом. GPT-4o и Gemini умеют описывать содержимое картинок, читать текст с фотографий (OCR), анализировать графики, определять объекты и отвечать на вопросы по изображениям. В этой статье покажем, как использовать Vision API через ModelSwitch.
Как передавать изображения в API
Изображения передаются в массиве content сообщения. Поддерживаются два способа:
- URL изображения — модель скачает картинку по ссылке
- Base64 — изображение закодировано прямо в запросе
from openai import OpenAI
import base64
client = OpenAI(
base_url="https://api.modelswitch.ru/v1",
api_key="msk_ваш_ключ"
)
# Способ 1: Передача URL
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "Опиши, что изображено на этой картинке."},
{"type": "image_url", "image_url": {"url": "https://example.com/photo.jpg"}}
]
}
],
max_tokens=500
)
print(response.choices[0].message.content)
# Способ 2: Передача Base64
def encode_image(image_path: str) -> str:
with open(image_path, "rb") as f:
return base64.b64encode(f.read()).decode("utf-8")
image_b64 = encode_image("screenshot.png")
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "Прочитай текст на этом скриншоте."},
{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{image_b64}"}}
]
}
]
)
print(response.choices[0].message.content)
Практические примеры использования
Vision API подходит для множества задач:
OCR: чтение текста с изображений
def extract_text_from_image(image_path: str) -> str:
image_b64 = encode_image(image_path)
response = client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "Извлеки весь текст с этого изображения. Верни только текст, без комментариев."},
{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{image_b64}"}}
]
}],
temperature=0
)
return response.choices[0].message.content
text = extract_text_from_image("document_scan.jpg")
print(text)
Анализ графиков и диаграмм
response = client.chat.completions.create(
model="gemini-2.0-pro",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "Проанализируй этот график. Какие тренды видны? Какие выводы можно сделать?"},
{"type": "image_url", "image_url": {"url": "https://example.com/chart.png"}}
]
}]
)
print(response.choices[0].message.content)
Vision API на TypeScript
import OpenAI from "openai";
import * as fs from "fs";
const client = new OpenAI({
baseURL: "https://api.modelswitch.ru/v1",
apiKey: "msk_ваш_ключ",
});
async function analyzeImage(imagePath: string, question: string) {
const imageBuffer = fs.readFileSync(imagePath);
const base64Image = imageBuffer.toString("base64");
const mimeType = imagePath.endsWith(".png") ? "image/png" : "image/jpeg";
const response = await client.chat.completions.create({
model: "gpt-4o",
messages: [
{
role: "user",
content: [
{ type: "text", text: question },
{
type: "image_url",
image_url: { url: `data:${mimeType};base64,${base64Image}` },
},
],
},
],
max_tokens: 1000,
});
return response.choices[0].message.content;
}
const result = await analyzeImage("product.jpg", "Опиши этот товар для карточки интернет-магазина");
console.log(result);
Советы по работе с Vision API
- Размер изображений — оптимальный размер 1024x1024 пикселей. Большие изображения автоматически уменьшаются, но стоят больше токенов.
- Параметр detail — используйте
"detail": "low"для экономии токенов, если высокая детализация не нужна:{"url": "...", "detail": "low"}. - Несколько изображений — можно передать несколько картинок в одном сообщении для сравнения.
- Выбор модели — GPT-4o лучше для общих задач и OCR; Gemini 2.0 Pro лучше для анализа сложных документов благодаря большому контексту.
- Стоимость — обработка изображений стоит дополнительных токенов. Одна картинка 1024x1024 при detail=high стоит примерно 765 токенов.
Vision API через ModelSwitch работает с теми же API-ключами и в том же формате, что и текстовые запросы. Просто добавьте изображение в messages.