Chat Completions

Используйте OpenAI-совместимый эндпоинт Chat Completions для генерации текста на основе сообщений.

POST https://getrouter.ai/v1/chat/completions

Базовый запрос

curl https://getrouter.ai/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "MODEL_ID",
    "messages": [
      {"role": "system", "content": "Отвечай ясно и кратко."},
      {"role": "user", "content": "Что такое API-шлюз?"}
    ]
  }'

В непотоковом ответе сгенерированное содержимое находится по адресу:

choices[0].message.content

Если модель сообщает расход токенов, эти данные возвращаются в объекте usage.

Python

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://getrouter.ai/v1",
)

response = client.chat.completions.create(
    model="MODEL_ID",
    messages=[
        {"role": "system", "content": "Отвечай ясно и кратко."},
        {"role": "user", "content": "Что такое API-шлюз?"},
    ],
)

print(response.choices[0].message.content)

Node.js / TypeScript

import OpenAI from 'openai'

const client = new OpenAI({
  apiKey: 'YOUR_API_KEY',
  baseURL: 'https://getrouter.ai/v1',
})

const response = await client.chat.completions.create({
  model: 'MODEL_ID',
  messages: [
    { role: 'system', content: 'Отвечай ясно и кратко.' },
    { role: 'user', content: 'Что такое API-шлюз?' },
  ],
})

console.log(response.choices[0]?.message.content)

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

Схема API поддерживает следующие роли:

РольНазначение
systemОбщие правила поведения или контекст
developerИнструкции разработчика для моделей, поддерживающих эту роль
userВвод конечного пользователя
assistantПредыдущий ответ ассистента
toolРезультат выполнения вызова инструмента

Основные поля запроса

ПолеОписание
modelОбязательный идентификатор модели
messagesОбязательная упорядоченная последовательность сообщений диалога
streamВозвращать данные по мере генерации, если задано true
temperatureУправление сэмплированием, если оно поддерживается выбранной моделью
top_pУправление ядерной выборкой
max_tokensМаксимальное количество генерируемых токенов для совместимых моделей
max_completion_tokensОграничение длины завершения для совместимых моделей
toolsОпределения инструментов для моделей, поддерживающих их вызов
tool_choiceУправляет выбором инструмента
response_formatНастройки структурированного ответа для совместимых моделей
reasoning_effortlow, medium или high для совместимых моделей рассуждений

Не отправляйте необязательные поля, если выбранная модель их не поддерживает.

Мультимодальный ввод

Схема содержимого сообщения поддерживает типизированные части: текст, URL изображений, входное аудио, файлы и URL видео. Доступность зависит от модели.

Пример запроса с изображением:

{
  "model": "MODEL_ID",
  "messages": [
    {
      "role": "user",
      "content": [
        {"type": "text", "text": "Опиши это изображение."},
        {
          "type": "image_url",
          "image_url": {"url": "https://example.com/image.jpg"}
        }
      ]
    }
  ]
}

Вызов инструментов

Когда совместимая модель возвращает tool_calls, выполните запрошенную функцию в приложении и добавьте сообщение tool с соответствующим tool_call_id. Поддержка инструментов и точное поведение зависят от модели.

Потоковые ответы

Задайте для stream значение true и считывайте текст из choices[0].delta.content каждого фрагмента. Полные примеры приведены в разделе Потоковые ответы.

Ошибки

  • 400 — недопустимые поля запроса или неподдерживаемые значения
  • 401 — ключ API отсутствует или недействителен
  • 429 — ограничение частоты запросов, квоты или доступных ресурсов
  • Ошибки модели — неверный идентификатор модели или несоответствие эндпоинта

Что дальше