# Как подключить OpenAI SDK к LLMTOKENAPI за 10 минут

Пошагово подключаем OpenAI SDK к LLMTOKENAPI: меняем base URL, выбираем модель, защищаем ключ и проверяем Responses API на сервере.

Канонический URL: https://llmtokenapi.ru/blog/kak-podklyuchit-openai-sdk-k-llmtokenapi
Опубликовано: 2026-08-31T15:17:43.301Z
Автор: Команда LLMTOKENAPI

Чтобы подключить OpenAI SDK к LLMTOKENAPI, достаточно оставить привычный клиент, заменить `baseURL` на `https://api.llmtokenapi.ru/v1`, передать ключ LLMTOKENAPI и выбрать активный публичный ID модели. Такой подход подходит для серверных приложений, которые уже используют Responses API или Chat Completions и хотят работать через единый рублёвый баланс.

## Когда совместимый SDK действительно упрощает интеграцию

OpenAI-совместимый протокол полезен не потому, что все модели становятся одинаковыми. Его преимущество — в стабильной форме вызова: авторизация через Bearer-токен, знакомые методы клиента, потоковая выдача и единый способ обработки ошибок. Приложению не нужно создавать отдельный HTTP-клиент для каждой модели.

Официальный JavaScript-клиент OpenAI поддерживает альтернативный адрес API через параметр `baseURL` и переменную `OPENAI_BASE_URL`; это зафиксировано в [документации конфигурации openai-node](https://github.com/openai/openai-node/blob/main/docs/configuration.md). LLMTOKENAPI использует эту возможность без изменения исходного кода SDK.

Совместимость протокола не означает идентичность возможностей. Перед переносом проверьте нужную модель, streaming, tool calling, формат структурированного ответа и ограничения контекста. Текущий список доступных моделей возвращает [`GET /v1/models`](https://api.llmtokenapi.ru/v1/models), поэтому ID лучше получать из API, а не копировать из старой статьи или чужого примера.

## Настройте ключ только на сервере

Создайте отдельный API-ключ в кабинете и выдайте ему минимально необходимый scope `llm:read`. Сохраните секрет в переменной окружения, менеджере секретов или защищённой конфигурации среды выполнения. Не добавляйте ключ в Git и не вставляйте его в клиентский JavaScript.

Официальная документация SDK отдельно предупреждает, что ключ в браузерном коде можно извлечь, поэтому браузерный режим клиента по умолчанию отключён. Сервер приложения должен принимать запрос пользователя, проверять его права и уже затем обращаться к LLM API.

Для проекта удобно завести две независимые переменные:

```text
LLMTOKENAPI_API_KEY=секрет_из_кабинета
LLMTOKENAPI_MODEL=активный_public_id
```

Так модель можно сменить без редактирования бизнес-логики, а ключ — перевыпустить без нового релиза приложения.

## Создайте клиент с новым base URL

Минимальный пример для Node.js или Bun выглядит так:

```ts
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.LLMTOKENAPI_API_KEY,
  baseURL: "https://api.llmtokenapi.ru/v1",
  timeout: 30_000,
  maxRetries: 2,
});

const response = await client.responses.create({
  model: process.env.LLMTOKENAPI_MODEL!,
  input: "Сформулируй три проверяемых критерия качества API.",
});

console.log(response.output_text);
```

Здесь важны четыре детали. Адрес заканчивается на `/v1`; используется именно ключ LLMTOKENAPI; модель берётся из актуального каталога; запрос выполняется на доверенном сервере. Параметры `timeout` и `maxRetries` заданы явно, чтобы поведение не менялось незаметно после обновления зависимости.

Если приложение уже построено вокруг массива `messages`, можно оставить `client.chat.completions.create`. Для новой интеграции удобнее Responses API, особенно когда позже понадобятся инструменты или составной вход. Разница между протоколами разобрана в материале [«Responses API или Chat Completions»](/blog/responses-api-ili-chat-completions).

## Проверьте модель до первого продуктового запроса

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

Не привязывайте тест к названию, которое увидели в маркетинговом блоке. Публичный ID и тип модели должны приходить из API. В [документации LLMTOKENAPI](/docs) также указаны поддерживаемые endpoints и scopes, а [каталог моделей](/models) помогает выбрать кандидатов по назначению.

Полезный smoke-test должен отвечать на конкретные вопросы:

- авторизация проходит и ключ имеет нужный scope;
- выбранный ID присутствует в текущем каталоге;
- ответ разбирается без ручного поиска поля в JSON;
- streaming корректно завершается;
- приложение сохраняет `requestId` при ошибке;
- таймаут не превышает допустимое время пользовательской операции.

## Обрабатывайте ошибки по причине, а не одним повтором

Сетевой сбой, неверный ключ, отсутствие scope, исчерпанный баланс и временное ограничение — разные ситуации. Повтор имеет смысл при обрыве соединения, временной серверной ошибке или `429`, но не исправит `401`, `403` или неверный model ID.

OpenAI SDK умеет настраивать таймаут и число повторов, а его ошибки содержат HTTP-статус и request ID. Сохраняйте эти данные вместе с внутренним идентификатором операции, но не записывайте секретный ключ и полный пользовательский промпт без отдельного правового и продуктового основания.

Для операций с внешним эффектом не полагайтесь на автоматический повтор вслепую. [RFC 9110](https://datatracker.ietf.org/doc/html/rfc9110#section-9.2.2) объясняет, почему повтор безопасен только при известных идемпотентных семантиках. У обычной генерации текста повтор создаёт ещё один вызов и расход, поэтому ограничьте количество попыток и считайте стоимость всей пользовательской операции.

## Отделите совместимость от качества модели

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

Хорошая интеграция хранит модель в конфигурации сценария: например, отдельно для классификации, сложного анализа и коротких ответов. Тогда переход между моделями остаётся управляемым, а OpenAI SDK выполняет роль стабильного транспортного слоя.

Итоговая схема проста: серверный ключ, актуальный model ID, изменённый `baseURL`, короткий smoke-test и явная политика ошибок. После этого существующее приложение продолжает работать знакомым клиентом, а выбор модели и бюджет можно менять без переписывания всего API-слоя.
