OpenAI SDK: что это и почему с ним работают не только модели GPT
OpenAI SDK — обычная библиотека-обёртка над HTTP API. Поэтому её можно направить на другой адрес и работать с Claude, Gemini или DeepSeek, не меняя код. Показываем как и где границы.
5 мин · · разработка · API-ключи
OpenAI SDK — это официальная библиотека, которая упрощает обращение к API OpenAI из кода. Вместо ручной сборки HTTP-запросов вы вызываете функции, а библиотека формирует запрос, подставляет ключ, разбирает ответ и повторяет запрос при временных сбоях. Ниже разберём, что такое OpenAI SDK, на каких языках он есть и почему через него можно работать не только с GPT, но и с Claude, Gemini и DeepSeek, изменив один параметр.
Сведения о библиотеках основаны на их официальных README на GitHub (openai-python и openai-node) и руководствах OpenAI на момент проверки: требования к версиям языков там меняются, сверяйте их при установке.
Что делает SDK
Под капотом любой запрос к API — это HTTP: адрес, заголовок авторизации и тело JSON. SDK берёт на себя рутину:
- подставляет заголовок
Authorization: Bearer ...; - собирает путь, например
/chat/completions, из базового адреса; - превращает JSON-ответ в объекты с подсказками типов;
- разбирает потоковые ответы (SSE);
- повторяет запросы при временных ошибках и выбрасывает типизированные исключения.
Важно понимать: SDK ничего не знает о моделях. Он просто отправляет запрос на адрес, который вы ему задали, поэтому его называют «OpenAI SDK», но на деле это клиент протокола «OpenAI-совместимый API».
На каких языках он есть
У OpenAI есть официальные библиотеки для Python (по README, нужен Python 3.10 или новее), TypeScript и JavaScript (Node.js 22 и 24 LTS, минимальная — 22; также заявлены Deno и Bun), а в руководствах OpenAI приведены примеры для Go, Java, C# и Ruby. Установка в Python и Node.js:
pip install openai
npm install openaiДля языков без официальной библиотеки достаточно обычного HTTP-клиента: формат запроса одинаков, нужно лишь собрать JSON и передать заголовок авторизации.
Как с ним работают не только GPT-модели
Клиент принимает необязательный параметр base_url (в Node.js — baseURL). Если его не задать, запросы идут на адрес OpenAI. Если задать адрес шлюза, они идут туда. Формат запроса остаётся тем же, меняется только модель и ключ.
from openai import OpenAI
client = OpenAI(
base_url="https://api.zukko.pro/v1",
api_key="fetch_ваш_ключ",
)
for model in ["claude-sonnet-5-5", "gpt-6.1-sol", "deepseek-v4.1-flash"]:
r = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": "Объясни, что такое токен, одним предложением"}],
max_tokens=200,
)
print(model, "->", r.choices[0].message.content, "| токенов:", r.usage.total_tokens)Тот же код на Node.js:
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.zukko.pro/v1",
apiKey: process.env.ZUKKO_API_KEY,
});
const r = await client.chat.completions.create({
model: "claude-sonnet-5-5",
messages: [{ role: "user", content: "Привет" }],
});
console.log(r.choices[0].message.content);Можно обойтись и без правок кода: библиотеки читают переменные окружения OPENAI_BASE_URL и OPENAI_API_KEY. Тогда OpenAI() без аргументов уже смотрит на шлюз.
export OPENAI_BASE_URL="https://api.zukko.pro/v1"
export OPENAI_API_KEY="fetch_ваш_ключ"Адрес для OpenAI-формата всегда заканчивается на /v1, это одно из самых частых мест ошибок; разбор есть в статье base URL с /v1 или без. Подробнее про сам стандарт — в статье OpenAI compatible API.
Где у этого подхода границы
Совместимость касается формы запросов, но не всего, что умеет платформа OpenAI. Что нужно проверить заранее:
- Какие эндпоинты есть у шлюза. У Zukko это
POST /v1/chat/completions,POST /v1/responsesиGET /v1/models. Методы SDK для файлов, пакетной обработки или эмбеддингов будут обращаться к адресам, которых в документации шлюза нет. - Какие параметры принимает конкретная модель. Форма одинакова, но поддержка отдельных параметров (например,
temperatureили вызова инструментов) зависит от модели: если запрос отклонён, проверьте текст ошибки и уберите лишний параметр. - Кэш для Claude. В OpenAI-формате шлюз для Claude не видит, сколько входа пришло из кэша, и весь вход идёт по цене входа. Скидку за кэш даёт Anthropic-формат (
/v1/messages), а для него используется официальный Anthropic SDK с адресомhttps://api.zukko.proбез/v1. У GPT-моделей кэш виден в обоих форматах. Подробнее в документации по лимитам и кэшу. - Потоковые ответы. Последний фрагмент потока содержит
usageи пустой массивchoices, поэтому передchunk.choices[0]проверяйтеif chunk.choices:.
Обработка ошибок
SDK превращает HTTP-ошибки в исключения. В Python основные классы лежат в пространстве имён openai:
import openai
try:
r = client.chat.completions.create(
model="gpt-6.1-sol",
messages=[{"role": "user", "content": "Привет"}],
)
except openai.AuthenticationError:
print("401: проверьте ключ")
except openai.RateLimitError:
print("429: лимит ключа или ограничение провайдера, повторите позже")
except openai.APIStatusError as e:
print("Ошибка API:", e.status_code)
except openai.APIConnectionError:
print("Нет соединения с сервером")Коды шлюза: 401 неверный ключ, 402 не хватает баланса, 403 model_not_allowed_for_key, 404 model_not_found, 413 слишком большой запрос, 429 лимит ключа или ограничение провайдера, 503 провайдер недоступен или модель выключена. Код 402 попадёт в общий APIStatusError с полем status_code. У библиотеки есть и собственные автоматические повторы (параметр max_retries): подберите их число под вашу задачу.
Сколько стоит вызов
Возьмём запрос на 1000 токенов входа и 500 токенов выхода. Формула: вход × цена входа + выход × цена выхода, цены на 18 октября 2026.
| Модель | Расчёт | Итого |
|---|---|---|
claude-sonnet-5-5 (0,4 / 2) | 1000 × 0,4 / 1M + 500 × 2 / 1M = 0,0004 + 0,001 | $0,0014 |
gpt-6.1-sol (0,27 / 1,32) | 0,00027 + 0,00066 | $0,00093 |
deepseek-v4.1-flash (0,013 / 0,038) | 0,000013 + 0,000019 | $0,000032 |
Какая из моделей подходит вашей задаче, решают проверка и ваши данные, а не цена. Актуальный список и цены: GET https://api.zukko.pro/v1/models или страница «Модели» в кабинете.
Более полные примеры на Python собраны в документации по Python.
Частые вопросы
OpenAI SDK работает только с OpenAI?
Нет. Это клиент OpenAI-совместимого протокола. Если сервер поддерживает тот же формат запросов, библиотеку можно направить на него через base_url.
Нужно ли платить за сам SDK?
Нет, библиотека бесплатна и открыта. Платить нужно за токены у того, чей API вы вызываете.
Что выбрать для Claude: OpenAI SDK или Anthropic SDK?
Если нужна скидка за кэш, используйте Anthropic SDK и Anthropic-формат. Если важнее единый код для всех моделей, подойдёт OpenAI SDK, но для Claude весь вход пойдёт по цене входа.
Как проверить, что подключение работает?
Вызовите client.models.list() или GET /v1/models, затем отправьте короткий запрос. Ключ создаётся в кабинете, доступ из России идёт через шлюз, оплата СБП, картой MasterCard или криптой.
zukko
Платите в 25×
меньше
за Claude Code & ChatGPT
Один ключ fetch_* и base URL api.zukko.pro — в Cursor, Claude Code, Codex и любом SDK.
Похожие статьи
- Свой прокси к нейросети на Node.js: не показывать API-ключ во фронтендеНебольшой сервер на Express между вашим фронтендом и API нейросети: ключ остаётся на сервере, а модели, длина запроса и частота ограничены.
- DeepSeek API на Python: запросы, стриминг, JSON и обработка ошибокГотовый код для DeepSeek V4.1 Flash и V4 Pro на OpenAI SDK: запрос, стриминг, разбор JSON и аккуратная обработка ошибок.
- Gemini API на Python: запросы через OpenAI SDK и OpenAI-форматРабочий пример Gemini API на Python без отдельной библиотеки: меняем base_url в OpenAI SDK, добавляем стриминг и JSON и сравниваем с google-genai.
- Anthropic SDK для Python: base_url, ключ и первый запрос через шлюзОфициальный пакет anthropic для Python нужно только направить на другой адрес. Разбираем base_url, ключ, стриминг, подсчёт токенов, кэш и ошибки.