Текстовые запросы

Отправка запросов к текстовым моделям через Chat Completions API

Текстовые запросы

В этом гайде вы узнаете, как отправлять текстовые запросы к AI моделям и получать ответы.

Endpoint

POST https://api.usellm.ru/v1/chat/completions

Отправляет диалог (массив сообщений) в модель и получает ответ.

Базовые параметры

ПараметрТипОбязательныйОписание
modelstringДаID модели (например, openai/gpt-6-astra)
messagesarrayДа*Массив сообщений диалога
promptstringДа*Текстовый промпт (альтернатива messages)
temperaturenumberНетКреативность ответа (0.0-2.0, по умолчанию 1.0)
max_tokensnumberНетМаксимальное количество токенов в ответе
streambooleanНетВключить потоковую передачу (SSE)

* Укажите messages или prompt. При передаче prompt он автоматически преобразуется в messages с ролью user.

Дополнительные параметры

ПараметрТипОписание
max_completion_tokensnumberАльтернатива max_tokens
top_pnumberNucleus sampling (0.0-1.0)
frequency_penaltynumberШтраф за частоту токенов (-2.0 до 2.0)
presence_penaltynumberШтраф за присутствие токенов (-2.0 до 2.0)
response_formatobjectФормат ответа (структурный вывод)
toolsarrayОпределения функций (tool calling)
tool_choicestring/objectВыбор инструмента: none, auto, required
reasoningobjectНастройки reasoning
providerobjectВыбор провайдера (подробнее)
userstringID конечного пользователя

Структура messages

Каждое сообщение содержит роль и содержимое:

ПолеТипОписание
rolestringРоль отправителя (см. ниже)
contentstring | array | nullТекст, массив content parts или null

Роли сообщений

РольОписание
systemСистемное сообщение, задающее контекст и поведение модели
developerИнструкции разработчика (аналог system для некоторых моделей)
userСообщение от пользователя
assistantОтвет модели (для продолжения диалога). content может быть null, если есть tool_calls
toolРезультат вызова инструмента. Требуется поле tool_call_id

Типы content

Поле content может быть строкой или массивом content parts для передачи медиа:

// Строка
{ "role": "user", "content": "Привет!" }

// Массив content parts (для медиа)
{
  "role": "user",
  "content": [
    { "type": "text", "text": "Что на картинке?" },
    { "type": "image_url", "image_url": { "url": "https://example.com/img.jpg" } }
  ]
}

О передаче медиа рассказано в гайде Передача медиа на вход.

Простой пример

curl -X POST "https://api.usellm.ru/v1/chat/completions" \
  -H "Authorization: Bearer <USELLM_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-6-astra",
    "messages": [
      {"role": "system", "content": "Ты полезный ассистент."},
      {"role": "user", "content": "Напиши хайку о программировании"}
    ],
    "temperature": 0.7,
    "max_tokens": 100
  }'

Структура ответа

{
  "id": "gen_581761234567890123",
  "object": "chat.completion",
  "created": 1703001234,
  "model": "openai/gpt-6-astra",
  "provider": "openai-direct",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Код течёт рекой\nБаги тают на рассвете\nРелиз близко..."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 25,
    "completion_tokens": 20,
    "total_tokens": 45,
    "cost_rub": 0.15,
    "cost": 0.15
  }
}

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

ПолеТипОписание
idstringУникальный идентификатор запроса
providerstringПровайдер, обработавший запрос
choices[0].message.contentstringТекст ответа модели
choices[0].finish_reasonstringПричина завершения генерации
usage.prompt_tokensnumberКоличество токенов во входных сообщениях
usage.completion_tokensnumberКоличество токенов в ответе
usage.total_tokensnumberОбщее количество токенов
usage.cost_rubnumberСтоимость запроса в рублях
usage.costnumberСтоимость запроса в рублях (алиас cost_rub)

Значения finish_reason

ЗначениеОписание
stopМодель завершила генерацию естественным образом
lengthДостигнут лимит max_tokens
tool_callsМодель запросила вызов функции
content_filterКонтент заблокирован модерацией

Стриминг

Для получения ответа по мере генерации установите stream: true. Ответ приходит в формате Server-Sent Events (SSE):

curl -X POST "https://api.usellm.ru/v1/chat/completions" \
  -H "Authorization: Bearer <USELLM_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-6-astra",
    "messages": [{"role": "user", "content": "Напиши короткую историю"}],
    "stream": true
  }'

Пример диалога

Для ведения диалога передавайте историю сообщений:

curl -X POST "https://api.usellm.ru/v1/chat/completions" \
  -H "Authorization: Bearer <USELLM_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-6-astra",
    "messages": [
      {"role": "system", "content": "Ты помощник по программированию."},
      {"role": "user", "content": "Как создать массив в JavaScript?"},
      {"role": "assistant", "content": "В JavaScript массив создаётся так: const arr = [1, 2, 3];"},
      {"role": "user", "content": "А как добавить элемент?"}
    ]
  }'

Советы по использованию

Следующие шаги