Интеграции

AI-модели в JavaScript и TypeScript через AI Gateway — SDK OpenAI

openai

AI Gateway полностью совместим с официальным JavaScript-SDK OpenAI: меняются только baseURL и ключ, весь остальной код — как в документации OpenAI. Один клиент даёт доступ ко всем моделям каталога — Claude, GPT, Gemini, DeepSeek — сменой параметра model. Пакет работает и в Node.js, и в Deno, и в Bun, а типы TypeScript идут из коробки.

Установка

npm install openai

Первый запрос

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://ai-gatewey.ru/v1",
  apiKey: process.env.OPENAI_API_KEY, // sk-aigate-ваш_ключ
});

const resp = await client.chat.completions.create({
  model: "deepseek/deepseek-chat",
  messages: [{ role: "user", content: "Привет!" }],
});

console.log(resp.choices[0].message.content);
Ключ храните в переменной окружения (OPENAI_API_KEY подхватывается SDK автоматически), а не в коде — тогда apiKey можно не передавать вовсе. В браузере ключ не размещайте: SDK кинет ошибку без явного разрешения, потому что клиентский код видят все.

Стриминг

Ответ частями через Server-Sent Events — параметр stream: true превращает вызов в асинхронный итератор, который перебирают через for await:

const stream = await client.chat.completions.create({
  model: "deepseek/deepseek-chat",
  messages: [{ role: "user", content: "Расскажи о токенах" }],
  stream: true,
});

for await (const chunk of stream) {
  const delta = chunk.choices[0]?.delta?.content;
  if (delta) process.stdout.write(delta);
}

Function calling

Вызов инструментов работает прозрачно — выбирайте модель с поддержкой function calling (бейдж «инструменты» в каталоге). Модель возвращает tool_calls, которые нужно исполнить и отправить результат обратно:

const tools = [
  {
    type: "function" as const,
    function: {
      name: "get_weather",
      description: "Погода в городе",
      parameters: {
        type: "object",
        properties: { city: { type: "string" } },
        required: ["city"],
      },
    },
  },
];

const resp = await client.chat.completions.create({
  model: "anthropic/claude-sonnet-5",
  messages: [{ role: "user", content: "Какая погода в Москве?" }],
  tools,
});

console.log(resp.choices[0].message.tool_calls);

Обработка ошибок

  • 401 — неверный или отозванный ключ: проверьте значение и что ключ активен в кабинете.
  • 403 — модель сверх тарифа при пустом балансе: пополните баланс или выберите модель тарифа.
  • 429 — исчерпана квота или RPM-лимит ключа: дождитесь окна, поднимите лимит или тариф.
  • 5xx — сбой апстрима: шлюз сам ретраит и переключает провайдера, но свой retry с экспоненциальной паузой в проде не помешает.
import OpenAI from "openai";

try {
  const resp = await client.chat.completions.create({
    model: "deepseek/deepseek-chat",
    messages: [{ role: "user", content: "Привет!" }],
  });
} catch (err) {
  if (err instanceof OpenAI.RateLimitError) {
    // квота/RPM: подождать и повторить
  } else if (err instanceof OpenAI.APIError) {
    console.error(err.status, err.message);
  } else {
    throw err;
  }
}

Какую модель выбрать

МодельВвод, ₽/1МВывод, ₽/1МКонтекст
DeepSeek: DeepSeek V331125128K
Anthropic: Claude Sonnet 53141 5681M
OpenAI: GPT-5.4 Mini118705400K
Актуальные цены каталога AI Gateway за 1 млн токенов. Все модели →

Частые вопросы

Работает ли SDK в браузере или только на сервере?

SDK предназначен для сервера (Node.js, Deno, Bun): ключ не должен попадать в клиентский бандл. Для браузерных приложений проксируйте запросы через свой бэкенд.

Поддерживаются ли Vercel AI SDK и LangChain.js?

Да — оба принимают кастомный baseURL и ключ AI Gateway. Для LangChain готовая инструкция: LangChain.

Есть ли типы для ответов и стриминга?

Да, пакет openai написан на TypeScript и поставляет полные типы — автодополнение работает для параметров запроса, чанков стрима и tool_calls.

Node.js-приложение с AI — за пять минут

Получить ключ