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

Создание API чата для распознавания изображений (Потоковый / Непотоковый режим)

Данный API поддерживает мультимодальный ввод, позволяя пользователям отправлять как текст, так и URL-адреса изображений в диалоге. Модель генерирует соответствующий ответ на основе введенного промпта и содержимого изображения. Поддерживается потоковый вывод (Streaming) для обеспечения более плавного взаимодействия с пользователем.

  • URL-адрес API: https://api.codingplanx.ai/v1/chat/completions
  • Метод запроса: POST
  • Официальная документация: OpenAI Chat Completion API

Параметры запроса

Заголовки (Headers)

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

Тело запроса (Body)

ПараметрТипОбязательноПо умолчаниюОписание
modelstringДа-Идентификатор используемой модели (например, gpt-4o, gpt-4-vision-preview).
messagesarrayДа-Список сообщений диалога на данный момент. Подробности см. в структуре messages ниже.
streambooleanНетfalseВключить ли потоковый вывод. При включении будут отправляться события Server-Sent Events (SSE).
temperaturenumberНет1Температура выборки (от 0 до 2). Чем выше значение, тем более случайным будет результат; чем ниже, тем более детерминированным.
top_pnumberНет1Вероятность выборки ядра (nucleus sampling). Рекомендуется изменять либо это значение, либо temperature, но не оба сразу.
max_tokensintegerНетinfМаксимальное количество токенов, генерируемых в ответе чата.
nintegerНет1Количество вариантов ответов, генерируемых для каждого входного сообщения.
presence_penaltynumberНет0(от -2.0 до 2.0) Положительные значения увеличивают вероятность того, что модель заговорит на новые темы.
frequency_penaltynumberНет0(от -2.0 до 2.0) Положительные значения снижают вероятность повторения моделью одних и тех же слов или фраз.
response_formatobjectНет-Указывает формат вывода, например {"type": "json_object"}.
stopstring/arrayНетnullПоследовательность (до 4-х), при достижении которой API прекратит генерацию токенов.
userstringНет-Уникальный идентификатор конечного пользователя, используемый для мониторинга злоупотреблений.

Структура объекта messages

Каждый элемент в списке сообщений содержит следующие поля:

  • role: (string) Роль автора сообщения, возможные значения: system, user, assistant, tool.
  • content: (string или array) Содержимое сообщения.
    • В режиме распознавания изображений content является массивом, содержащим объекты с типами text и image_url.

Пример запроса

Смешанный запрос с текстом и изображением (JSON)

{
    "model": "gpt-4o",
    "messages": [
      {
        "role": "system",
        "content": "Вы — профессиональный помощник по анализу изображений."
      },
      {
            "role": "user",
            "content": [
                {
                    "type": "text", 
                    "text": "Что находится на этой картинке? Пожалуйста, опишите подробно."
                },
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://example.com/image.png"
                    }
                }
            ]
        }
    ],
    "stream": true
}

Описание ответа

Непотоковый ответ (stream: false)

ПараметрТипОписание
idstringУникальный идентификатор данного запроса.
objectstringТип объекта, обычно chat.completion.
createdintegerВременная метка (timestamp) создания в секундах.
choicesarrayСписок вариантов ответов, сгенерированных моделью.
choices[n].messageobjectОбъект сообщения, возвращенный моделью (содержит role и content).
choices[n].finish_reasonstringПричина остановки генерации (например, stop, length).
usageobjectСтатистика использования токенов.

Пример ответа

{
    "id": "chatcmpl-123",
    "object": "chat.completion",
    "created": 1677652288,
    "choices": [
        {
            "index": 0,
            "message": {
                "role": "assistant",
                "content": "На этой фотографии изображено безмятежное озеро на фоне горного хребта."
            },
            "finish_reason": "stop"
        }
    ],
    "usage": {
        "prompt_tokens": 120,
        "completion_tokens": 35,
        "total_tokens": 155
    }
}

Потоковый ответ (stream: true)

Если параметр stream установлен в true, API возвращает ответ в формате text/event-stream. Каждая строка начинается с префикса data: , а ее содержимое представляет собой строку JSON. Последним сообщением в потоке всегда будет data: [DONE].


Частые вопросы (FAQ)

Q1: Как загрузить изображение локально вместо передачи URL-адреса? A: Данный API в первую очередь поддерживает URL-адреса изображений. Если у вас есть только локальное изображение, рекомендуется сначала загрузить его на ваш фотохостинг или в облачное хранилище объектов (OSS). В качестве альтернативы вы можете преобразовать изображение в строку с кодировкой Base64 в формате data:image/jpeg;base64,{base64_encode_data} и передать её в поле url.

Q2: Почему в моем потоковом запросе не возвращается статистика usage? A: В стандартном потоковом протоколе, совместимом с OpenAI, статистика usage обычно возвращается только в последнем фрагменте данных (chunk) или при передаче специального параметра stream_options. Убедитесь, что версия вашей модели поддерживает возврат счетчика токенов в потоковом режиме.

Q3: Каковы ограничения на размер и формат изображений для распознавания? A: Обычно поддерживаются форматы PNG, JPEG, WEBP и GIF (без анимации). Рекомендуемый размер файла изображения — не более 20 МБ. Для достижения наилучших результатов распознавания рекомендуется использовать изображения с разрешением 512x512 пикселей и выше.

Q4: Что делать, если мой запрос возвращает ошибку "401 Unauthorized"? A: Убедитесь, что вы правильно передали заголовок Authorization. Формат должен быть Bearer плюс ваш API KEY. Также проверьте, действителен ли сам ключ и достаточно ли средств на вашем балансе.

Q5: Влияет ли параметр temperature на результаты распознавания изображений? A: Да. Параметр temperature влияет на языковую креативность модели при описании изображения. Если вам нужно очень объективное и строгое описание, рекомендуется установить более низкое значение (например, 0.2); если вы хотите получить более живое и интересное описание, установите более высокое значение (например, 0.8).

Q6: Как обработать распознавание нескольких изображений одновременно? A: Вы можете добавить несколько объектов с типом image_url в массив messages.content. Модель попытается понять и проанализировать содержимое всех предоставленных изображений одновременно.