AI-модели в Python через AI Gateway — официальный SDK OpenAI
AI Gateway полностью совместим с официальным Python-SDK OpenAI: меняются только base_url и ключ, весь остальной код — как в документации OpenAI. Один клиент даёт доступ ко всем моделям каталога — Claude, GPT, Gemini, DeepSeek — сменой параметра model.
Установка
pip install openaiПервый запрос
from openai import OpenAI
client = OpenAI(
base_url="https://ai-gatewey.ru/v1",
api_key="sk-aigate-ваш_ключ",
)
resp = client.chat.completions.create(
model="deepseek/deepseek-chat",
messages=[{"role": "user", "content": "Привет!"}],
)
print(resp.choices[0].message.content)OPENAI_API_KEY подхватывается SDK автоматически), а не в коде — тогда api_key можно не передавать вовсе.Стриминг
Ответ частями через Server-Sent Events — параметр stream=True, как в оригинальном API:
stream = client.chat.completions.create(
model="deepseek/deepseek-chat",
messages=[{"role": "user", "content": "Расскажи о токенах"}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)Function calling
Вызов инструментов работает прозрачно — выбирайте модель с поддержкой function calling (бейдж «инструменты» в каталоге):
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Погода в городе",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
},
}]
resp = client.chat.completions.create(
model="anthropic/claude-sonnet-5",
messages=[{"role": "user", "content": "Какая погода в Москве?"}],
tools=tools,
)
print(resp.choices[0].message.tool_calls)Обработка ошибок
401— неверный или отозванный ключ: проверьте значение и что ключ активен в кабинете.403— модель сверх тарифа при пустом балансе: пополните баланс или выберите модель тарифа.429— исчерпана квота или RPM-лимит ключа: дождитесь окна, поднимите лимит или тариф.5xx— сбой апстрима: шлюз сам ретраит и переключает провайдера, но свой retry с экспоненциальной паузой в проде не помешает.
from openai import APIStatusError, RateLimitError
try:
resp = client.chat.completions.create(
model="deepseek/deepseek-chat",
messages=[{"role": "user", "content": "Привет!"}],
)
except RateLimitError:
... # квота/RPM: подождать и повторить
except APIStatusError as e:
print(e.status_code, e.message)Какую модель выбрать
| Модель | Ввод, ₽/1М | Вывод, ₽/1М | Контекст |
|---|---|---|---|
| DeepSeek: DeepSeek V3 | 31 | 125 | 128K |
| Anthropic: Claude Sonnet 5 | 314 | 1 568 | 1M |
| OpenAI: GPT-5.4 Mini | 118 | 705 | 400K |
Частые вопросы
Работают ли LangChain и LlamaIndex?
Да — оба используют этот же SDK под капотом. Готовые инструкции: LangChain и LlamaIndex.
Есть ли асинхронный клиент?
Да, AsyncOpenAI с теми же параметрами base_url и api_key — весь код идентичен, но с await.
Как получить список моделей программно?
client.models.list() вернёт модели, доступные вашему ключу, с актуальными кодами.
Python-приложение с AI — за пять минут
Получить ключ