# 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»](/settings/keys) — он начинается с `sk-or-...` и показывается один раз, сохраните его сразу.
- Порт 3000 на машине свободен (иначе выберите другой в параметре `-p`).

## Установка

Самый простой способ — готовый образ из официального репозитория [open-webui/open-webui](https://github.com/open-webui/open-webui):

```bash
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):

```bash
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 и ключ-заглушка](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/91a901d4f0b55bd497038a47f139ed11.png)

Обратите внимание: простое сохранение подключение не проверяет — проверку запускает только кнопка Verify Connection (так сказано в [документации Open WebUI](https://docs.openwebui.com/getting-started/quick-start/connect-a-provider/starting-with-openai-compatible/)).

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

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

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

```yaml
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](/models) и нажмите значок **+**. Повторите для каждой нужной модели.
3. Нажмите **Save**.

![Окно Edit Connection: в поле Model IDs добавлены anthropic/claude-sonnet-5.5 и anthropic/claude-haiku-5.5](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/8dfb2b07f682f56fe5abf10a5ee749eb.png)

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

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

| Модель | Для чего |
|---|---|
| `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 проекта](https://github.com/open-webui/open-webui)) и при необходимости указать его ключ. После этого результаты поиска подставляются в контекст диалога.

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

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

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

1. На странице подключения нажмите **Verify Connection** — должно появиться **Server connection verified**.
2. Откройте новый чат и выберите в списке моделей, например, `anthropic/claude-sonnet-5.5`.
3. Отправьте сообщение «Объясни одним предложением, что такое RAG» — модель должна ответить.
4. Проверить ключ и каталог можно и из командной строки:

```bash
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](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/dc92c53e88e3be20dbab17d267e776d8.png)

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

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

**Ошибка 401.** Ключ неверный, отозван или скопирован с пробелом либо переносом строки. Создайте новый ключ в [личном кабинете](/settings/keys) и вставьте его заново. Если вы задаёте ключ через `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](https://docs.openwebui.com/troubleshooting/connection-error) официальной документации.

## Что дальше

- Выберите модели под свои задачи в [каталоге RouterAI](/models).
- Если нужна автоматизация без кода, посмотрите [n8n с блоком AI Agent](/pages/n8n-ai-agent-routerai) или [Dify](/pages/dify-routerai) — оба подключаются к RouterAI по тому же OpenAI-совместимому адресу.
- Сравнение подходов к доступу к моделям — в статье [«Альтернативы OpenAI API»](/pages/alternativy-openai-api).
- Документация Open WebUI: [подключение OpenAI-совместимых провайдеров](https://docs.openwebui.com/getting-started/quick-start/connect-a-provider/starting-with-openai-compatible/) и [переменные окружения](https://docs.openwebui.com/reference/env-configuration/).
