У большинства AI-инструментов есть один и тот же скрытый суперпауэр: они умеют работать не только с OpenAI напрямую, но и с любым OpenAI-совместимым API. На практике это значит: можно оставить тот же SDK, тот же формат запросов, те же messages, но заменить адрес API и ключ.
То есть вместо схемы:
клиент → api.openai.com → модель OpenAI
получается:
клиент → BotHub API → GPT / Claude / DeepSeek / Gemini / другие модели
В этой статье — базовый принцип, на который можно ссылаться из любых интеграций: Aider, Continue, Chatbox, Open WebUI, своих Python-скриптов, CLI-утилит и внутренних сервисов.
Что такое OpenAI-совместимый API
OpenAI API стал фактическим стандартом для работы с LLM: запрос отправляется на endpoint вроде /chat/completions, внутри лежит массив messages, а ответ возвращается в предсказуемом формате.
Минимальный запрос обычно содержит:
{ «model»: «model-id», «messages»: [ { «role»: «user», «content»: «Привет, объясни этот код» } ]}
Если сервис поддерживает этот формат, OpenAI-клиенту почти всё равно, куда именно отправлять запрос. Ему нужны три вещи:
Главное: в настройках клиента обычно указывают именно Base URL, без /chat/completions в конце. Endpoint клиент добавит сам.
Пример 1: curl
Начнём с самого честного варианта — обычный HTTP-запрос.
export BOTHUB_BASE_URL=»https://bothub.ru/api/v2/openai/v1″export BOTHUB_API_KEY=»ВАШ_BOTHUB_API_KEY»export BOTHUB_MODEL=»MODEL_ID_ИЗ_BOTHUB»
Запрос:
curl «$BOTHUB_BASE_URL/chat/completions» \ -H «Authorization: Bearer $BOTHUB_API_KEY» \ -H «Content-Type: application/json» \ -d ‘{ «model»: «‘»$BOTHUB_MODEL»‘», «messages»: [ { «role»: «system», «content»: «Ты лаконичный AI-ассистент для разработчика.» }, { «role»: «user», «content»: «Объясни разницу между git merge и git rebase в 5 пунктах.» }
],
«temperature»: 0.2 }’
Если ключ и id модели корректные, BotHub вернёт ответ в OpenAI-совместимом формате. Дальше его можно парсить так же, как ответ OpenAI API.
Пример 2: Python SDK OpenAI
Если в проекте уже используется пакет openai, переписывать клиент не нужно. Достаточно передать другой base_url.
Установка:
pip install openai
Код:
import osfrom openai import OpenAIclient = OpenAI( api_key=os.environ[«BOTHUB_API_KEY»], base_url=»https://bothub.ru/api/v2/openai/v1«,
)
response = client.chat.completions.create( model=os.environ.get(«BOTHUB_MODEL», «MODEL_ID_ИЗ_BOTHUB»), messages=[ { «role»: «system», «content»: «Ты senior-разработчик. Отвечай коротко и по делу.», }, { «role»: «user», «content»: «Напиши pytest-тесты для функции normalize_phone(phone: str).», },
],
temperature=0.1,
)
print(response.choices[0].message.content)
Всё, что изменилось по сравнению с прямым OpenAI API, — это base_url, ключ и модель.
Это удобно для внутренних инструментов: можно оставить существующую обвязку, но переключать модели через BotHub. Например, рутинный код отправлять в DeepSeek, сложный рефакторинг — в Claude, текстовые задачи — в GPT или Gemini.
Пример 3: любой клиент с настройкой Base URL
Многие приложения уже имеют режим OpenAI-compatible, Custom OpenAI endpoint, OpenAI API Base URL или похожее название.
Обычно настройки выглядят так:
Provider: OpenAI / Custom OpenAI-compatible
Base URL: https://bothub.ru/api/v2/openai/v1API Key: ВАШ_BOTHUB_API_KEY
Model: MODEL_ID_ИЗ_BOTHUB
Название поля может отличаться:
Например, для CLI-инструментов часто используются переменные окружения:
export OPENAI_API_BASE=»https://bothub.ru/api/v2/openai/v1″export OPENAI_API_KEY=»ВАШ_BOTHUB_API_KEY»
А дальше инструмент запускается как обычно. В некоторых клиентах модель нужно указывать с префиксом, например:
aider —model openai/MODEL_ID_ИЗ_BOTHUB
В других — просто передать id модели без префикса. Это зависит от конкретного клиента, но принцип один: меняем URL, ключ и модель.
На что обратить внимание
1. Не добавляйте /chat/completions в Base URL клиента
Правильно:
https://bothub.ru/api/v2/openai/v1
Неправильно для поля Base URL:
https://bothub.ru/api/v2/openai/v1/chat/completions
В curl мы добавляем /chat/completions руками, потому что сами собираем HTTP-запрос. В SDK и приложениях это обычно делает клиент.
2. Используйте ключ BotHub, а не OpenAI
После подмены Base URL запрос идёт не в OpenAI, а в BotHub. Поэтому нужен API-ключ BotHub.
3. Model ID лучше копировать из BotHub
Не стоит угадывать названия моделей. Один клиент может ждать claude-sonnet, другой — openai/claude-sonnet, а в BotHub у модели может быть свой точный id. Надёжнее открыть каталог моделей и скопировать актуальное имя.
4. Не каждый клиент даёт менять Base URL
Если инструмент жёстко зашил api.openai.com и не позволяет указать custom endpoint, подмена не сработает. Но если есть поддержка OpenAI-compatible API — BotHub подключается без отдельной интеграции.
Зачем это делать
Подмена Base URL полезна в трёх случаях.
-
Первый — один ключ вместо нескольких подписок. Не нужно отдельно настраивать доступ к каждому провайдеру.
-
Быстрое переключение моделей. Сегодня используете DeepSeek для дешёвого AI-кодинга, завтра Claude для сложного анализа кода, послезавтра GPT для текстовой задачи.
-
Совместимость с существующими инструментами. Если ваш скрипт, агент или редактор уже говорит на OpenAI API, его не надо переписывать под новый сервис.
OpenAI-совместимый API — это простой контракт: одинаковый формат запроса, одинаковая логика авторизации, одинаковая структура ответа.
BotHub использует этот принцип как универсальный шлюз к разным моделям. Поэтому любой инструмент, который поддерживает OpenAI API и позволяет поменять Base URL, можно подключить к BotHub: curl, Python SDK, Aider, Continue, Chatbox, Open WebUI, внутренний бот или собственный backend.
Меняете URL, вставляете ключ BotHub, выбираете модель — и работаете с нужной нейросетью без новой интеграции под каждый сервис.
ссылка на оригинал статьи https://habr.com/ru/articles/1068882/