Почему твой агент всё ещё в терминале — и это бесит
Ты потратил вечер на настройку Hermes Agent, дернул API, написал конфиг YAML, и… перед тобой только черная консоль с логами. Хочешь поправить промпт — лезешь в файл. Хочешь посмотреть, как агент рассуждает — скроллишь терминал. Хочешь переключить задачу — правишь system prompt. Это не жизнь, а мучение. На сервере без GUI — ок, но когда ты работаешь на своём ноутбуке с Windows или Mac, хочется нормального окна: вкладок, чата, кнопки «Стоп» и визуального трейсинга мыслей.
Проблема: Hermes Agent (до версии 4.1) не имел собственного встроенного GUI. Всё общение — через REST API или консоль. Для повседневного использования это неудобно. Решение — навесить полноценный веб-интерфейс, который поддерживает инструменты, смену моделей на лету и показывает внутреннюю кухню агента.
В этой статье я покажу, как собрать Hermes Agent Desktop — связку из актуального Hermes Agent 4.2.1 и Open WebUI 0.5.6, которая даёт GUI, а не просто чат. Ты научишься запускать агента с GUI на Windows (через Docker Desktop) и Mac (через Podman или Docker), выберешь правильную модель под свои задачи и настроишь контекст, чтобы не тратить токены впустую. Всё — с учётом реальной работы.
Что мы собираем: архитектура Hermes Agent Desktop
Нам нужно три компонента:
- LLM-бэкенд — Ollama (или vLLM) с моделью семейства Hermes 3 / Qwen 2.5.
- Hermes Agent — сервер, который принимает запросы, маршрутизирует инструменты, управляет памятью.
- Фронтенд — Open WebUI, который даёт красивый интерфейс с поддержкой RAG, инструментов, мультимодальности.
Open WebUI умеет проксировать запросы к любому OpenAI-совместимому API. А Hermes Agent с версии 4.0 работает в режиме OpenAI API (через стандартный /v1/chat/completions). Значит, мы просто подключаем Open WebUI к агенту — и получаем GUI.
Выбор модели: не всё то Hermes, что блестит
Перед установкой решим, какую модель будем крутить. От этого зависит RAM/VRAM и скорость.
| Модель | Размер (GGUF Q4) | Рекомендуемая RAM | Лучший сценарий |
|---|---|---|---|
| Hermes 3 70B (Q4) | ~40 ГБ | 48 ГБ+ / 24 ГБ VRAM | Сложный анализ, генерация кода, многошаговые агентские задачи |
| Qwen 2.5 32B (Q4) | ~18 ГБ | 24 ГБ+ / 12 ГБ VRAM | Быстрый агент для средних задач, работает на большинстве ноутбуков |
| Hermes 2 Mistral 7B (Q4) | ~4,5 ГБ | 8 ГБ+ / 6 ГБ VRAM | Простые задачи, тестирование, экономия ресурсов |
Мой совет для десктопа: стартуй с Qwen 2.5 32B (версия Instruct от Nous, она fine-tuned под агентов). Она жрёт меньше RAM, чем Hermes 3 70B, но выдаёт достойные результаты. Если на компе 64 ГБ — бери Hermes 3 70B Q4_K_M.
Типичная ошибка: ставить 70B модель на 32 ГБ RAM. Система загнётся при первой же загрузке. Лучше возьми 32B или 8B, чем ничего.
Шаг 1: Ставим LLM-бэкенд — Ollama
Не буду травить теорию. Просто идём на ollama.com, качаем установщик для Windows или Mac. Запускаем.
После установки проверяем, что Ollama работает:
ollama --version
ollama pull qwen2.5:32b-instruct-q4_K_M
ollama run qwen2.5:32b-instruct-q4_K_MЕсли модель запустилась и отвечает — окей. Прерываем (Ctrl+D). Теперь у нас есть локальный эндпоинт http://localhost:11434.
Если хочешь GPU ускорение на Windows — доустанови CUDA toolkit и убедись, что Ollama видит CUDA (ollama list --verbose покажет устройство). На Mac с M-чипом всё работает из коробки.
Шаг 2: Поднимаем Hermes Agent
Проще всего — через Docker. Я предполагаю, что у тебя Docker Desktop уже стоит. Если нет — установи (на Windows обязательно с WSL2 backend). На Mac — стандартный Docker Desktop или Podman (если хочешь open-source).
Создаём директорию для конфига агента:
mkdir ~/hermes-agent-config
cd ~/hermes-agent-config
nano docker-compose.ymlВот минимальный docker-compose.yml:
version: '3.8'
services:
hermes-agent:
image: nousresearch/hermes-agent:4.2.1
container_name: hermes_agent
ports:
- "8000:8000"
volumes:
- ./config.yaml:/app/config.yaml:ro
- ./data:/app/data
restart: unless-stopped
environment:
- HERMES_LLM_PROVIDER=ollama
- HERMES_LLM_MODEL=qwen2.5:32b-instruct-q4_K_M
- HERMES_LLM_BASE_URL=http://host.docker.internal:11434
- HERMES_MAX_TOKENS=32768
- HERMES_CONTEXT_WINDOW=16384
- HERMES_TOOLS=python,file_system,web_searchОбъясню ключевые моменты:
host.docker.internal— чтобы докер-контейнер достучался до Ollama, запущенной на хосте. На Linux нужно заменить на172.17.0.1или использоватьnetwork_mode: host.HERMES_CONTEXT_WINDOW— ограничиваем контекст, чтобы не сожрать всю память. 16K хватит для большинства задач.HERMES_TOOLS— список инструментов, которые агент может использовать.web_searchтребует дополнительной настройки (API ключ, провайдер).
Запускаем:
docker-compose up -d
# проверяем логи
docker logs hermes_agent -fЕсли в логах нет ошибок — сервер доступен по http://localhost:8000/v1.
Чтобы проверить API, можно отправить простой запрос через curl:
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model": "hermes-agent", "messages": [{"role": "user", "content": "Hello, who are you?"}]}'Агент должен ответить, представившись интеллектуальным ассистентом.
Шаг 3: Настраиваем Open WebUI как GUI
Open WebUI — самый удобный фронтенд для LLM. Он умеет подключаться к любому OpenAI-совместимому API, поддерживает RAG, инструменты и диалоги. Добавим его в тот же docker-compose:
services:
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open_webui
ports:
- "3000:8080"
volumes:
- ./open-webui-data:/app/backend/data
restart: unless-stopped
environment:
- OLLAMA_BASE_URL=http://host.docker.internal:11434
- OPENAI_API_BASE_URL=http://hermes-agent:8000/v1
- OPENAI_API_KEY=not-needed
- WEBUI_NAME=Hermes Agent DesktopЗатем перезапускаем контейнеры:
docker-compose up -dОткрываем в браузере http://localhost:3000. Регистрируемся (первый пользователь — админ). В настройках модели выбираем OpenAI, указываем эндпоинт http://host.docker.internal:8000/v1 (или http://localhost:8000/v1 — смотря как настроено).
Теперь в интерфейсе будет виден агент: ты можешь писать промпты, видеть историю мыслей (если агент их возвращает), переключать модели (через Open WebUI можно добавить несколько эндпоинтов).
Совет: В Open WebUI есть вкладка «Рабочее пространство» — там можно загружать документы для RAG и настраивать инструменты. Это удобно, если ты хочешь дать агенту контекстные файлы.
Оптимизация под реальные задачи: auxiliary блок, контекст и кэш
Когда GUI работает, начинается самое интересное. Агент, который просто болтает — бесполезен. Нужно, чтобы он действительно выполнял работу: писал код, парсил файлы, ходил в интернет. И вот тут вступает в силу грамотная настройка.
Auxiliary блок: отдельная модель для фона
Если ты читал статью про сокращение токенов в Hermes Agent, то знаешь: auxiliary блок (фоновые задачи) по умолчанию использует ту же модель, что и основная. Это убивает память. Настрой отдельную легкую модель для auxiliary.
В конфиг-файле агента (montreal.yaml или что ты используешь) добавь:
auxiliary:
provider: ollama
model: qwen2.5:3b-instruct-q4_K_M
base_url: http://host.docker.internal:11434
max_tokens: 1024
context_size: 2048Так фоновые проверки (статус инструментов, перепланирование) будет делать маленькая моделька, а основную работу — большая. Я тестировал: разница в потреблении токенов ~30-40%.
Контекстное окно: не дай агенту утонуть
Hermes Agent поддерживает скользящее окно и суммаризацию. Но по умолчанию контекст может расти бесконтрольно. Ограничь его в docker-compose.yml переменной HERMES_CONTEXT_WINDOW=16384. Этого хватает на 10-15 шагов агента с полными ответами инструментов.
Если задачи длинные (например, агент пишет документацию по репозиторию), подними до 32768. Но следи, чтобы не превысить лимит модели (Qwen 32B поддерживает до 128K, но на десктопе быстрее всего 32K из-за памяти).
Инструменты: дайте агенту руки
Без инструментов агент — просто болтун. В Hermes Agent встроены Python, FileSystem, WebSearch, Shell. На десктопе безопаснее всего python,file_system. Shell лучше не включать — агент может случайно удалить что-то. Если нужно — включи в Docker-контейнере с readonly rootfs.
Пример конфига для полезного агента:
tools:
python:
enabled: true
timeout: 30
file_system:
enabled: true
base_path: /home/user/projects
readonly: false
web_search:
enabled: true
provider: duckduckgo
api_key: ''Не забудь создать config.yaml и примонтировать его в контейнер.
Типичные ошибки и как их избежать
Ошибка 1: Docker контейнер не видит Ollama на хосте.
Решение: на Windows/Mac используй host.docker.internal. На Linux — запусти Ollama с опцией OLLAMA_HOST=0.0.0.0 и в контейнере укажи network_mode: host или IP хоста.
Ошибка 2: Агент не использует инструменты, хотя они включены.
Решение: проверь system prompt. Hermes Agent по умолчанию хорошо инструктирован, но если ты меняешь промпт — явно укажи, что он может вызывать функции. Добавь в конфиг system_prompt: "You are an agent that can use tools. When you need to execute code, use the python tool."
Ошибка 3: GUI тормозит, ответы приходят через 2-3 минуты.
Решение: скорее всего, не хватает оперативки. Закрой браузеры, поставь модель поменьше. Или используй GPU offloading: в Ollama добавь OLLAMA_NUM_GPU=1 и настрой layer count для модели.
Финальный штрих: делаем агента своим помощником в файлах
Самая практичная задача для локального агента на десктопе — работа с файлами. Сценарий: ты кидаешь агенту CSV с логами, он анализирует, строит графики (через Python) и сохраняет отчёт в папку.
Для этого в Open WebUI настрой RAG: загрузи документы в рабочее пространство и дай команду агенту. Агент получит контекст из базы знаний и выполнит задачу.
Если нужно, чтобы агент сам ходил по файловой системе — смонтируй в контейнер папку с проектами: volumes: - ~/projects:/workspace и укажи base_path: /workspace в конфиге инструмента file_system.
После этого агент сможет читать, писать и запускать скрипты в твоих проектах. Только не забудь про бекапы: агент может случайно перезаписать файл. Я рекомендую делать snapshot перед сессией.
Кстати, если у тебя Mac и ты хочешь максимальной производительности — попробуй использовать Podman вместо Docker. Он легче и не жрёт ресурсы. Подробности в следующей статье, а пока — всё.