DEV Community

Promptra Team for Promptra

Posted on

Миграция с OpenAI API на Promptra на Python: пошаговая инструкция за 10 минут

Пошаговая схема миграции openai sdk на промтра за десять минут: два кодовых блока — до и после правки api_key и base_url, стрелка-таймер с делениями по минутам, иконки Claude, Gemini, DeepSeek и GPT, плоский векторный стиль

Если у вас на Python уже работает интеграция с OpenAI API, миграция на Promptra — это правка двух строк: api_key и base_url. Через 10 минут вы получаете тот же openai.OpenAI клиент, но с доступом к Claude Opus 4.7, GPT-5.5, Gemini 3.1 Pro, DeepSeek V4 Pro и ещё 30+ моделей за рубли по курсу ЦБ, с оплатой на юр.лицо российское юр.лицо и полным пакетом закрывающих документов через ЭДО. Зарубежная карта, VPN и иностранный аккаунт не нужны — это легальный B2B-сервис в России.

В этой инструкции — пошаговый план миграции на конкретном Python-коде, чек-лист до и после, разбор типовых ошибок (старые SDK, захардкоженные поля ответа, разница между моделями) и финальная проверка через usage, чтобы убедиться, что стоимость запроса считается корректно. Все числа — на 2026-05-31.

TL;DR — миграция за 10 минут

Что меняется в коде:

# Было — OpenAI напрямую
client = OpenAI(api_key="sk-openai-...")

# Стало — через Promptra
client = OpenAI(
    api_key="sk-promptra-...",
    base_url="https://api.promptra.ru/v1",
)
Enter fullscreen mode Exit fullscreen mode

Что меняется в окружении: получаете ключ Promptra в дашборде, кладёте его в .env, пополняете баланс на юр.лицо по счёту. Что НЕ меняется: пакет openai остаётся, импорты, методы, формат сообщений, tools, stream, response_format. Всё совместимо.

Шаг 1. Получаем ключ и пополняем баланс

Регистрация в Promptra — почта плюс номер телефона, без обязательной привязки карты. Сразу после подтверждения вы попадаете в дашборд, где видны три блока: ключи, баланс и каталог моделей. На каждом ключе можно выставить лимит расхода в рублях и список разрешённых моделей — это полезно, когда команда большая, и вы хотите изолировать staging от продакшена.

Пополнение баланса — это обычный счёт на оплату от юр.лица. Заполняете реквизиты компании (ИНН, КПП, название), получаете счёт PDF, оплачиваете рублёвой платёжкой со своего расчётного счёта. Деньги падают на баланс в течение нескольких часов в рабочее время. По факту оказания услуг формируется акт, счёт-фактура и УПД — отправляются через ЭДО (Диадок, СБИС, Контур). Сервисная комиссия 5% берётся только при пополнении, на токены наценки нет — это принципиальное отличие от реселлеров с маржой 30–300% поверх каждого запроса.

Схема пополнения баланса юр.лицом: дашборд с балансом в рублях, счёт PDF, банковская платёжка, ЭДО Диадок-СБИС-Контур, закрывающие документы — акт, счёт-фактура, УПД; чистая инфографика без логотипов

Минимальное пополнение — 1000 ₽, и этого реально хватает на десятки тысяч запросов на дешёвых моделях вроде DeepSeek V4 Pro (30/60 ₽ за 1M) или на сотни сложных вызовов на флагманах. Для пилота 3000–5000 ₽ — достаточно, чтобы прогнать все ваши промты, замерить стоимость одного полезного результата и принять решение о масштабировании.

Шаг 2. Готовим окружение Python

Если у вас уже стоит пакет openai свежей версии — ничего ставить не надо. Если нет:

pip install --upgrade openai>=1.50.0 python-dotenv
Enter fullscreen mode Exit fullscreen mode

Свежий openai нужен, потому что base_url нормально поддерживается с 1.x. Старые версии (например, openai==0.28) использовали глобальные настройки и другой стиль вызова, и они не работают через Promptra корректно. Если у вас старый код — сначала мигрируйте с openai 0.28 на openai 1.x по официальному migration guide OpenAI, и только потом меняйте base_url. Это две разные миграции, лучше не смешивать.

.env файл — стандартный паттерн:

PROMPTRA_API_KEY=sk-promptra-xxxxxxxxxxxxxxxxxxxxxxxx
PROMPTRA_BASE_URL=https://api.promptra.ru/v1
Enter fullscreen mode Exit fullscreen mode

Никогда не коммитьте .env в репозиторий — добавьте его в .gitignore и распространяйте через защищённый канал (1Password, Vaultwarden, секреты CI). Для прод-сервиса используйте секрет-менеджер своего облака — Yandex Lockbox, AWS Secrets Manager и так далее. Подробнее про правильную работу с ключами — в гайде «ChatGPT и Claude API в России: безопасное подключение».

Шаг 3. Меняем код

Берём типичный пример — функцию вызова чата. Было на OpenAI:

import os
from openai import OpenAI
from dotenv import load_dotenv

load_dotenv

client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])

def chat(prompt: str, model: str = "gpt-5-5") -> str:
    response = client.chat.completions.create(
        model=model,
        messages=[
            {"role": "system", "content": "Ты — полезный ассистент."},
            {"role": "user", "content": prompt},
        ],
    )
    return response.choices[0].message.content
Enter fullscreen mode Exit fullscreen mode

Стало на Promptra:

import os
from openai import OpenAI
from dotenv import load_dotenv

load_dotenv

client = OpenAI(
    api_key=os.environ["PROMPTRA_API_KEY"],
    base_url=os.environ["PROMPTRA_BASE_URL"],
)

def chat(prompt: str, model: str = "claude-sonnet-4-6") -> str:
    response = client.chat.completions.create(
        model=model,
        messages=[
            {"role": "system", "content": "Ты — полезный ассистент."},
            {"role": "user", "content": prompt},
        ],
    )
    return response.choices[0].message.content
Enter fullscreen mode Exit fullscreen mode

Изменений ровно три:

  1. В конструктор клиента добавлен base_url.
  2. Имя переменной окружения сменилось с OPENAI_API_KEY на PROMPTRA_API_KEY (по желанию — можно оставить старое имя, главное, чтобы значение было ключом Promptra).
  3. Дефолтная модель сменилась на claude-sonnet-4-6 — это самый универсальный дефолт по соотношению цена/качество. Если вам важна совместимость с прежним поведением — оставьте gpt-5-5, тогда вы фактически продолжите использовать модель того же класса.

Тело функции, формат сообщений, доступ к response.choices[0].message.content — без изменений. Этот код запускается ровно так же, как и до миграции.

Сравнение двух блоков кода — до и после миграции — со стрелочкой и пометками на изменённых строках: base_url, api_key из переменной окружения, новое имя модели; редакторская подача с подсветкой синтаксиса в кремовой и терракотовой палитре

Шаг 4. Прогон dry-run и проверка usage

После правки кода первый запуск — это короткий тестовый промт, на котором вы убеждаетесь, что всё работает и стоимость считается так, как вы ожидаете. Добавляем в код печать usage:

response = client.chat.completions.create(
    model="claude-sonnet-4-6",
    messages=[{"role": "user", "content": "Скажи 'тест пройден' одним предложением."}],
)

print("Ответ:", response.choices[0].message.content)
print("Токенов на вход:", response.usage.prompt_tokens)
print("Токенов на выход:", response.usage.completion_tokens)
print("Всего:", response.usage.total_tokens)
Enter fullscreen mode Exit fullscreen mode

Ожидаемый результат — короткий ответ модели и три числа: prompt_tokens, completion_tokens, total_tokens. Если поле usage пустое или вызов падает с ошибкой — смотрите раздел про типовые ошибки ниже.

Считаем стоимость одного запроса. Для Claude Sonnet 4.6 (210 ₽ за 1M input, 1070 ₽ за 1M output):

PRICES = {
    "claude-sonnet-4-6": {"in": 210, "out": 1070},   # руб. за 1M токенов
    "claude-opus-4-7":   {"in": 350, "out": 1790},
    "gpt-5-5":           {"in": 350, "out": 2150},
    "gpt-5-4":           {"in": 170, "out": 1070},
    "gemini-3-1-pro":    {"in": 140, "out": 860},
    "gemini-3-5-flash":  {"in": 100, "out": 640},
    "deepseek-v4-pro":   {"in": 30,  "out": 60},
    "qwen-3-6-plus":     {"in": 20,  "out": 130},
}

def cost_rub(usage, model: str) -> float:
    p = PRICES[model]
    return (usage.prompt_tokens * p["in"] + usage.completion_tokens * p["out"]) / 1_000_000

print(f"Стоимость запроса: {cost_rub(response.usage, 'claude-sonnet-4-6'):.4f}")
Enter fullscreen mode Exit fullscreen mode

На реальном продакшен-пайплайне эту функцию полезно вызывать после каждого запроса и логировать в Метрику или Prometheus — так вы видите фактический счёт в реальном времени и можете срабатывать алерты по аномалиям. Подробнее про правильный учёт расходов — в материале «Стоимость генерации текста через нейросеть».

Шаг 5. Маршрутизация между моделями

Главная выгода Promptra — у вас за одним endpoint лежат все основные модели рынка. Это значит, что вместо жёсткой привязки кода к одной модели вы можете маршрутизировать запросы по типу задачи:

def pick_model(task: str) -> str:
    return {
        "hard_code":     "claude-opus-4-7",   # сложный код, агенты — 350/1790 ₽
        "long_reason":   "claude-opus-4-7",   # многошаговое рассуждение
        "general_chat":  "claude-sonnet-4-6", # типовой чат — 210/1070 ₽
        "rag":           "claude-sonnet-4-6", # RAG с длинным контекстом
        "multimodal":    "gpt-5-5",           # картинки, multimodal — 350/2150 ₽
        "classify":      "gemini-3-5-flash",  # классификация — 100/640 ₽
        "mass_gen":      "deepseek-v4-pro",   # массовая генерация — 30/60 ₽
        "translate":     "qwen-3-6-plus",     # перевод — 20/130 ₽
    }.get(task, "claude-sonnet-4-6")          # дефолт — Sonnet, не Opus

def smart_chat(prompt: str, task: str) -> str:
    response = client.chat.completions.create(
        model=pick_model(task),
        messages=[{"role": "user", "content": prompt}],
    )
    return response.choices[0].message.content
Enter fullscreen mode Exit fullscreen mode

Дефолт здесь — claude-sonnet-4-6, а не Opus: переключаться на флагман нужно осознанно, под конкретный класс задач, а не «на всякий случай». Разбор того, как выбирать модель по соотношению цена/качество — в гайде «Лучшая нейросеть 2026».

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

Типовые ошибки и как их пофиксить

Ошибка 1: «openai.AuthenticationError: Invalid API key». Проверьте, что в base_url указан именно https://api.promptra.ru/v1, а не базовый URL OpenAI. Ключ Promptra на эндпоинте OpenAI выдаст 401 — это самая частая первичная ошибка.

Ошибка 2: «model_not_found». Имя модели должно быть из каталога Promptra: claude-opus-4-7, claude-sonnet-4-6, gpt-5-5, gpt-5-4, gemini-3-1-pro, gemini-3-5-flash, deepseek-v4-pro, qwen-3-6-plus. Если в коде осталось старое имя вроде gpt-4-turbo или gpt-4o — модели уже не существует, замените её на актуальную из таблицы цен.

Ошибка 3: захардкоженные специфичные поля ответа. Если у вас в коде есть прямые обращения вроде response.choices[0].logprobs.tokens или к internal-полям ответа OpenAI, которые не входят в стандартный совместимый протокол — они могут отсутствовать на Claude или Gemini. Это лечится прокидыванием параметров через extra_body или переписыванием участка на стандартные совместимые поля.

Ошибка 4: использование старого пакета openai==0.28. Этот пакет использует глобальные настройки (openai.api_key, openai.api_base) и старые методы (openai.ChatCompletion.create). Сначала мигрируйте на современный openai >= 1.x по официальному гайду миграции OpenAI, потом меняйте base_url. Старый стиль работает, но это переходный мостик, который надо снимать.

Ошибка 5: Timeout на длинных reasoning-вызовах. Если задаёте большой max_tokens или используете Opus 4.7 с длинным контекстом — клиент по умолчанию может закрыть соединение раньше, чем модель закончит. Поднимите timeout явно:

client = OpenAI(
    api_key=os.environ["PROMPTRA_API_KEY"],
    base_url=os.environ["PROMPTRA_BASE_URL"],
    timeout=300.0,   # 5 минут на длинные ответы
)
Enter fullscreen mode Exit fullscreen mode

Ошибка 6: VPN включён. Если у вас на разработческой машине постоянно работает VPN — выключите его на время теста. Promptra работает напрямую из России без VPN, и иногда VPN-маршрут добавляет задержку или ломает SSL-валидацию. Это легальный B2B-сервис, ничего «обходить» не нужно.

Шаг 6. Streaming, tools, structured outputs

После базовой миграции работают все продвинутые возможности OpenAI-совместимого протокола. Стриминг ответа:

stream = client.chat.completions.create(
    model="claude-sonnet-4-6",
    messages=[{"role": "user", "content": "Расскажи про шесть категорий бизнес-задач для LLM."}],
    stream=True,
)

for chunk in stream:
    delta = chunk.choices[0].delta.content
    if delta:
        print(delta, end="", flush=True)
Enter fullscreen mode Exit fullscreen mode

Tool calling (function calling) — работает на Claude и GPT через тот же интерфейс:

tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "Узнать погоду в городе",
        "parameters": {
            "type": "object",
            "properties": {"city": {"type": "string"}},
            "required": ["city"],
        },
    },
}]

response = client.chat.completions.create(
    model="claude-opus-4-7",
    messages=[{"role": "user", "content": "Какая погода в Москве?"}],
    tools=tools,
    tool_choice="auto",
)

for call in response.choices[0].message.tool_calls or []:
    print("Вызов инструмента:", call.function.name, call.function.arguments)
Enter fullscreen mode Exit fullscreen mode

Structured outputs через JSON schema:

response = client.chat.completions.create(
    model="gpt-5-5",
    messages=[{"role": "user", "content": "Извлеки имя и возраст из текста: 'Алексей, 32 года'."}],
    response_format={
        "type": "json_schema",
        "json_schema": {
            "name": "person",
            "schema": {
                "type": "object",
                "properties": {
                    "name": {"type": "string"},
                    "age": {"type": "integer"},
                },
                "required": ["name", "age"],
            },
        },
    },
)
Enter fullscreen mode Exit fullscreen mode

Все три фичи — это стандартный OpenAI-совместимый протокол, и Promptra прокидывает их в нижележащие модели. Подробности по моделям — на странице Claude API за рубли и в каталоге.

Три блока кода рядом: streaming с постепенной отдачей токенов, tool calling с вызовом get_weather, structured outputs с JSON schema person — единая стилистика, подписи на русском, без декоративных элементов

Чек-лист миграции

Перед тем как сказать «готово», пройдите по списку:

  1. Установлен openai >= 1.50.0, старого openai==0.28 в зависимостях нет.
  2. В коде клиента задан base_url="https://api.promptra.ru/v1".
  3. Ключ Promptra лежит в .env и не закоммичен в репозиторий.
  4. На тестовом промте usage.prompt_tokens и usage.completion_tokens возвращаются корректно.
  5. Стоимость одного запроса посчитана по таблице цен и логируется.
  6. Имена моделей в коде — актуальные из каталога Promptra.
  7. Если используется tool calling — проверено на Opus 4.7 или GPT-5.5 (не на DeepSeek).
  8. Timeout клиента поднят до 300 секунд для длинных reasoning-вызовов.
  9. Прогнаны 100–500 реальных запросов с замером средней стоимости.
  10. Дашборд показывает расход в реальном времени и совпадает с локальной агрегацией.

После этого можно выкатывать в продакшен. Подробнее про оплату и закрывающие документы для юрлица — в материале «Легально ли использовать OpenAI/Claude на юрлицо в РФ».

Оплата и закрывающие документы

Юрлицо-исполнитель — российское юр.лицо , резидент РФ. После пополнения баланса вы получаете полный пакет закрывающих документов через ЭДО:

  • Договор-оферта — публичный, на сайте Promptra.
  • Счёт на оплату — формируется в дашборде, после ввода реквизитов компании.
  • Акт оказанных услуг, счёт-фактура, УПД — по факту, ежемесячно.
  • ЭДО — Диадок, СБИС, Контур по запросу.

Это договор с российским контрагентом, валютный контроль для него не требуется. Расходы на API ложатся в учёт целиком. Подробнее про правовую сторону работы с зарубежными LLM на юрлицо — в официальной странице оплаты и в гайде про легальность.

Что дальше

Если коротко: миграция с OpenAI на Promptra на Python — это смена двух строк в коде и пополнение баланса на юр.лицо. Через 10 минут у вас тот же openai.OpenAI клиент, но с доступом к Claude Opus 4.7, GPT-5.5, Gemini 3.1 Pro и ещё 30+ моделей за рубли по курсу ЦБ, без наценки на токены, с закрывающими документами через ЭДО.

Полезные следующие шаги: разбор моделей по задаче — «Лучшая нейросеть 2026»; сравнение флагманов в кошельке — «Claude Opus 4.7 API за рубли»; подключение Claude Code и Cursor с тем же ключом — «Claude Code в России». А если нужно прикинуть стоимость на вашем трафике, выбрать модель под пайплайн или оформить договор на юр.лицо — напишите команде Promptra в Telegram. Технические вопросы там решаются за один разговор.

📚 Главный гайд по теме: Лучшая нейросеть 2026: какую LLM выбрать под задачу — связанные материалы и обзор всей категории.


Promptra — Russian LLM API aggregator. One OpenAI-compatible endpoint to all flagship models: OpenAI (GPT-5.5, GPT-5.4), Anthropic (Claude Opus 4.7, Sonnet 4.6), Google (Gemini 3.1 Pro, 3.5 Flash), DeepSeek V4 Pro, Qwen 3.6 Plus.

Provider prices 1-to-1 at CBR rate — no markup on tokens. Ruble billing per contract, full closing documents through EDI. No VPN — legal B2B service in Russia.

Try: promptra.ru · model catalog · docs

Top comments (0)