provod.ai / docs
API

Использование Chat Completions

Совместимые с OpenAI чат-запросы и потоковые ответы.

Обновлено

Отправьте минимальный рабочий запрос

Выберите доступную чат-модель из GET /v1/models и сначала отправьте обычный, не потоковый запрос:

Terminal
export PROVOD_API_KEY="sk_..."

curl --fail-with-body --silent --show-error https://api.provod.ai/v1/chat/completions \
  -H "Authorization: Bearer $PROVOD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-5.4",
    "messages": [
      { "role": "user", "content": "Reply with ok" }
    ]
  }'

Пример успешного ответа:

Response
{
  "id": "chatcmpl_example",
  "object": "chat.completion",
  "created": 1786651200,
  "model": "openai/gpt-5.4",
  "choices": [
    {
      "index": 0,
      "message": { "role": "assistant", "content": "ok" },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 8,
    "completion_tokens": 1,
    "total_tokens": 9
  }
}

Текст ассистента находится в choices[0].message.content. Перед выводом о полноте ответа проверьте finish_reason, а для модели, которая возвращает статистику, используйте объект usage.

Чат-сообщение отправляется и возвращается как последовательность частей ответа.

Совместимый с OpenAI чат по адресу /v1/chat/completions.

Ограничивайте ответ только при необходимости

Текущий контракт запроса принимает либо max_completion_tokens, либо прежнее название max_tokens как положительное целое число. Передавайте только одно поле. Возможность использовать лимит и способ его обработки зависят от выбранной модели, поэтому сверяйтесь с её supported_parameters, а не считайте одно из названий универсальным обходным путём.

Если оба поля отсутствуют, сервис использует текущую настройку по умолчанию при подготовке запроса и резерва. Она не означает максимальную длину ответа для всех моделей. Чтобы задать собственную границу, передайте одно поддерживаемое поле и проверьте finish_reason в ответе.

Добавьте потоковую передачу после проверки

Потоковая передача отдаёт ответ частями, не дожидаясь полного JSON. Chat Completions использует Server-Sent Events (SSE) — текстовый формат, в котором каждое событие передаётся записью data:.

Terminal
export PROVOD_API_KEY="sk_..."

curl --no-buffer --fail-with-body --silent --show-error https://api.provod.ai/v1/chat/completions \
  -H "Authorization: Bearer $PROVOD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-5.4",
    "messages": [
      { "role": "user", "content": "Reply with ok" }
    ],
    "stream": true
  }'

Каждое JSON-событие добавляет данные из choices[0].delta; успешный поток заканчивается буквальным маркером [DONE]:

SSE
data: {"id":"chatcmpl_example","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}

data: {"id":"chatcmpl_example","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"ok"},"finish_reason":null}]}

data: {"id":"chatcmpl_example","object":"chat.completion.chunk","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}

data: [DONE]

Обрабатывайте три варианта завершения: JSON-ошибку с HTTP-статусом не из диапазона 2xx до начала SSE, SSE-событие с ошибкой и закрытие соединения до [DONE]. Публичный код ошибки — это предназначенное для клиента значение error.code в ответе; используйте его для диагностики и решения о повторе.

Не повторяйте вслепую уже начавшийся ответ

Повтор с ограниченной экспоненциальной задержкой допустим только до получения результата. Если текст уже пришёл, сохраните частичный ответ и предложите пользователю или приложению решить, нужно ли продолжение: автоматический повтор может продублировать работу и расходы, а подтверждённое использование прерванного потока может быть оплачено.

Решение проблем

На этой странице