Загрузка...

Open WebUI: свой ChatGPT-клон с RouterAI через OpenAI-совместимое подключение

Open WebUI — это самостоятельно разворачиваемый веб-интерфейс для работы с языковыми моделями, по виду и удобству похожий на ChatGPT. Внутри: чаты с историей, каналы для командной работы, RAG по загруженным документам, веб-поиск, голосовой ввод, инструменты и плагины, а также мультипользовательский режим с ролями и группами. Open WebUI умеет подключаться к любому серверу с OpenAI-совместимым API, поэтому RouterAI подходит ему без доработок: один ключ и один Base URL открывают сотни моделей (Claude, GPT, DeepSeek, Gemini, GLM и другие), работа идёт из России без VPN, а оплата — в рублях.

В статье поднимем Open WebUI в Docker, подключим RouterAI через интерфейс и через переменные окружения, оставим в списке только нужные модели и разберём типичные ошибки.

Требования

  • Docker (или Python 3.11, если ставите через pip).
  • Аккаунт на RouterAI с положительным балансом.
  • API-ключ из раздела «Ключи API» — он начинается с sk-or-... и показывается один раз, сохраните его сразу.
  • Порт 3000 на машине свободен (иначе выберите другой в параметре -p).

Установка

Самый простой способ — готовый образ из официального репозитория open-webui/open-webui:

docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main

Данные (пользователи, чаты, загруженные документы) хранятся в томе open-webui, поэтому при обновлении образа они сохраняются. Флаг --add-host=host.docker.internal:host-gateway нужен, чтобы контейнер видел локальные серверы на хосте, например Ollama; для работы с RouterAI он не обязателен, но вреда от него нет.

Альтернатива без Docker (по README проекта, нужен Python 3.11):

pip install open-webui
open-webui serve

В этом случае интерфейс откроется на http://localhost:8080.

После запуска откройте http://localhost:3000 (первый старт может занять несколько минут). При первом входе Open WebUI покажет приветственный экран, после кнопки «Get started» предложит создать учётную запись: введите имя, почту и пароль. Эта учётная запись станет администратором — под ней вы будете настраивать подключения и управлять остальными пользователями.

Подключение к RouterAI

Подключение выполняется в настройках администратора. В актуальной версии это окно настроек: в боковой панели в группе Admin → AI выберите Connections (в документации Open WebUI путь записан как Settings > Admin > Connections; страница также открывается по адресу /admin/settings/connections).

  1. Откройте Settings → Admin → Connections и найдите список Manage OpenAI API Connections.
  2. Нажмите значок + (Add Connection) справа от заголовка списка.
  3. В поле URL укажите https://routerai.ru/api/v1.
  4. Тип авторизации Auth оставьте Bearer, а в поле API Key вставьте ключ RouterAI (в примерах — заглушка sk-xxxxxxxxxxxxxxxx).
  5. Нажмите кнопку Verify Connection (значок обновления справа от поля URL): Open WebUI обратится к эндпоинту /models и покажет Server connection verified. Если каталог подтянулся, подключение рабочее.
  6. Нажмите Save.

Форма Add Connection в Open WebUI: URL https://routerai.ru/api/v1 и ключ-заглушка

Обратите внимание: простое сохранение подключение не проверяет — проверку запускает только кнопка Verify Connection (так сказано в документации Open WebUI).

Если в списке подключений остался стандартный адрес OpenAI (https://api.openai.com/v1), отключите его переключателем или удалите, чтобы он не запрашивал модели с неверным ключом.

Переменные окружения: подключение без захода в интерфейс

Для docker-compose и автоматического развёртывания проще передать параметры через окружение. Open WebUI читает OPENAI_API_BASE_URL и OPENAI_API_KEY (обе есть в .env.example репозитория и в справочнике переменных):

services:
  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    ports:
      - "3000:8080"
    environment:
      - OPENAI_API_BASE_URL=https://routerai.ru/api/v1
      - OPENAI_API_KEY=${ROUTERAI_API_KEY}
      - WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY}
    volumes:
      - open-webui:/app/backend/data
    restart: always

volumes:
  open-webui:

Ключ храните в файле .env рядом с docker-compose.yml, а не в самом compose-файле. WEBUI_SECRET_KEY — секрет для подписи сессий; задайте его постоянным значением, иначе после пересоздания контейнера пользователям придётся входить заново.

Важная особенность: эти переменные работают как начальные значения. Если Open WebUI уже запускался и сохранил настройки в базе, то при следующем старте значения из интерфейса имеют приоритет над окружением. Чтобы окружение всегда побеждало, добавьте ENABLE_PERSISTENT_CONFIG=False — но тогда изменения, сделанные в настройках администратора, не будут сохраняться между перезапусками.

Выбор модели

Open WebUI подтягивает весь каталог RouterAI, и в выпадающем списке чата оказываются сотни моделей. Чтобы не выбирать среди них каждый раз, ограничьте список:

  1. Откройте Settings → Admin → Connections и нажмите на значок настроек (шестерёнку) у подключения RouterAI: откроется окно Edit Connection.
  2. Раскройте блок Advanced, в поле Model IDs введите id модели из каталога RouterAI и нажмите значок +. Повторите для каждой нужной модели.
  3. Нажмите Save.

Окно Edit Connection: в поле Model IDs добавлены anthropic/claude-sonnet-5.5 и anthropic/claude-haiku-5.5

Пока список Model IDs пуст, доступны все модели каталога; как только вы добавили хотя бы одну, остальные скрываются. Повторно добавить тот же id нельзя — Open WebUI выдаст сообщение Model ID is already added.

Подборка для старта (актуальность id проверяйте по каталогу, он обновляется чаще, чем статьи):

Модель Для чего
anthropic/claude-sonnet-5.5 основная модель для повседневной работы: тексты, код, анализ документов
anthropic/claude-haiku-5.5 быстрые и недорогие ответы, черновики, перевод
deepseek/deepseek-v4-flash самый дешёвый вариант для обычного чата и суммаризации
google/gemini-3.1-pro-preview длинный контекст: большие документы и RAG
anthropic/claude-opus-5.5 сложные задачи: рассуждения, многошаговый анализ, архитектура
openai/gpt-6-astra-pro максимальное качество там, где важен результат, а не цена

Точные цены за токены для каждой модели смотрите в каталоге: они различаются в десятки раз, поэтому для повседневного чата разумно по умолчанию выбрать недорогую модель (Haiku или DeepSeek V4 Flash), а дорогие подключать для отдельных задач.

Практика

RAG по документам. Загрузите файлы в разделе Documents рабочей области (Workspace). В чате введите # перед вопросом и выберите документ во всплывающем списке — над полем ввода появится значок вложения, и модель будет отвечать с учётом содержимого файла. Тем же способом можно подтянуть веб-страницу: # и адрес. Для работы с большими документами берите модели с большим контекстом из таблицы выше.

Веб-поиск. Включается в настройках администратора: нужно выбрать поисковый провайдер (SearXNG, Brave, Tavily, Google PSE и другие — полный список в README проекта) и при необходимости указать его ключ. После этого результаты поиска подставляются в контекст диалога.

Голосовой ввод. Open WebUI поддерживает голосовые вызовы с несколькими провайдерами распознавания и синтеза речи (локальный Whisper, OpenAI, Deepgram, Azure и другие). Речевые модели настраиваются отдельно от чат-подключения; в этой статье мы подключали к RouterAI только текстовые модели.

Несколько пользователей. Администратор создаёт пользователей и группы и ограничивает, кто какие модели видит. Расходы при этом идут с одного баланса RouterAI, поэтому для команды разумно оставить только недорогие модели по умолчанию.

Проверка подключения

  1. На странице подключения нажмите Verify Connection — должно появиться Server connection verified.
  2. Откройте новый чат и выберите в списке моделей, например, anthropic/claude-sonnet-5.5.
  3. Отправьте сообщение «Объясни одним предложением, что такое RAG» — модель должна ответить.
  4. Проверить ключ и каталог можно и из командной строки:
curl -s https://routerai.ru/api/v1/models -H "Authorization: Bearer sk-xxxxxxxxxxxxxxxx" | head -c 300

Ответ с JSON-списком моделей означает, что ключ рабочий.

Чат в Open WebUI: ответ модели Anthropic: Claude Sonnet 5.5, полученный через RouterAI

Решение проблем

Список моделей пуст. Нажмите Verify Connection и посмотрите на сообщение. Проверьте, что в URL указано ровно https://routerai.ru/api/v1 — без /chat/completions в конце и без лишних символов. Затем убедитесь, что в Model IDs нет опечаток: фильтр оставляет только перечисленные id.

Ошибка 401. Ключ неверный, отозван или скопирован с пробелом либо переносом строки. Создайте новый ключ в личном кабинете и вставьте его заново. Если вы задаёте ключ через OPENAI_API_KEY, но подключение уже сохранялось через интерфейс, помните: сохранённое значение из базы приоритетнее окружения (см. выше про ENABLE_PERSISTENT_CONFIG).

Нет ответа при положительном балансе. Проверьте, что выбранный id точно есть в каталоге, и повторите запрос с другой моделью, чтобы отделить проблему модели от проблемы подключения.

http вместо https. Адрес должен начинаться с https://. Подключение по http:// к публичному API не используйте: ключ уйдёт по открытому каналу.

CORS и «Open WebUI backend required». Запросы к RouterAI делает сервер Open WebUI, а не браузер, поэтому CORS на стороне RouterAI не мешает. Проблемы с CORS возникают, когда вы открываете сам Open WebUI с другого домена или за reverse proxy. Укажите в переменной CORS_ALLOW_ORIGIN все адреса, по которым пользователи заходят в интерфейс (с протоколом и портом), и убедитесь, что прокси пробрасывает WebSocket. Подробности — в разделе про HTTPS и CORS официальной документации.

Что дальше