Open WebUI (126k★) — это самый популярный самостоятельно размещаемый чат-интерфейс для ИИ. Со встроенным API-сервером Hermes Agent вы можете использовать Open WebUI в качестве качественного веб-интерфейса для вашего агента — с управлением диалогами, учётными записями пользователей и современным чат-интерфейсом.
Архитектура
flowchartLRA["Open WebUI<br/>browser UI<br/>port 3000"]B["hermes-agent<br/>gateway API server<br/>port 8642"]A-->|POST/v1/chat/completions|BB-->|SSEstreamingresponse|A
Open WebUI подключается к API-серверу Hermes так же, как подключался бы к OpenAI. Hermes обрабатывает запросы со всем своим набором инструментов — терминал, файловые операции, веб-поиск, память, навыки — и возвращает финальный ответ.
Важно: расположение среды выполнения
API-сервер — это среда выполнения агента Hermes, а не просто прокси для LLM. Для каждого запроса Hermes создаёт серверный AIAgent на хосте API-сервера. Вызовы инструментов выполняются там же, где работает API-сервер.
Например, если ноутбук направляет Open WebUI или другой совместимый с OpenAI клиент на удалённый API-сервер Hermes, то pwd, файловые инструменты, браузерные инструменты, локальные MCP-инструменты и другие инструменты рабочего пространства выполняются на удалённом хосте API-сервера, а не на ноутбуке.
Open WebUI общается с Hermes по схеме сервер-к-серверу, поэтому вам не нужен API_SERVER_CORS_ORIGINS для этой интеграции.
Быстрая настройка
Локальный запуск одной командой (macOS/Linux, без Docker)
Если вы хотите локально соединить Hermes + Open WebUI с переиспользуемым лаунчером, выполните:
На Linux автоматическая настройка фонового сервиса требует работающей сессии systemd --user. Если вы используете SSH-сервер без графического интерфейса и хотите пропустить установку сервиса, выполните:
hermes config set автоматически направляет флаг в config.yaml, а секрет — в ~/.hermes/.env. Если шлюз уже запущен, перезапустите его, чтобы изменения вступили в силу:
Если /health не отвечает, шлюз не подхватил API_SERVER_ENABLED=true — перезапустите его. Если /v1/models возвращает 401, ваш заголовок Authorization не совпадает с API_SERVER_KEY.
ENABLE_OLLAMA_API=false отключает стандартный бэкенд Ollama, который иначе отображается пустым и засоряет список моделей. Пропустите этот параметр, если у вас действительно запущен Ollama.
Первый запуск занимает 15–30 секунд: Open WebUI загружает модели эмбеддингов sentence-transformer (~150 МБ) при первом старте. Дождитесь, пока docker logs open-webui успокоится, прежде чем открывать UI.
5. Откройте интерфейс
Перейдите по адресу http://localhost:3000. Создайте учётную запись администратора (первый пользователь становится администратором). Вы должны увидеть вашего агента в выпадающем списке моделей (названного по имени вашего профиля или hermes-agent для профиля по умолчанию). Начинайте чат!
Настройка через Docker Compose
Для более постоянной настройки создайте docker-compose.yml:
Если вы предпочитаете настраивать подключение через интерфейс, а не через переменные окружения:
Войдите в Open WebUI по адресу http://localhost:3000
Нажмите на аватар профиля → Настройки администратора
Перейдите в Подключения
В разделе OpenAI API нажмите на иконку гаечного ключа (Управление)
Нажмите + Добавить новое подключение
Введите:
URL: http://host.docker.internal:8642/v1
API Key: то же самое значение, что и API_SERVER_KEY в Hermes
Нажмите галочку, чтобы проверить подключение
Сохранить
Ваша модель агента должна появиться в выпадающем списке моделей (названная по имени вашего профиля или hermes-agent для профиля по умолчанию).
Переменные окружения действуют только при **первом запуске** Open WebUI. После этого настройки подключения сохраняются во внутренней базе данных. Чтобы изменить их позже, используйте интерфейс администратора или удалите том Docker и начните заново.
Тип API: Chat Completions и Responses
Open WebUI поддерживает два режима API при подключении к бэкенду:
Режим
Формат
Когда использовать
Chat Completions (по умолчанию)
/v1/chat/completions
Рекомендуется. Работает из коробки.
Responses (экспериментальный)
/v1/responses
Для состояния диалога на стороне сервера через previous_response_id.
Использование Chat Completions (рекомендуется)
Это режим по умолчанию, не требующий дополнительной настройки. Open WebUI отправляет стандартные запросы в формате OpenAI, и Hermes Agent отвечает соответствующим образом. Каждый запрос включает полную историю диалога.
Использование Responses API
Чтобы использовать режим Responses API:
Перейдите в Настройки администратора → Подключения → OpenAI → Управление
Отредактируйте ваше подключение hermes-agent
Измените Тип API с «Chat Completions» на «Responses (Experimental)»
Сохраните
С Responses API Open WebUI отправляет запросы в формате Responses (массив input + instructions), и Hermes Agent может сохранять полную историю вызовов инструментов между сообщениями через previous_response_id. Когда stream: true, Hermes также транслирует элементы function_call и function_call_output в нативном формате, что позволяет создавать кастомный структурированный UI для вызовов инструментов в клиентах, поддерживающих события Responses.
В настоящее время Open WebUI управляет историей диалога на стороне клиента даже в режиме Responses — он отправляет полную историю сообщений в каждом запросе вместо использования `previous_response_id`. Основное преимущество режима Responses на сегодня — структурированный поток событий: текстовые дельты, элементы `function_call` и `function_call_output` приходят как SSE-события OpenAI Responses вместо чанков Chat Completions.
Как это работает
Когда вы отправляете сообщение в Open WebUI:
Open WebUI отправляет запрос POST /v1/chat/completions с вашим сообщением и историей диалога
Hermes Agent создаёт серверный экземпляр AIAgent, используя профиль API-сервера, конфигурацию модели/провайдера, память, навыки и настроенные наборы инструментов API-сервера
Агент обрабатывает ваш запрос — он может вызывать инструменты (терминал, файловые операции, веб-поиск и т.д.) на хосте API-сервера
По мере выполнения инструментов встроенные сообщения о прогрессе транслируются в UI, так что вы видите, что делает агент (например, `💻 ls -la`, `🔍 Python 3.12 release`)
Финальный текстовый ответ агента транслируется обратно в Open WebUI
Open WebUI отображает ответ в своём чат-интерфейсе
Ваш агент имеет доступ к тем же инструментам и возможностям, что и экземпляр Hermes на API-сервере. Если API-сервер удалённый, то и инструменты тоже удалённые.
Если вам нужно, чтобы инструменты выполнялись в вашем локальном рабочем пространстве, запустите Hermes локально и направьте его на чистого LLM-провайдера или совместимый с OpenAI прокси моделей (например, vLLM, LiteLLM, Ollama, llama.cpp, OpenAI, OpenRouter и т.д.). Будущий режим разделённой среды выполнения («удалённый мозг, локальные руки») отслеживается в #18715; это не поведение текущего API-сервера.
Совет: прогресс инструментов
При включённой потоковой передаче (по умолчанию) вы будете видеть краткие встроенные индикаторы при выполнении инструментов — эмодзи инструмента и его ключевой аргумент. Они появляются в потоке ответа до финального ответа агента, давая вам представление о том, что происходит за кулисами.
Справочник по настройке
Hermes Agent (API-сервер)
Переменная
По умолчанию
Описание
API_SERVER_ENABLED
false
Включить API-сервер
API_SERVER_PORT
8642
Порт HTTP-сервера
API_SERVER_HOST
127.0.0.1
Адрес привязки
API_SERVER_KEY
(обязательно)
Bearer-токен для аутентификации. Должен совпадать с OPENAI_API_KEY.
Open WebUI
Переменная
Описание
OPENAI_API_BASE_URL
URL API Hermes Agent (включая /v1)
OPENAI_API_KEY
Должен быть непустым. Должен совпадать с вашим API_SERVER_KEY.
Устранение неполадок
Модели не отображаются в выпадающем списке
Проверьте, что URL содержит суффикс /v1: http://host.docker.internal:8642/v1 (не просто :8642)
Проверьте, что шлюз работает: curl http://localhost:8642/health должен вернуть {"status": "ok"}
Проверьте список моделей: curl -H "Authorization: Bearer *** http://localhost:8642/v1/models должен вернуть список с hermes-agent
Сетевые настройки Docker: Изнутри Docker localhost означает контейнер, а не ваш хост. Используйте host.docker.internal или --network=host.
Пустой бэкенд Ollama заслоняет список: Если вы пропустили ENABLE_OLLAMA_API=false, Open WebUI покажет пустую секцию Ollama над вашими моделями Hermes. Перезапустите контейнер с -e ENABLE_OLLAMA_API=false или отключите Ollama в Настройки администратора → Подключения.
Тест соединения проходит, но модели не загружаются
Это почти всегда отсутствующий суффикс /v1. Тест соединения Open WebUI — это базовая проверка связности; он не проверяет, работает ли список моделей.
Ответ занимает много времени
Hermes Agent может выполнять несколько вызовов инструментов (чтение файлов, выполнение команд, поиск в интернете) перед тем, как сформировать финальный ответ. Это нормально для сложных запросов. Ответ появляется целиком, когда агент завершает работу.
Ошибки «Неверный API-ключ»
Убедитесь, что ваш OPENAI_API_KEY в Open WebUI совпадает с API_SERVER_KEY в Hermes Agent.
Open WebUI сохраняет настройки совместимых с OpenAI подключений в своей собственной базе данных после первого запуска. Если вы случайно сохранили неверный ключ в интерфейсе администратора, исправления переменных окружения недостаточно — обновите или удалите сохранённое подключение в **Настройки администратора → Подключения**, или сбросьте каталог данных / базу данных Open WebUI.
Многопользовательская настройка с профилями
Чтобы запустить отдельные экземпляры Hermes для каждого пользователя — каждый со своей конфигурацией, памятью и навыками — используйте профили. Каждый профиль запускает собственный API-сервер на отдельном порту и автоматически объявляет имя профиля как модель в Open WebUI.
1. Создайте профили и настройте API-серверы
API_SERVER_* — это переменные окружения, а не ключи конфигурации YAML, поэтому записывайте их в .env каждого профиля. Выбирайте порты вне диапазона платформы по умолчанию (8644 — адаптер вебхуков, 8645 — wecom-callback, 8646 — msgraph-webhook), например 8650+:
В Настройки администратора → Подключения → OpenAI API → Управление добавьте по одному подключению на профиль:
Подключение
URL
API Key
Alice
http://host.docker.internal:8650/v1
alice-secret
Bob
http://host.docker.internal:8651/v1
bob-secret
В выпадающем списке моделей будут отображаться alice и bob как отдельные модели. Вы можете назначать модели пользователям Open WebUI через панель администратора, предоставляя каждому пользователю своего изолированного агента Hermes.
Совет: пользовательские имена моделей
Имя модели по умолчанию соответствует имени профиля. Чтобы переопределить его, установите API_SERVER_MODEL_NAME в .env профиля: