OpenAI-compatible API: что это и как подключить
Разбор термина без маркетинга: что именно должно совпадать, чтобы клиент работал без правок, и что от формата не зависит.
Определение
OpenAI-compatible API — это сервис, который принимает запросы в том же виде, в каком их принимает OpenAI, и отвечает в том же формате. Совместимость означает конкретные вещи: путь /v1/chat/completions, авторизация через Authorization: Bearer, тело с полями model и messages, ответ с массивом choices и объектом usage, потоковый режим через server-sent events.
Практический смысл: любая библиотека, написанная под OpenAI, работает с таким сервисом без изменений в логике. Меняются два значения — адрес и ключ.
Зачем это нужно
- Один интерфейс к моделям разных разработчиков — не нужно писать по клиенту на каждого.
- Инструменты, у которых есть поле «base URL», подключаются без правки кода.
- Смена модели — это смена строки в запросе, а не переписывание интеграции.
- Существующие SDK, обёртки и фреймворки продолжают работать.
Примеры кода
from openai import OpenAI client = OpenAI( base_url="https://api.tokenator.top/v1", api_key="sk-your-tokenator-key", ) resp = client.chat.completions.create( model="gpt-5.5", messages=[{"role": "user", "content": "Hello"}], ) print(resp.choices[0].message.content)
import OpenAI from "openai"; const client = new OpenAI({ baseURL: "https://api.tokenator.top/v1", apiKey: "sk-your-tokenator-key", }); const resp = await client.chat.completions.create({ model: "gpt-5.5", messages: [{ role: "user", content: "Hello" }], }); console.log(resp.choices[0].message.content);
Обратите внимание: в base_url входит суффикс /v1, а метод SDK добавляет к нему /chat/completions сам.
Что поддерживает Tokenator
| Метод | Путь | Назначение |
|---|---|---|
| POST | /v1/chat/completions | Основной чат-эндпоинт формата OpenAI. Поддерживает streaming, tools и мультимодальный вход. |
| POST | /v1/responses | Формат Responses API. Поддерживает продолжение диалога по previous_response_id. |
| POST | /v1/messages | Формат Anthropic Messages. Доступен также по префиксу /anthropic/v1/messages. |
| POST | /v1/messages/count_tokens | Подсчёт токенов для запроса в формате Anthropic. |
| POST | /v1/embeddings | Векторные представления текста. |
| POST | /v1/images/generations | Генерация изображений. |
| POST | /v1/images/edits | Редактирование и апскейл изображений. Принимает multipart и JSON с base64. |
| POST | /v1/audio/speech | Синтез речи. |
| POST | /v1/audio/transcriptions | Распознавание речи. |
| POST | /v1/audio/translations | Распознавание с переводом на английский. |
| GET | /v1/models | Список моделей, доступных конкретному ключу. |
| GET | /v1/tokens | Остаток лимита ключа и израсходованные токены. |
Помимо OpenAI-формата доступен Anthropic-совместимый вход. Это удобно для инструментов, изначально написанных под Claude: им не нужен слой совместимости, а модель при этом можно выбрать любую из каталога.
Границы совместимости
Совместимость формата не означает, что все модели умеют одно и то же. Изображения на входе, инструменты и reasoning зависят от конкретной модели и апстрима, а не от формата запроса. Что поддерживает конкретная модель — смотрите на её странице в каталоге.
Ещё одно отличие от прямого доступа к OpenAI: клиентские серверные инструменты веб-поиска и веб-фетча из запроса удаляются, а тексты ошибок апстрима заменяются общим сообщением.
Частые вопросы
Обязательно ли использовать официальный SDK OpenAI?
Нет. Подойдёт любой HTTP-клиент: важен формат запроса, а не библиотека.
Работает ли потоковый режим?
Да, через "stream": true и server-sent events — так же, как у OpenAI.
Совпадает ли поле usage с реальным расходом?
В usage — фактические токены апстрима. С лимита ключа списывается это значение, умноженное на множитель модели.