Создание чата с распознаванием изображений (Потоковый вывод) Base64
Описание интерфейса: Принимая подсказку (промпт), модель возвращает одно или несколько предсказанных завершений, а также может возвращать вероятности альтернативных токенов для каждой позиции. Этот интерфейс в основном используется для создания диалоговых завершений, включающих распознавание изображений (на основе Base64) и текстовые подсказки.
Официальная документация: Документация OpenAI API
Детали интерфейса
- Метод запроса:
POST - URL запроса:
https://api.codingplanx.ai/v1/chat/completions - Формат данных:
application/json
Заголовки запроса (Request Headers)
| Имя параметра | Обязательно | Тип данных | Пример значения | Описание |
|---|---|---|---|---|
| Content-Type | Да | string | application/json | Формат данных |
| Accept | Да | string | application/json | Формат ответа |
| Authorization | Нет | string | Bearer {{YOUR_API_KEY}} | Токен аутентификации |
Параметры запроса (Request Body)
| Имя поля | Тип данных | Обязательно | Описание |
|---|---|---|---|
| model | string | Да | ID используемой модели (например: gpt-4o-mini). |
| messages | array | Да | Список сообщений, составляющих диалог на данный момент. Содержит role и content. Для распознавания изображений content может быть массивом, содержащим текст и image_url (Base64). |
| tools | array | Да | Список инструментов, которые может вызывать модель. В настоящее время в качестве инструментов поддерживаются только функции. Используется для предоставления списка функций, для которых модель может генерировать входные данные в формате JSON. |
| tool_choice | object | Да | Управляет тем, какую функцию вызывает модель. none означает, что функции не вызываются; auto — автоматический выбор; также можно принудительно вызвать конкретную функцию. |
| temperature | integer | Нет | Температура выборки, от 0 до 2. Более высокие значения (например, 0.8) делают вывод более случайным, а более низкие (например, 0.2) — более детерминированным. Не рекомендуется изменять одновременно с top_p. |
| top_p | integer | Нет | Параметр ядерного семплирования. 0.1 означает, что учитываются только токены, составляющие верхние 10% вероятностной массы. Не рекомендуется изменять одновременно с temperature. |
| n | integer | Нет | Количество вариантов завершения чата, генерируемых для каждого входного сообщения. По умолчанию 1. |
| stream | boolean | Нет | Переключатель потокового вывода. По умолчанию false. Если установлено значение true, частичные дельты сообщений будут отправляться в виде событий, отправляемых сервером (SSE), и завершатся при получении data: [DONE]. |
| stop | string | Нет | Последовательность (до 4), при которой API прекратит дальнейшую генерацию токенов. По умолчанию null. |
| max_tokens | integer | Нет | Максимальное количество токенов, генерируемых в завершении чата. По умолчанию inf (бесконечность). |
| presence_penalty | number | Нет | Штраф за присутствие (от -2.0 до 2.0). Положительные значения штрафуют новые токены в зависимости от того, появлялись ли они уже в тексте, увеличивая вероятность того, что модель перейдет к новым темам. |
| frequency_penalty | number | Нет | Штраф за частоту (от -2.0 до 2.0). Положительные значения штрафуют новые токены в зависимости от их текущей частоты в тексте, снижая вероятность повторения одного и того же содержания моделью. По умолчанию 0. |
| logit_bias | object | Нет | Изменяет вероятность появления указанных токенов в завершении. Принимает JSON-объект, сопоставляющий ID токена со значением смещения (от -100 до 100). |
| user | string | Нет | Уникальный идентификатор, представляющий вашего конечного пользователя, который помогает отслеживать и выявлять злоупотребления. |
| response_format | object | Нет | Указывает формат, который должна выводить модель. Передача { "type": "json_object" } включает режим JSON. При использовании необходимо в промпте попросить модель вывести данные в формате JSON. |
| seen | integer | Нет | Бета-функция. Детерминированный seed (зерно) выборки. Повторные запросы с одним и тем же seed и параметрами должны возвращать одинаковые результаты (абсолютная детерминированность не гарантируется). |
Пример запроса
{
"model": "gpt-4o-mini",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": [
{
"type": "text",
"text": "Что изображено на этой картинке? Пожалуйста, опишите подробно."
},
{
"type": "image_url",
"image_url": {
"url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAiEAAAIhCAYAAACYF2qHAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR4nOy9ebxtWVXf+x1zrrX2Pud2VRQUjUVf0glIYvOJLdJ8iCagIor... (здесь пропущена длинная строка base64)"
}
}
]
}
]
}
Параметры ответа (Response Body)
| Имя поля | Тип данных | Описание |
|---|---|---|
| id | string | Уникальный идентификатор завершения чата. |
| object | string | Тип объекта, обычно chat.completion (или chat.completion.chunk в случае потокового вывода). |
| created | integer | Метка времени создания в формате Unix. |
| choices | array | Список вариантов завершения. |
| └─ index | integer | Индекс варианта в списке. |
| └─ message | object | Объект сообщения, сгенерированный моделью. Содержит role и content. |
| └─ finish_reason | string | Причина, по которой модель прекратила генерацию (например: stop означает нормальное завершение, length означает достижение лимита max_tokens). |
| usage | object | Статистика потребления токенов (Token) для данного запроса. |
| └─ prompt_tokens | integer | Количество токенов, затраченных на промпт (включая токены, рассчитанные для изображения). |
| └─ completion_tokens | integer | Количество токенов, затраченных на сгенерированный контент. |
| └─ total_tokens | integer | Общее количество токенов, затраченных на этот запрос. |
Пример ответа (Успешно 200 OK)
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "\r
\r
Hello there, how may I assist you today?"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 12,
"total_tokens": 21
}
}
Часто задаваемые вопросы (FAQ)
Q1: Как включить потоковый вывод (Streaming)?
A: В теле запроса установите параметр stream на true. После включения интерфейс больше не будет ждать полной генерации ответа перед возвратом. Вместо этого он будет возвращать блоки данных в формате data: {...} пословно/пофразово через события, отправляемые сервером (Server-Sent Events, SSE), пока не получит маркер data: [DONE], сигнализирующий об окончании генерации.
Q2: Каковы требования к кодировке Base64 для распознавания изображений?
A: Строка Base64 изображения должна содержать правильный префикс MIME-типа, например, data:image/png;base64, или data:image/jpeg;base64,. Рекомендуется сжать размер изображения перед его преобразованием в Base64, чтобы уменьшить задержку передачи по сети и снизить потребление prompt_tokens (слишком большие изображения потребляют много токенов и могут даже превысить лимит контекста).
Q3: Почему ответ модели был обрезан?
A: Пожалуйста, проверьте значение choices[0].finish_reason в теле ответа. Если это length, это означает, что сгенерированный текст достиг установленного вами лимита max_tokens, или весь диалог превысил ограничение максимального контекстного окна для этой модели. Вы можете решить эту проблему, увеличив max_tokens.
Q4: Как заставить модель выводить данные в формате JSON?
A: Во-первых, вам нужно установить "response_format": { "type": "json_object" } в теле запроса. Важное примечание: Помимо установки этого параметра, вы также должны явно потребовать от модели вывод JSON на естественном языке в системном промпте (system prompt) или пользовательском промпте в messages (например: "Пожалуйста, выведите результат в формате JSON"). Если этого не сделать, модель может застрять в бесконечной генерации пробелов, пока не исчерпает все токены.
Q5: Что делать, если возникает ошибка 401 Unauthorized?
A: Пожалуйста, убедитесь, что параметр Authorization в заголовках запроса правильно содержит API-ключ, и формат строго соответствует Bearer ВАШ_API_КЛЮЧ (обратите внимание на пробел между словом Bearer и самим ключом).