Hermes локально через Ollama — без расходов на API
В десктопном приложении Hermes раздел Settings → Providers → Local Models сам поставит и настроит локальный сервер llama.cpp: скачает модели, подберёт раскладку по памяти и размер контекста. Подробности — в разделе Локальные модели. Это же руководство — про ручную настройку: конкретно Ollama, работу в первую очередь из CLI или сервер, который вы хотите держать под своим контролем.
Проблема
Облачные LLM-API берут деньги за токены. Тяжёлая сессия с кодом может обойтись в $5–20. Для личных проектов, обучения или работы с чувствительными данными это накапливается — и каждый разговор уходит к третьей стороне.
Что даёт это руководство
Вы настроите Hermes Agent, работающий целиком на вашем железе, используя Ollama как бэкенд модели. Никаких API-ключей, никаких подписок, никаких данных за пределами машины. Hermes при этом работает точно так же, как с OpenRouter или Anthropic — терминальные команды, редактирование файлов, браузер, делегирование — просто модель крутится локально.
В результате у вас будет:
- Ollama, раздающий одну или несколько открытых моделей
- Hermes, подключённый к Ollama как к кастомному эндпоинту
- Рабочий локальный агент, умеющий редактировать файлы, запускать команды и просматривать веб
- Опционально: Telegram- или Discord-бот, работающий целиком на вашем железе
Что потребуется
| Компонент | Минимум | Рекомендуется |
|---|---|---|
| RAM | 8 ГБ (для моделей 3B) | 32+ ГБ (для моделей 27B и выше) |
| Хранилище | 5 ГБ свободно | 30+ ГБ (для нескольких моделей) |
| CPU | 4 ядра | 8+ ядер (AMD EPYC, Ryzen, Intel Xeon) |
| GPU | Не обязателен | NVIDIA GPU с 8+ ГБ VRAM заметно ускоряет работу |
Ollama запускается и без GPU. Модель 9B на современном 8-ядерном CPU даёт ~10 токенов/с. Модель 31B на CPU медленнее (~2–5 токенов/с) — каждый ответ занимает 30–120 секунд, но работает. GPU кардинально улучшает ситуацию. Для CPU-only сетапов увеличьте таймаут API через переменную окружения (это не ключ config.yaml):
# ~/.hermes/.env
HERMES_API_TIMEOUT=1800 # 30 минут — с запасом для медленных локальных моделейШаг 1: Установка Ollama
curl -fsSL https://ollama.com/install.sh | sh
Проверяем, что всё запустилось:
ollama --version
curl http://localhost:11434/api/tags # Должен вернуть {"models":[]}
Шаг 2: Скачать модель
Выбирайте под своё железо:
| Модель | Размер на диске | Нужно RAM | Вызов инструментов | Лучше всего для |
|---|---|---|---|---|
gemma4:31b | ~20 ГБ | 24+ ГБ | Да | Лучшее качество — уверенный вызов инструментов и умозаключение |
gemma2:27b | ~16 ГБ | 20+ ГБ | Нет | Диалоговые задачи, без вызова инструментов |
gemma2:9b | ~5 ГБ | 8+ ГБ | Нет | Быстрый чат, Q&A — инструменты вызывать не может |
llama3.2:3b | ~2 ГБ | 4+ ГБ | Нет | Только лёгкие быстрые ответы |
Hermes — это агентский ассистент: он редактирует файлы, запускает команды и просматривает веб через вызовы инструментов. Модели без поддержки tool call умеют только разговаривать — действий совершать не могут. Для полноценной работы с Hermes нужна модель с поддержкой инструментов (например, gemma4:31b).
Скачиваем выбранную модель:
ollama pull gemma4:31b
Можно скачать несколько моделей и переключаться между ними прямо в Hermes командой /model. Ollama загружает активную модель в память по запросу и автоматически выгружает простаивающие.
Проверяем, что модель работает:
curl http://localhost:11434/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gemma4:31b",
"messages": [{"role": "user", "content": "Say hello"}],
"max_tokens": 50
}'
Должен вернуться JSON с ответом модели.
Шаг 3: Настройка Hermes
Запустите мастер настройки Hermes:
hermes setup
При выборе провайдера выберите Custom Endpoint и введите:
- Base URL:
http://localhost:11434/v1 - API Key: оставьте пустым или введите
no-key(Ollama ключ не требует) - Model:
gemma4:31b(или любую скачанную модель)
Либо отредактируйте ~/.hermes/config.yaml напрямую:
model:
default: "gemma4:31b"
provider: "custom"
base_url: "http://localhost:11434/v1"
Шаг 4: Начало работы
hermes
Готово. Теперь у вас полностью локальный агент. Попробуйте:
You: List all Python files in this directory and count the lines of code in each
You: Read the README.md and summarize what this project does
You: Create a Python script that fetches the weather for Ho Chi Minh City
Hermes использует инструменты терминала, файловые операции и вашу локальную модель — без каких-либо облачных вызовов.
Шаг 5: Выбор модели под задачу
Не каждая задача требует самой большой модели. Практическое руководство:
| Задача | Рекомендуемая модель | Почему |
|---|---|---|
| Редактирование файлов, код, команды терминала | gemma4:31b | Единственная модель с надёжным вызовом инструментов |
| Быстрые вопросы (инструменты не нужны) | gemma2:9b | Быстрые ответы для диалоговых задач |
| Лёгкий чат | llama3.2:3b | Самая быстрая, но очень ограниченная |
Для полноценной агентской работы (редактирование файлов, команды, браузер) gemma4:31b — лучший локальный вариант с поддержкой вызова инструментов. Следите за библиотекой моделей Ollama — поддержка tool call у новых моделей расширяется быстро.
Переключаться между моделями можно прямо в сессии:
/model gemma2:9b
Шаг 6: Оптимизация скорости
Увеличить контекстное окно Ollama
По умолчанию Ollama использует контекст в 2048 токенов. Hermes для агентской работы с инструментами требует минимум 64 000 токенов:
# Создаём Modelfile с увеличенным контекстом
cat > ~/.hermes/cache/scratch/Modelfile << 'EOF'
FROM gemma4:31b
PARAMETER num_ctx 64000
EOF
ollama create gemma4-64k -f ~/.hermes/cache/scratch/Modelfile
Затем обновите конфиг Hermes, указав gemma4-64k в качестве имени модели.
Держать модель загруженной
По умолчанию Ollama выгружает модели после 5 минут простоя. Для постоянно работающего шлюза-бота держите модель загруженной:
# Keep-alive на 24 часа
curl http://localhost:11434/api/generate \
-d '{"model": "gemma4:31b", "keep_alive": "24h"}'
Или задайте глобально в окружении Ollama:
# /etc/systemd/system/ollama.service.d/override.conf
[Service]
Environment="OLLAMA_KEEP_ALIVE=24h"
GPU offloading (если доступен)
При наличии NVIDIA GPU Ollama автоматически выгружает слои на него. Проверить:
ollama ps # Показывает, какая модель загружена и сколько слоёв на GPU
Для модели 31B на GPU с 12 ГБ получится частичная выгрузка (~40 слоёв на GPU, остальные на CPU) — и это всё равно даёт заметное ускорение.
Шаг 7: Запуск как шлюз-бот (опционально)
Когда Hermes работает локально в CLI, его можно выставить как Telegram- или Discord-бот — всё равно целиком на вашем железе.
Telegram
- Создайте бота через @BotFather и получите токен
- Добавьте в
~/.hermes/config.yaml:
model:
default: "gemma4:31b"
provider: "custom"
base_url: "http://localhost:11434/v1"
platforms:
telegram:
enabled: true
token: "YOUR_TELEGRAM_BOT_TOKEN"
- Запустите шлюз:
hermes gateway
Теперь пишите боту в Telegram — он отвечает через вашу локальную модель.
Discord
- Создайте Discord-приложение на discord.com/developers
- Добавьте в конфиг:
platforms:
discord:
enabled: true
token: "YOUR_DISCORD_BOT_TOKEN"
- Запуск:
hermes gateway
Шаг 8: Настройка фолбэков (опционально)
Локальные модели могут не справляться со сложными задачами. Настройте облачный фолбэк, который срабатывает только при неудаче локальной модели:
model:
default: "gemma4:31b"
provider: "custom"
base_url: "http://localhost:11434/v1"
fallback_providers:
- provider: openrouter
model: anthropic/claude-sonnet-4
Так 90% использования бесплатно (локально), а платный API подключается только для сложных задач.
Решение проблем
«provider ‘ollama’ has no endpoint configured»
hermes chat --provider ollama (или vllm) останавливается с этой ошибкой, когда эндпоинт для этого псевдонима не задан нигде — ни providers.ollama.base_url, ни model.base_url. Hermes отказывается отправлять запрос, вместо того чтобы откатиться на OpenRouter с облачным ключом (OPENROUTER_API_KEY / OPENAI_API_KEY), который случайно оказался задан. Добавьте эндпоинт:
providers:
ollama:
base_url: "http://localhost:11434/v1"
«Connection refused» при запуске
Ollama не запущен. Запустите:
sudo systemctl start ollama
# или
ollama serve
Медленные ответы
- Проверьте соотношение размера модели и RAM: если модели не хватает RAM, она уходит в своп на диск. Возьмите модель поменьше или добавьте RAM.
- Проверьте
ollama ps: если GPU-слоёв нет — всё работает на CPU. Для CPU-only сетапов это норма. - Уменьшите контекст: большие разговоры замедляют вывод. Используйте
/compressрегулярно или задайте меньший порог сжатия в конфиге.
Медленный первый ответ (prefill)
При каждом обращении к API Hermes отправляет фиксированную нагрузку — системный промпт плюс схемы инструментов для всех включённых инструментов — ещё до содержимого вашего разговора. На CPU-only или слабых по VRAM установках обработка этого промпта (фаза prefill) занимает большую часть первого хода: модель может молчать несколько минут, пока разбирает промпт, а затем генерировать текст с обычной скоростью. Это ожидаемое поведение, а не зависание. Руководство по локальным LLM на Mac описывает тот же эффект — во время prefill на больших контекстах локальные модели могут не выдавать вывод несколько минут, пока обрабатывают промпт — и Hermes автоматически повышает таймаут чтения потока с 120 до 1800 секунд для локальных эндпоинтов (HERMES_STREAM_READ_TIMEOUT).
Что помогает:
- Держите модель загруженной — Ollama выгружает неактивные модели через 5 минут, добавляя полную перезагрузку перед следующим prefill. Задайте
OLLAMA_KEEP_ALIVE=24h(см. Шаг 6). - Увеличьте таймаут API — задайте
HERMES_API_TIMEOUT=1800в~/.hermes/.env(см. Что потребуется). - Измерьте и сократите фиксированный промпт — запустите
hermes prompt-size, чтобы увидеть разбивку по байтам для системного промпта и схем инструментов, затем отключите неиспользуемые наборы инструментов черезhermes toolsи удалите ненужные навыки черезhermes skills. - Используйте GPU offloading — даже частичная выгрузка на GPU даёт заметный прирост скорости (см. Шаг 6).
Модель игнорирует вызовы инструментов
Модели без поддержки tool call выдают обычный текст вместо структурированных вызовов функций. Решения:
- Возьмите модель с поддержкой tool call — из перечисленных выше моделей только
gemma4:31bвызывает инструменты надёжно. - У Hermes есть авторемонт — он обнаруживает некорректные tool call и пытается исправить их автоматически.
- Настройте фолбэк — если локальная модель трижды подряд даёт сбой, Hermes переключается на облачного провайдера.
Если модель выводит в ответе сырой JSON вроде {"name": "web_search", ...} вместо того, чтобы реально вызвать инструмент, — обычно дело в сервере, а не в модели: вызов инструментов не включён или формат tool call не парсится. Таблицу решений по серверам смотрите в разделе Вызовы инструментов появляются как текст вместо выполнения (llama.cpp требует --jinja, vLLM требует --enable-auto-tool-choice --tool-call-parser hermes и так далее).
Ошибки контекстного окна
Контекст Ollama по умолчанию (2048 токенов) слишком мал для агентской работы. Смотрите Шаг 6, как его увеличить.
Сравнение стоимости
Сколько экономит локальный запуск по сравнению с облачными API — на примере типичной сессии с кодом (~100K токенов на входе, ~20K на выходе):
| Провайдер | Стоимость сессии | В месяц (ежедневно) |
|---|---|---|
| Anthropic Claude Sonnet | ~$0,80 | ~$24 |
| OpenRouter (GPT-4o) | ~$0,60 | ~$18 |
| Ollama (локально) | $0,00 | $0,00 |
Ваши расходы — только электроэнергия: примерно $0,01–0,05 за сессию в зависимости от железа.
Что хорошо работает локально
- Редактирование файлов и генерация кода — модели 9B и выше справляются хорошо
- Команды терминала — Hermes оборачивает команду, запускает и читает вывод независимо от модели
- Браузер — инструмент браузера делает загрузку; модель только интерпретирует результаты
- Cron-задачи и отложенные задания — работают идентично облачным сетапам
- Мультиплатформенный шлюз — Telegram, Discord, Slack работают с локальными моделями
Что лучше в облаке
- Сложные многошаговые рассуждения — модели 70B+ или облачные вроде Claude Opus заметно лучше
- Длинные контексты — облачные модели предлагают 100K–1M токенов; локальные рантаймы часто работают ниже минимума Hermes в 64K без дополнительной настройки
- Скорость на длинных ответах — облачный инференс быстрее CPU-only для длинной генерации
Оптимальная стратегия: локально — для повседневных задач, облачный фолбэк — для сложного.