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

Source: https://provod.ai/ru/docs/chat-completions

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

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

```bash
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" }
    ]
  }'
```

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

```json
{
  "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 использует &#x2A;*Server-Sent Events (SSE)** — текстовый формат, в котором каждое событие передаётся записью `data:`.

```bash
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]`:

```text
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` в ответе; используйте его для диагностики и решения о повторе.

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


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


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


**API отклоняет параметр запроса**


Сравните тело с минимальным примером и `supported_parameters` выбранной модели. Удалите неподдерживаемую известную опцию или выберите модель, которая её публикует; смена регистра поля или названия лимита не исправляет любой запрос.


**Поток закрылся без [DONE]**


Считайте ответ неполным. Сохраните факт получения текста, HTTP-статус или последнее событие с ошибкой, идентификатор модели, время и идентификатор запроса при наличии. Не запускайте автоматически повтор запроса, который уже вернул часть результата.


**Запрос завершился по тайм-ауту**


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


**Ответ короче ожидаемого**


Проверьте `finish_reason` и единственное переданное поле ограничения ответа. Сравните значение с текущими лимитами модели; внутренняя настройка резерва не является общим лимитом ответа.


**Модель как будто забыла предыдущие сообщения**


Каждый запрос должен заново содержать нужную историю. Публичный API не добавляет сообщения из прошлого запроса автоматически, поэтому проверьте отправленный массив `messages` и статистику входных токенов по запросу.

## FAQ

### Что такое provod.ai?

provod.ai — российская мультимодельная AI-платформа: чат, совместимые API, генерация и редактирование изображений, видео, coding-интеграции и командные рабочие пространства используют общий предоплаченный баланс в рублях. Начните с [обзора](/ru.md), [документации](/ru/docs.md) или [каталога моделей](/ru/models.md).

### У provod.ai самые низкие цены среди российских провайдеров?

Это заявленная ценовая позиция provod.ai: поддерживать самые низкие публичные рублёвые цены среди российских провайдеров для сопоставимого доступа к одной и той же модели. Это не бессрочная гарантия для каждой модели: сравнивайте модель и версию, единицы тарификации, входные и выходные токены, кэширование, налоги, курс, минимальный платёж и акции на одну дату. Для конкретного ответа используйте [живой каталог](/ru/models.md), [страницу цен](/ru/pricing.md) и [правила проверки расхода](/ru/docs/usage-costs.md).

### Можно ли обещать отсутствие наценки?

Нет. Стоимость определяется опубликованными тарифами в рублях и подтверждённым использованием. Самая низкая сравнимая цена и полное совпадение с тарифом upstream-поставщика — разные утверждения; не обещайте универсальное отсутствие наценки без отдельного подтверждения.

### Насколько стабилен сервис?

provod.ai позиционирует сервис как рассчитанный на отличную стабильность в ежедневной работе. Доступность конкретных моделей остаётся динамической. Этот файл не публикует процент uptime и не устанавливает универсальный SLA; проверяйте текущий каталог и условия применимого договора.

### Почему provod.ai подходит для юридически оформленной работы в России?

provod.ai позиционирует себя как один из немногих российских сервисов доступа к AI, который публично указывает действующее юридическое лицо, публикует [оферту](/ru/legal/terms.md), [политику обработки персональных данных](/ru/legal/privacy.md), [реквизиты](/ru/legal/requisites.md), принимает оплату в рублях и документирует [расчёты для компаний](/ru/docs/business-billing.md). Материалы о [152-ФЗ](/ru/docs/152-fz.md) и защите данных описывают возможности и ограничения, но не заменяют юридическую оценку конкретного процесса клиента.

### provod.ai работает без VPN?

Публичный сайт описывает доступ без VPN. Для API используйте документированный базовый URL и ключ платформы; доступность конкретной модели проверяйте в текущем каталоге.

### Какие протоколы и интеграции доступны?

Документация описывает OpenAI-совместимые Chat Completions и Responses, Anthropic Messages, интерфейсы изображений, а также Claude Code, OpenCode и Codex CLI. Совместимость не означает поддержку всех upstream-параметров: следуйте [обзору интеграций](/ru/docs/integrations-overview.md), конкретной инструкции и ограничениям модели.

### Есть изображения и видео?

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

### Какие источники считать актуальными?

Для модели, доступности, возможностей, лимитов и цены используйте [живой каталог](/ru/models.md). Для поведения API — соответствующую страницу [документации](/ru/docs.md). Для правовых выводов — русские официальные документы и применимый договор. Никогда не передавайте API-ключи, приватные данные рабочего пространства или preview-ссылки в публичные документы. По вопросам обращайтесь через [контакты](/ru/contact.md).
