Python + AI API

Нейросети в Python через один base_url

Штатный openai-пакет без самописных клиентов: base_url NormaHub, ключ из окружения, model ID из каталога. Синхронные и потоковые запросы, типизированные ошибки, оплата рублями.

Для кого: python-разработчики, дата-инженеры и авторы ботов, скриптов и агентов

Создать API key

Быстрый старт

От ключа до первого ответа

  1. 01

    Установите openai-пакет, создайте ключ и положите его в переменную окружения.

  2. 02

    Укажите base_url NormaHub и model ID из каталога в первом запросе.

  3. 03

    Включите streaming, timeout и лимиты ключей перед выходом в продакшен.

Рабочий шаблон

Скопируйте основу и замените модель

Используйте только идентификатор из актуального каталога. Ключ храните в переменной окружения.

Python · первый запрос
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["NORMAHUB_API_KEY"],
    base_url="https://api.normahub.cc/v1",
)

response = client.chat.completions.create(
    model="MODEL_ID",
    messages=[{"role": "user", "content": "Привет"}],
    max_tokens=512,
)
print(response.choices[0].message.content)
Официальный openai-пакет — ноль новых зависимостей и привычная сигнатура.
Ключ в переменной окружения, под dev и prod — отдельные ключи с лимитами.
Потоковые ответы и история трат в кабинете уже встроены в процесс.

Детали решения

Как это устроено

Зачем Python-проекту единый API

Клиент OpenAI SDK совместим с NormaHub полностью: меняются только base_url и ключ, остальной код — ваши привычные chat.completions. Модель переключается одним параметром, поэтому эксперименты с GPT, Claude и другими моделями каталога не требуют новых пакетов и переписывания вызовов. Прямые кабинеты провайдеров означают зарубежные карты, региональные блокировки и пятёрку разных биллингов; здесь один ключ покрывает текстовые, кодовые и мультимодальные модели, а endpoint доступен из России напрямую без VPN.

Сколько стоит запрос

Каждый вызов считается как входные токены плюс выходные по тарифу выбранной модели, поэтому главный рычаг экономии — длина контекста и ограничение max_tokens. Длинные истории диалогов пересылаются целиком и стоят как сумма всей переписки: режьте контекст до необходимого, кэшируйте системные инструкции и считайте стоимость полной операции, а не одного вызова. Точные ставки входа и выхода — в каталоге моделей, формула месячного бюджета — в гайде по стоимости токенов, а финальная сумма каждого запроса сохраняется в истории личного кабинета.

Нюансы и лимиты

Храните ключ в переменных окружения процесса, для локальной разработки — файл .env в .gitignore через python-dotenv, и никогда не коммитьте секреты в репозиторий. Streaming поддерживается не каждой моделью и не каждым endpoint — сверяйтесь с каталогом перед включением. Ошибки делите на постоянные, которые повтором не лечатся, и временные вроде 429 и 5xx, которые повторяются с задержкой и лимитом попыток. Каждому запросу задавайте timeout и сохраняйте request ID: по нему поддержка найдёт операцию без вашего ключа и промпта.

Оплата и контроль расходов

Запросы оплачиваются с предварительно пополненного баланса по актуальным ставкам выбранной модели. Минимум и комиссия показываются перед оплатой в кабинете; лимит расходов задаётся для API-ключа.

Ограничения доступности

Возможности зависят от модели и внешнего маршрута. При недоступности provider запрос может завершиться ошибкой; проверяйте каталог, статус и документацию перед production.

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

Какой base_url указывать в Python-клиенте?

https://api.normahub.cc/v1. Заголовок Authorization: Bearer с вашим ключом SDK выставляет сам из параметра api_key — вручную собирать HTTP-запросы не нужно.

Где хранить API-ключ?

В переменной окружения NORMAHUB_API_KEY, которую код читает через os.environ. Не вшивайте ключ в код, notebooks и публичные репозитории; под скрипты и агентов заводите отдельные ключи с лимитом расходов.

Как получать ответ по частям?

Передайте stream=True и читайте chunk.choices[0].delta.content в цикле — пользователь видит первые слова сразу. Учтите: потоковый режим поддерживают не все модели, проверяйте каталог.

Как обрабатывать ошибки запросов?

Постоянные 401, 402 и 403 чините по причине — ключ, баланс, доступ модели; временные 429 и 5xx повторяйте с задержкой и пределом попыток. Полная таблица кодов и retry-политик — в гайде по ошибкам API.