Оригинал: https://timofei-ermolaev.ru/courses/open-webui/configure/lichnye-podklyucheniya/

# Личные и прямые подключения из браузера

Поможем настроить прямое подключение Open WebUI из браузера, проверить список моделей и ответ, разобраться с CORS и сохранением API-ключа в v0.12.3.

[![Тимофей Ермолаев](https://timofei-ermolaev.ru/_astro/timofei-ermolaev-portrait.s0mCFw-J_Z1x8STQ.webp)](<https://timofei-ermolaev.ru/ob-avtore/>)

[Тимофей Ермолаев](<https://timofei-ermolaev.ru/ob-avtore/>) Директор по информационным технологиям (CIO)

**Опубликовано**

17 октября 2026 г.

**Обновлено**

17 октября 2026 г.

**На урок**

15 мин

**Тема**

[Настройка](<https://timofei-ermolaev.ru/courses/open-webui/configure/>)

## После урока вы сможете

- Различать личную настройку и браузерный маршрут запроса
- Понимать, где сохраняются настройки и API-ключ в v0.12.3
- Проверять каталог моделей и законченный ответ по отдельности
- Различать сетевую доступность, CORS и права модели

**Проверяемый результат:** При подготовленном API личное подключение сохранено и проверено отдельным текстовым запросом. Вы понимаете маршрут запроса и условия хранения ключа.

Представим небольшую учебную задачу: участнику книжного клуба нужно сократить несекретное объявление о встрече до двух предложений, сохранив время, место и условия участия. Общий чат в Open WebUI уже работает, но для этой пробы человеку предоставили отдельный подготовленный доступ к модели, который не нужно добавлять в общие административные настройки сервера.

Для такой пробы подойдёт личное прямое подключение ([Direct Connections в документации Open WebUI](<https://docs.openwebui.com/features/chat-conversations/direct-connections/>) ). Разберём, чем запрос из браузера отличается от серверного вызова и где сохраняется ключ в проверенной версии `v0.12.3`. Затем проверим условия доступа, добавим подключение и попробуем сократить объявление.

## Кто отправляет запрос и где сохраняются личные настройки

Когда вы используете [обычное OpenAI-совместимое подключение](<https://timofei-ermolaev.ru/courses/open-webui/configure/openai-compatible/>) , настроенное администратором, браузер передаёт сообщение серверу Open WebUI, а его серверная часть (`backend`) обращается к внешнему API модели. В режиме `Direct Connections` основной запрос OpenAI Chat Completions к API модели отправляет сам браузер ([реализация браузерного вызова в v0.12.3](<https://github.com/open-webui/open-webui/blob/91ea4e3421d1d8069f13d4a463fcb5986d94ea60/src/lib/apis/openai/index.ts#L398-L424>) ).

Это по-прежнему обычный текстовый диалог, а не новая разновидность модели или агент. В документации возможность помечена как экспериментальная. Прямой вызов зависит от работающего браузерного сеанса: пока модель формирует ответ, оставьте вкладку открытой. Сервер Open WebUI тоже участвует в передаче полученных частей ответа ([передача ответа в v0.12.3](<https://github.com/open-webui/open-webui/blob/91ea4e3421d1d8069f13d4a463fcb5986d94ea60/src/routes/%2Blayout.svelte#L685-L752>) ).

Браузерный маршрут запроса не определяет, где хранится ключ. В проверенной стабильной версии Open WebUI v0.12.3 личное соединение вместе с ключом сохраняется и на сервере ([сохранение личного соединения](<https://github.com/open-webui/open-webui/blob/91ea4e3421d1d8069f13d4a463fcb5986d94ea60/src/lib/components/chat/Settings/Connections.svelte#L19-L64>) и [приём настроек сервером](<https://github.com/open-webui/open-webui/blob/91ea4e3421d1d8069f13d4a463fcb5986d94ea60/backend/open_webui/routers/users.py#L489-L557>) ). Документация обещает хранение ключа только в браузере, но код этого релиза сохраняет его на сервере вместе с пользовательскими настройками. Это результат чтения исходников на 2026-10-17, а не проверки работающей установки.

Поэтому «личное» (`personal`) означает настройку вашей учётной записи. Это не гарантия хранения ключа только в одном браузере или на одном компьютере. Прямой вызов также не отменяет историю чатов и серверные служебные этапы Open WebUI и не меняет правила тарификации API.

## Что должно быть готово до ввода адреса и ключа

Вводите ключ только в доверенный экземпляр Open WebUI. Прежде чем открывать настройки, проверим, что для упражнения всё готово:

- **Разрешение на стороне Open WebUI.** Администратор уже включил возможность прямых подключений в `Settings` → `Admin` → `Connections` ([переключатель `Direct Connections` в панели администратора](<https://github.com/open-webui/open-webui/blob/91ea4e3421d1d8069f13d4a463fcb5986d94ea60/src/lib/components/admin/Settings/Connections.svelte#L365-L385>) ). Это настройка моделей; отдельные права на прямые серверы инструментов (`Tools`) для нашего текстового примера не нужны.
- **Готовый HTTPS API, совместимый с OpenAI Chat Completions.** Адрес должен быть доступен с вашего устройства и принимать запросы каталога и генерации.
- **Точный базовый адрес (`Base URL`) и фактический идентификатор модели (`Model ID`).** Берите адрес в том виде, в каком его выдал оператор API. Суффикс `/v1` встречается часто, но дописывать его наугад не нужно.
- **Разрешение CORS для источника (`origin`) вашего Open WebUI.** Если страница веб-интерфейса и API модели находятся на разных адресах, браузер применяет правила [межисточниковых запросов CORS](<https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CORS>) . Владелец API модели должен заранее разрешить `origin` вашей страницы Open WebUI, то есть точное сочетание схемы, хоста и порта (например, `https://chat.example.org`). Настройки самого Open WebUI не могут выдать такое разрешение за чужой API-сервер.
- **Ограниченный временный ключ (`API Key`) и понятный лимит расходов.** Для упражнения нужен отдельно выданный короткоживущий ключ с доступом к нужной модели и согласованным бюджетом у оператора API. Учитывайте и [фоновые модели и дополнительные расходы](<https://timofei-ermolaev.ru/courses/open-webui/configure/fonovye-modeli/>) : генерация заголовков и тегов после ответа остаётся задачей сервера и может вызывать дополнительные обращения к модели.

В личном прямом подключении адрес `localhost` или `127.0.0.1` всегда указывает на то устройство, где открыт ваш браузер, а не на сервер или Docker-контейнер Open WebUI. Внутреннее имя контейнера или адрес закрытой серверной сети могут работать в административном подключении, но быть недоступны с вашего ноутбука. Если Open WebUI открыт по `https://`, браузер может заблокировать обращение к незащищённому `http://` адресу как смешанное содержимое (`mixed content`). Для loopback-адресов вроде `127.0.0.1` существуют исключения, а к локальной сети могут применяться отдельные ограничения, зависящие от браузера и версии.

Если подготовленного HTTPS-адреса с настроенным CORS или временного ключа сейчас нет, не ослабляйте защиту браузера и не пытайтесь настраивать прокси на ходу. Пока сократите объявление через уже знакомое административное подключение.

## Добавим личное подключение и проверим каталог моделей

Если всё готово, добавим источник в личных настройках. В версии `v0.12.3` поля `Connection Type` и `API Type` здесь скрыты ([поля личного соединения в v0.12.3](<https://github.com/open-webui/open-webui/blob/91ea4e3421d1d8069f13d4a463fcb5986d94ea60/src/lib/components/AddConnectionModal.svelte#L354-L528>) ), поэтому выбирать тип соединения или протокола вручную не придётся.

1. Откройте личные настройки пользователя `Settings` → `Connections` (это пользовательское меню настроек, а не панель `Admin`).
2. Нажмите кнопку добавления соединения (`Add Connection`) и проверьте, что переключатель активности нового подключения включён.
3. В поле `URL` вставьте точный базовый адрес подготовленного API, полученный от оператора.
4. В блоке авторизации оставьте выбранный по умолчанию вариант `Bearer` и вставьте временный ключ только в предназначенное для него поле `API Key`. Не сохраняйте ключ в заметках чата и не передавайте его в тексте запросов.
5. Поле `Model IDs` оставьте пустым. Так браузер запросит каталог у указанного API. Ручной идентификатор создал бы запись без обращения к каталогу и сам по себе не подтвердил бы связь с сервером модели.
6. Нажмите кнопку проверки соединения (`Verify Connection`). Браузер отправит запрос `GET <Base URL>/models` с ключом в заголовке `Authorization: Bearer …` ([проверка соединения и запрос `/models` в v0.12.3](<https://github.com/open-webui/open-webui/blob/91ea4e3421d1d8069f13d4a463fcb5986d94ea60/src/lib/apis/openai/index.ts#L333-L364>) ). Дождитесь подтверждения, что проверка прошла без ошибки.
7. Нажмите `Save` в окне соединения, а затем сохраните изменения в разделе настроек.
8. Сразу после сохранения заново откройте `Settings` → `Connections` и убедитесь, что добавленная строка осталась в списке и включена.

`Save` сохраняет настройки учётной записи. `Verify Connection` проверяет обращение браузера к `/models`; затем ещё нужно найти ожидаемый ID. Проверка из административного меню её не заменяет: там к API обращался сервер Open WebUI.

## Проверим полный ответ на объявлении книжного клуба

После сохранения соединения проверим нужную запись в каталоге, а затем саму генерацию. Успешный ответ от `/models` ещё не гарантирует, что ключ имеет право запускать модель и что запрос `POST <Base URL>/chat/completions` проходит без ошибок.

Откройте новый чат:

1. В списке моделей найдите и выберите фактический идентификатор (`Model ID`), который дал оператор API. Если в общем списке уже есть модели с похожими названиями от других источников, вспомните, [как различать записи моделей](<https://timofei-ermolaev.ru/courses/open-webui/configure/upravlenie-spiskom-modeley/>) с помощью префиксов (`Prefix ID`), и ориентируйтесь на точный идентификатор, а не на произвольное отображаемое имя.
2. Отправьте в чат учебный запрос с вымышленным объявлением:

   > Сократи до двух предложений, сохранив все условия: «Учебный книжный клуб собирается в субботу в 15:00 в читальном зале. Обсуждаем выбранную книгу. Можно прийти без выступления и просто послушать».
3. Не закрывайте и не перезагружайте вкладку браузера, пока ответ не завершится полностью.

Инструменты разработчика и экспорт сетевых журналов с заголовками авторизации для упражнения не нужны. Проверим результат по отдельным наблюдениям:

- **Настройка сохранена:** запись подключения остаётся на месте при повторном открытии `Settings` → `Connections`.
- **Нужная запись найдена:** при пустом поле `Model IDs` в списке выбора моделей есть ожидаемый фактический ID подготовленного источника. Любая другая запись эту проверку не заменяет.
- **Генерация завершена и проверена по смыслу:** в окне чата без ошибок отобразился законченный ответ из двух предложений, в котором сохранены все четыре условия исходного текста (суббота в 15:00, читальный зал, обсуждение выбранной книги и возможность прийти просто послушать без выступления).

Если все три пункта сошлись, настройка сохранена, ожидаемый ID доступен и получен полный ответ через выбранную запись. Сам по себе складный текст не доказывает, от какого источника пришёл ответ, и ничего не говорит об отсутствии серверных записей или стоимости вызова.

## Что проверить, если подключение не сработало

Если подключение не сработало, начните с этапа, на котором возникла ошибка. Ослаблять настройки безопасности браузера, устанавливать расширения для обхода CORS или менять переменную `CORS_ALLOW_ORIGIN` на сервере Open WebUI не нужно: эти действия либо небезопасны, либо не влияют на заголовки чужого API.

| Наблюдение в интерфейсе | Возможные причины и что проверить |
| --- | --- |
| В личных настройках `Settings` нет вкладки `Connections` | Возможно, прямые подключения не разрешены или отличается конфигурация доступа. Уточните у администратора состояние переключателя в `Settings` → `Admin` → `Connections` и версию Open WebUI. |
| Ошибка при `Verify Connection` или каталог моделей не загружается (при пустом `Model IDs`) | Возможна ошибка `GET <Base URL>/models`, но API мог также вернуть пустой каталог или список без ожидаемого ID. Проверьте точное написание `Base URL` (включая наличие или отсутствие `/v1`), срок действия ключа и то, не указывает ли адрес на `localhost` или внутреннюю сеть сервера, недоступную с вашего компьютера. Общее сообщение `Network Problem` не указывает однозначно на CORS: возможны недоступность адреса или проблема с сертификатом. |
| Признаки блокировки межсайтового запроса (CORS) или смешанного содержимого | Возможная причина — целевой API не разрешил точный `origin` (схему, хост и порт) вашего Open WebUI в заголовках ответа. Другой вариант — ограничения браузера при обращении со страницы `https://` к `http://` или локальному ресурсу ([правила Mixed Content](<https://developer.mozilla.org/en-US/docs/Web/Security/Defenses/Mixed_content>) и [ограничения доступа к локальной сети](<https://developer.chrome.com/blog/local-network-access>) ). Передайте оператору API точный `origin` страницы Open WebUI и этап, на котором возник сбой (`GET /models` или `POST /chat/completions`). |
| Модель видна в списке и выбирается, но при отправке объявления возникает ошибка | Если `Model IDs` заполняли вручную, список моделей вообще не запрашивался у сервера. Если каталог загрузился автоматически, это не гарантирует успех следующего запроса `POST /chat/completions`. Сверьте с оператором API фактический `Model ID`, права временного ключа именно на генерацию и лимиты счёта. |

## Другое устройство и завершение учебной пробы

При входе в ту же учётную запись с другого устройства или браузера личные настройки `v0.12.3` могут загрузиться с сервера ([загрузка личных настроек](<https://github.com/open-webui/open-webui/blob/91ea4e3421d1d8069f13d4a463fcb5986d94ea60/src/lib/components/chat/SettingsModal.svelte#L90-L100>) ). Но запрос к модели выполнит уже этот браузер из доступной ему сети. Наличие сохранённой записи не гарантирует, что адрес заработает на другом устройстве; исчезновение записи после смены браузера тоже не гарантировано.

После пробы с объявлением книжного клуба закройте временный доступ. Если подключение больше не нужно, откройте `Settings` → `Connections`, удалите созданную запись и сохраните настройки ([удаление личного соединения в v0.12.3](<https://github.com/open-webui/open-webui/blob/91ea4e3421d1d8069f13d4a463fcb5986d94ea60/src/lib/components/chat/Settings/Connections.svelte#L114-L131>) ). Это действие убирает адрес и ключ из текущих сохранённых настроек пользователя, но не удаляет историю диалогов, серверные журналы или резервные копии и не аннулирует сам ключ у поставщика API. Отдельно подтвердите у оператора API отзыв или истечение учебного ключа.

В пробе с объявлением мы разделили маршрут запроса, место хранения ключа в `v0.12.3` и проверки сохранения, каталога `/models` и ответа `/chat/completions`. По этим различиям можно выбрать личное браузерное или обычное серверное подключение для своей задачи.

## Материалы урока

- [Open WebUI: Direct Connections docs.openwebui.com](<https://docs.openwebui.com/features/chat-conversations/direct-connections/>)
- [MDN: Cross-Origin Resource Sharing developer.mozilla.org](<https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CORS>)

## Отметить прохождение

Отметьте урок после того, как получили проверяемый результат из практической части.

Урок пройден

![Тимофей Ермолаев](https://timofei-ermolaev.ru/_astro/timofei-ermolaev-portrait.s0mCFw-J_2r7Nkv.webp)

## Об авторе

### Тимофей Ермолаев

Директор по информационным технологиям (CIO)

Пишу о больших языковых моделях, автоматизации и применении ИИ в бизнесе. В статьях разделяю личный опыт, выводы исследований и практические рекомендации.

[Подробнее об авторе](<https://timofei-ermolaev.ru/ob-avtore/>)
