Подмена Base URL: любой OpenAI-клиент к BotHub

—

от автора

У большинства 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 полезна в трёх случаях.

  1. Первый — один ключ вместо нескольких подписок. Не нужно отдельно настраивать доступ к каждому провайдеру.

  2. Быстрое переключение моделей. Сегодня используете DeepSeek для дешёвого AI-кодинга, завтра Claude для сложного анализа кода, послезавтра GPT для текстовой задачи.

  3. Совместимость с существующими инструментами. Если ваш скрипт, агент или редактор уже говорит на 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/