Пригласите друзей и получите бесплатные токены!Узнать больше

Создание чата с распознаванием изображений (Потоковый вывод) Base64

Описание интерфейса: Принимая подсказку (промпт), модель возвращает одно или несколько предсказанных завершений, а также может возвращать вероятности альтернативных токенов для каждой позиции. Этот интерфейс в основном используется для создания диалоговых завершений, включающих распознавание изображений (на основе Base64) и текстовые подсказки.

Официальная документация: Документация OpenAI API


Детали интерфейса

  • Метод запроса: POST
  • URL запроса: https://api.codingplanx.ai/v1/chat/completions
  • Формат данных: application/json

Заголовки запроса (Request Headers)

Имя параметраОбязательноТип данныхПример значенияОписание
Content-TypeДаstringapplication/jsonФормат данных
AcceptДаstringapplication/jsonФормат ответа
AuthorizationНетstringBearer {{YOUR_API_KEY}}Токен аутентификации

Параметры запроса (Request Body)

Имя поляТип данныхОбязательноОписание
modelstringДаID используемой модели (например: gpt-4o-mini).
messagesarrayДаСписок сообщений, составляющих диалог на данный момент. Содержит role и content. Для распознавания изображений content может быть массивом, содержащим текст и image_url (Base64).
toolsarrayДаСписок инструментов, которые может вызывать модель. В настоящее время в качестве инструментов поддерживаются только функции. Используется для предоставления списка функций, для которых модель может генерировать входные данные в формате JSON.
tool_choiceobjectДаУправляет тем, какую функцию вызывает модель. none означает, что функции не вызываются; auto — автоматический выбор; также можно принудительно вызвать конкретную функцию.
temperatureintegerНетТемпература выборки, от 0 до 2. Более высокие значения (например, 0.8) делают вывод более случайным, а более низкие (например, 0.2) — более детерминированным. Не рекомендуется изменять одновременно с top_p.
top_pintegerНетПараметр ядерного семплирования. 0.1 означает, что учитываются только токены, составляющие верхние 10% вероятностной массы. Не рекомендуется изменять одновременно с temperature.
nintegerНетКоличество вариантов завершения чата, генерируемых для каждого входного сообщения. По умолчанию 1.
streambooleanНетПереключатель потокового вывода. По умолчанию false. Если установлено значение true, частичные дельты сообщений будут отправляться в виде событий, отправляемых сервером (SSE), и завершатся при получении data: [DONE].
stopstringНетПоследовательность (до 4), при которой API прекратит дальнейшую генерацию токенов. По умолчанию null.
max_tokensintegerНетМаксимальное количество токенов, генерируемых в завершении чата. По умолчанию inf (бесконечность).
presence_penaltynumberНетШтраф за присутствие (от -2.0 до 2.0). Положительные значения штрафуют новые токены в зависимости от того, появлялись ли они уже в тексте, увеличивая вероятность того, что модель перейдет к новым темам.
frequency_penaltynumberНетШтраф за частоту (от -2.0 до 2.0). Положительные значения штрафуют новые токены в зависимости от их текущей частоты в тексте, снижая вероятность повторения одного и того же содержания моделью. По умолчанию 0.
logit_biasobjectНетИзменяет вероятность появления указанных токенов в завершении. Принимает JSON-объект, сопоставляющий ID токена со значением смещения (от -100 до 100).
userstringНетУникальный идентификатор, представляющий вашего конечного пользователя, который помогает отслеживать и выявлять злоупотребления.
response_formatobjectНетУказывает формат, который должна выводить модель. Передача { "type": "json_object" } включает режим JSON. При использовании необходимо в промпте попросить модель вывести данные в формате JSON.
seenintegerНетБета-функция. Детерминированный 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)

Имя поляТип данныхОписание
idstringУникальный идентификатор завершения чата.
objectstringТип объекта, обычно chat.completion (или chat.completion.chunk в случае потокового вывода).
createdintegerМетка времени создания в формате Unix.
choicesarrayСписок вариантов завершения.
└─ indexintegerИндекс варианта в списке.
└─ messageobjectОбъект сообщения, сгенерированный моделью. Содержит role и content.
└─ finish_reasonstringПричина, по которой модель прекратила генерацию (например: stop означает нормальное завершение, length означает достижение лимита max_tokens).
usageobjectСтатистика потребления токенов (Token) для данного запроса.
└─ prompt_tokensintegerКоличество токенов, затраченных на промпт (включая токены, рассчитанные для изображения).
└─ completion_tokensintegerКоличество токенов, затраченных на сгенерированный контент.
└─ total_tokensintegerОбщее количество токенов, затраченных на этот запрос.

Пример ответа (Успешно 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 и самим ключом).