Создание чата с обработкой изображений (Непотоковый режим)
Этот эндпоинт используется для отправки промпта (содержащего текст или изображение) в модель, которая возвращает один или несколько сгенерированных ответов. Этот интерфейс особенно подходит для моделей, поддерживающих мультимодальный ввод (например, обработка изображений, улучшение качества, распознавание и генерация), таких как gpt-4o-image-vip.
Информация об API
- Адрес эндпоинта (URL):
https://api.codingplanx.ai/v1/chat/completions - Метод запроса:
POST - Content-Type:
application/json - Тип ответа:
application/json
Заголовки запроса (Headers)
| Имя параметра | Обязательно | Тип | Пример значения | Описание |
|---|---|---|---|---|
| Content-Type | Да | String | application/json | Формат тела запроса |
| Accept | Да | String | application/json | Ожидаемый формат ответа |
| Authorization | Нет | String | Bearer {{YOUR_API_KEY}} | API-ключ для аутентификации |
Параметры запроса (Body)
Тело запроса представляет собой объект JSON, содержащий следующие поля:
| Имя параметра | Тип | Обязательно | По умолчанию | Описание |
|---|---|---|---|---|
| model | String | Да | - | ID используемой модели. Например: gpt-4o-image-vip. |
| messages | Array | Да | - | Список сообщений диалога. Каждый объект содержит role (user/assistant/system) и content. content может быть строкой или массивом объектов, содержащих тип и URL изображения. |
| tools | Array | Да | - | Список инструментов, которые может вызвать модель. В настоящее время поддерживаются только функции. |
| tool_choice | Object | Да | none | Управляет тем, какую функцию вызывает модель. none — не вызывать, auto — автоматический выбор. |
| temperature | Number | Нет | 1 | Температура выборки (0-2). Чем выше значение, тем более случайный результат; чем ниже, тем более сфокусированный. |
| top_p | Number | Нет | 1 | Ядерное сэмплирование (Nucleus sampling). Учитываются только токены, входящие в топ P вероятностной массы. Рекомендуется изменять либо это значение, либо temperature, но не оба сразу. |
| n | Integer | Нет | 1 | Количество вариантов ответов, генерируемых для каждого входного сообщения. |
| stream | Boolean | Нет | false | Использовать ли потоковую передачу данных. Текущий интерфейс определен как непотоковый. |
| max_tokens | Integer | Нет | inf | Максимальное количество генерируемых токенов. |
| stop | String/Array | Нет | null | Стоп-последовательность. API прекратит генерацию дальнейших токенов при обнаружении этих символов. |
| presence_penalty | Number | Нет | 0 | От -2.0 до 2.0. Штрафует уже появившиеся токены, увеличивая вероятность того, что модель перейдет к новым темам. |
| frequency_penalty | Number | Нет | 0 | От -2.0 до 2.0. Штрафует новые токены в зависимости от частоты их появления в тексте. |
| response_format | Object | Нет | - | Задает формат вывода, например, { "type": "json_object" } включает режим JSON. |
| user | String | Нет | - | Уникальный идентификатор конечного пользователя, используется для мониторинга злоупотреблений. |
| seen | Integer | Нет | - | (Бета-версия) Указание значения seed (сид) для обеспечения максимально детерминированной выборки (постоянства результатов). |
Параметры ответа
| Имя параметра | Тип | Описание |
|---|---|---|
| id | String | Уникальный идентификатор данного запроса. |
| object | String | Тип объекта, всегда chat.completion. |
| created | Integer | Unix-метка времени (в секундах). |
| choices | Array | Массив, содержащий сгенерированные варианты ответа. |
| └ index | Integer | Индекс варианта в массиве. |
| └ message | Object | Объект сообщения, содержащий role и content. |
| └ finish_reason | String | Причина остановки генерации (например, stop, length). |
| usage | Object | Статистика использования токенов. |
| └ prompt_tokens | Integer | Количество токенов, использованных в промпте. |
| └ completion_tokens | Integer | Количество токенов, сгенерированных в ответе. |
| └ total_tokens | Integer | Общее количество использованных токенов. |
Примеры
Пример запроса (Улучшение/генерация изображения)
{
"model": "gpt-4o-image-vip",
"messages": [
{
"role": "user",
"content": [
{"type": "text", "text": "Улучшите это изображение и добавьте текст 'Я люблю Китай'. Соотношение сторон [4:3] "},
{
"type": "image_url",
"image_url": {
"url": "https://lsky.zhongzhuan.chat/i/2024/10/17/6711068a14527.png"
}
}
]
}
],
"tools": [],
"tool_choice": "none"
}
Пример ответа
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Хорошо, изображение успешно обработано. Вы можете посмотреть результат здесь: [Ссылка на изображение/Описание]"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 12,
"total_tokens": 21
}
}
Часто задаваемые вопросы (FAQ)
Q: Почему при использовании response_format: { "type": "json_object" } запрос возвращает ошибку?
A: При использовании режима JSON вы должны явно дать указание модели в messages сгенерировать JSON (например: добавить фразу "Пожалуйста, ответьте в формате JSON" в системный промпт). В противном случае модель может зациклиться или выдать ошибку из-за вывода контента, не соответствующего формату JSON.
Q: Как обеспечить одинаковый результат при каждом запросе?
A: Хотя ИИ-моделям присуща случайность, вы можете попытаться установить параметр seen (seed) и удерживать temperature на уровне 0. Также обращайте внимание на поле system_fingerprint в ответе, чтобы отслеживать, не изменилось ли серверное окружение.
Q: Какое значение max_tokens лучше установить?
A: Это зависит от вашего сценария использования. Для краткого описания изображения достаточно 100-300 токенов; если требуется детальный анализ или генерация длинного текста, рекомендуется установить значение выше 1000. Обратите внимание, что сумма входных токенов (включая изображение) и выходных токенов не должна превышать лимит контекста модели.
Q: Как передать изображение в запрос?
A: В поле content массива messages используйте type: "image_url". В настоящее время рекомендуется использовать публично доступные HTTPS-ссылки на изображения.
Q: Обязательны ли параметры tools и tool_choice?
A: Согласно спецификации данного API, эти два поля помечены как обязательные. Если вам не нужно вызывать конкретный инструмент, просто передайте пустой массив [] для tools и установите значение "none" для tool_choice.