Замена API OpenAI: чек-лист миграции
Замена API OpenAI работает гладко, только если сначала проверить три вещи: какие эндпоинты использует ваш код, какие функции он применяет и как новая модель ведет себя на ваших промптах. Этот чек-лист охватывает все три пункта с командами, которые можно запустить уже сегодня.

Итоги
- Чат-завершения, ответы, потоковая передача, инструменты и JSON-режим работают со стандартным SDK OpenAI после изменения базового URL.
- Эндпоинты эмбеддингов, изображений, аудио и дообучения недоступны. Оставьте их у текущего провайдера.
- Модель другая, поэтому протестируйте промпты перед полным переключением. Оставьте флаг для возврата.
- Биллинг — предоплата за каждый токен: $0,15 за 1 млн входных токенов и $0,50 за 1 млн выходных токенов.
Шаг 1: инвентаризация вызовов вашего кода
Прежде чем что-то менять, перечислите функции OpenAI, которые вы действительно используете. Большинство проектов используют меньше, чем думают, и этот список определяет, будет ли замена задачей на пять минут или частичной. Запустите эти команды из корня проекта:
# New values you will point the project at:
export OPENAI_BASE_URL="https://api.alternativeapiopenai.com/v1"
export OPENAI_API_KEY="YOUR_API_KEY"
export MODEL="uncensored"
# What does the code call today?
grep -rnE "embeddings|images\.|audio\.|fine_tuning|moderations|assistants|batches" --include="*.py" --include="*.js" --include="*.ts" .
grep -rnE "model *[=:] *['\"]" --include="*.py" --include="*.js" --include="*.ts" .
Первый grep находит эндпоинты, которые не предлагает этот API. Второй выводит все жестко заданные имена моделей, которые вам нужно изменить. Поместите результаты в короткую таблицу с одной строкой на каждую функцию: используется, не используется и что с этим делать.
Шаг 2: сравнение с поддерживаемыми функциями
| Функция OpenAI | Здесь | Примечания |
|---|---|---|
| Завершение диалога | Да | POST /v1/chat/completions |
| API ответов | Да | POST /v1/responses |
| Список моделей | Да | GET /v1/models возвращает uncensored |
| Потоковая передача | Да | SSE, с данными об использовании в конце |
| Вызов функций | Да | tools, tool_choice, потоковые tool_calls, role: "tool" результаты |
| JSON-режим | Да | response_format: {"type":"json_object"} |
| Параметры сэмплирования | Да | temperature, top_p, stop, seed, штрафы |
| Векторные представления | Нет | Не предлагается |
| Генерация изображений, аудио, видео | Нет | Только текст |
| Дообучение | Нет | Не предлагается |
Всё, что не указано в поддерживаемых функциях этой таблицы, следует считать недоступным, пока вы не подтвердите это в документации. Это включает вывод с ограниченной схемой: JSON-режим заставляет модель возвращать корректный JSON, но не гарантирует вашу схему, поэтому оставьте код валидации. Ввод изображений в сообщение чата также не указан, поэтому рассчитывайте только на текстовые промпты.
Модель — это единственная модель с открытыми весами от независимого провайдера. Это не модель OpenAI и не официальный API какого-либо вендора, она не маршрутизирует запросы между вендорами. Ожидайте другой стиль, другие сильные стороны и другие режимы сбоев.
Шаг 3: внесение изменений
С официальным Python SDK меняются три значения:
from openai import OpenAI
client = OpenAI(
base_url="https://api.alternativeapiopenai.com/v1", # was the default OpenAI URL
api_key="YOUR_API_KEY", # was your old key
)
resp = client.chat.completions.create(
model="uncensored", # was your old model name
messages=[{"role": "user", "content": "Give me three names for a coffee shop."}],
)
print(resp.choices[0].message.content)
Лучше всего сохранить базовый URL, ключ и имя модели в конфигурации, чтобы одна сборка могла указывать на любого из этих провайдеров. Простой паттерн — три переменные окружения: LLM_BASE_URL, LLM_API_KEY и LLM_MODEL. Тогда откат означает изменение трех значений и перезапуск, а не выпуск нового релиза.
Если ваш код использует API ответов, применяются те же три значения. Для фреймворков вроде LangChain или LlamaIndex найдите OpenAI-совместимый коннектор и передайте тот же базовый URL и имя модели.
Шаг 4: тестирование перед продакшеном
Риск при любой замене модели — поведение, а не подключение. Протестируйте их в следующем порядке:
- Подключение. Один запрос через curl. Если он возвращает ответ, ключ и URL верны.
- Ваши реальные промпты. Повторите минимум двадцать производственных промптов и оцените вывод. Проверьте тон, длину и следование инструкциям.
- Вызовы инструментов. Запустите каждый из ваших инструментов и проверьте аргументы, которые генерирует модель. Убедитесь, что ваш цикл обрабатывает
tool_callsв потоковом ответе. - Вывод в формате JSON. Выполните сто вызовов в JSON-режиме и посчитайте, сколько из них не прошли парсер или схему.
- Длинные входы. Контекстное окно составляет 100 000 токенов для промпта плюс ответ. Протестируйте большой промпт один раз, чтобы узнать, сколько времени это занимает.
- Лимиты. Полный ключ позволяет 8 параллельных запросов и 300 в минуту. Проведите нагрузочное тестирование при вашей реальной пиковой нагрузке.
Количество токенов будет отличаться
Если ваш код оценивает количество токенов с помощью библиотеки токенизатора, созданной для другой модели, считайте результат приблизительным. Используйте объект usage в каждом ответе для выставления счетов и планирования бюджета, а при сокращении истории для размещения в 100 000-токенном контекстном окне оставляйте запас. Установка max_tokens здесь необязательна, но разумный лимит предотвратит неконтролируемый ответ, который потратит больше, чем вы планировали.
Как выглядят ошибки
При превышении лимита API возвращает HTTP 429 с кодом rate_limited (запросов в минуту) или concurrency (слишком много одновременно). Временная перегрузка также возвращает 429 с заголовком Retry-After: 5. Потоковый запрос удерживает слот параллельности до завершения потока, поэтому медленные клиенты потребляют ваш лимит. Отказанные или отклонённые запросы не тарифицируются.
Шаг 5: проверка стоимости
Цена составляет $0,15 за 1M входных токенов и $0,50 за 1M выходных токенов, оплачивается из предоплаченного баланса. Чтобы сравнить со счетом, используйте свое количество токенов из поля usage и примените формулу: cost = input_tokens x 0,15 / 1 000 000 + output_tokens x 0,50 / 1 000 000. Для других провайдеров проверьте их текущие тарифы и подставьте те же количества.
Пример расчёта: инструмент поддержки обрабатывает 30 000 запросов в месяц, каждый из которых содержит 1 200 входных и 250 выходных токенов. Входные данные составляют 36 млн токенов, что стоит $5,40. Выходные данные — 7,5 млн токенов, что стоит $3,75. Итоговая месячная стоимость — $9,15. Если та же нагрузка заполняет контекстное окно, то при 100 000 входных токенов каждый запрос стоит $0,015 только за входные данные, поэтому размер промпта — это то, на что нужно обратить внимание.
Страница тарифов перечисляет суммы пополнения. Они варьируются от $20 до $500, с +5% от $50, +10% от $100 и +15% от $200, оплата только криптовалютой (USDT на TRC20 или USDC на Base). Баланс не сгорает, подписки нет. Руководство по тарифам API для моделей без цензуры объясняет структуру затрат более подробно.
Шаг 6: разверните и сохраните возможность отката
Сначала направьте небольшую долю трафика на новый эндпоинт. Записывайте ID запроса из заголовка X-Request-Id, чтобы можно было отследить ошибочный ответ, и фиксируйте значение X-Balance-USD после вызовов, чтобы кредит не закончился незаметно. Уведомляйте, когда баланс упадёт ниже уровня расходов за несколько дней.
Когда тестовый трафик показывает хорошие результаты, увеличивайте его долю поэтапно и сохраняйте ключ старого провайдера действительным в течение недели. Для любого контента, связанного с взрослой тематикой, модель предназначена для законного использования взрослыми, а контент сексуального характера с участием несовершеннолетних всегда блокируется. Промпты не используются для обучения.
Новые аккаунты могут активировать $0,50 пробного баланса одним нажатием на странице API-ключ, срок действия — 7 дней, чего достаточно, чтобы пройти весь чек-лист на выборке вашего трафика.
Дополнительные руководства
Часто задаваемые вопросы
Будет ли работать мой существующий код на OpenAI SDK?
Для chat completions и ответов — да. Измените базовый URL, ключ и имя модели. Вызовы для эмбеддингов, изображений, аудио или дообучения не будут работать.
Качество ответов такое же, как у моделей OpenAI?
Нет, это другая модель с открытыми весами. Протестируйте свои собственные промпты, вместо того чтобы предполагать паритет в любом направлении.
Как откатиться, если что-то сломается?
Сохраните базовый URL, ключ и модель в конфигурации и оставьте ключ старого провайдера активным. Возврат к старому провайдеру тогда будет просто изменением конфигурации.
Поддерживает ли он вызов функций?
Да. Используйте инструменты и tool_choice, и возвращайте результаты в виде сообщений с ролью tool. Поддерживается потоковая передача tool_calls.
Генерация ключа требует только формы
Зарегистрируйтесь, скопируйте свой ключ и обновите базовый URL. Это вся необходимая конфигурация.