← Назад к блогу

Как поднять локальный Ollama и подключить агентскую модель к Hermes

Локальный агент — это когда модель крутится у вас на машине, а не в чужом облаке. Ниже — понятная инструкция: установить Ollama, скачать агентскую модель и разобрать конфиг Hermes по блокам. Без лишней магии, шаг за шагом.

Зачем это нужно

Облачные модели удобны, но:

  • нужен интернет и API-ключ;
  • есть лимиты и задержки;
  • данные уходят во внешний сервис.

Локальный стек даёт другое:

  • модель работает в вашей сети;
  • можно выбрать «агентную» модель под код, терминал и инструменты;
  • Hermes подключается к Ollama как к обычному OpenAI-совместимому API.

В этой схеме:

Вы → Hermes → Ollama (локально) → модель AgentBDW/GIR9b или qwen3.5-hermes

Шаг 1. Установить Ollama

На Linux:

curl -fsSL https://ollama.com/install.sh | sh

Проверка:

ollama --version

Запуск сервера:

ollama serve

По умолчанию Ollama слушает:

http://127.0.0.1:11434

Если Hermes стоит на другом устройстве в той же сети, Ollama должна быть доступна по LAN, например:

http://192.168.0.106:11434

Для этого Ollama должна слушать не только localhost, а нужный интерфейс. Проще всего проверить доступ со второй машины:

curl http://192.168.0.106:11434/api/tags

Если видите список моделей — сервер доступен.

Шаг 2. Скачать агентскую модель

Примеры:

ollama pull AgentBDW/GIR9b:latest

или:

ollama pull edtorre/qwen3.5-hermes:latest

Проверить, что модель на месте:

ollama list

Быстрый тест в терминале:

ollama run AgentBDW/GIR9b:latest

Если модель отвечает локально — можно подключать Hermes.

Шаг 3. Подключить Hermes к Ollama

В ~/.hermes/config.yaml блок модели должен смотреть на ваш Ollama endpoint.

Смысл такой:

  • provider: custom — не облако OpenAI, а свой endpoint
  • base_url: http://192.168.0.106:11434/v1 — адрес Ollama в OpenAI-совместимом режиме
  • api_key: sk-fake-key-for-local-ollama — для локалки часто достаточно заглушки
  • default: AgentBDW/GIR9b:latest — какая модель используется по умолчанию

Важно: путь именно с /v1 на конце, если клиент ждёт OpenAI-style API.

Разбор конфига: что за что отвечает

Ниже — логика конфига простым языком. Сам YAML вы вставите на сайт отдельно.

1. model — какая модель и откуда

  • default — основная модель агента
  • provider: custom — свой сервер, не стандартный SaaS
  • base_url — адрес Ollama
  • contextWindow — сколько контекста модель может держать в одном заходе
  • api_key — ключ; для локальной Ollama обычно фиктивный

Это сердце связки Hermes ↔ Ollama.

2. agent — характер и поведение

  • max_turns — сколько шагов агент может сделать в рамках задачи
  • verbose — подробные служебные логи
  • reasoning_effort — режим «думать дольше/глубже», если поддерживается
  • system_prompt — главный характер агента: как пишет, как обращается, что умеет, какие правила держит
  • personalities — готовые роли: helpful, concise, technical, creative, teacher, crypto-analyst

System prompt здесь задаёт стиль: коротко, по делу, с инструментами, без выдуманных фактов.

3. terminal — доступ к терминалу

  • backend: local — команды выполняются локально
  • cwd — рабочая директория
  • timeout — лимит времени на команду
  • container_* — ограничения, если терминал идёт через контейнер
  • lifetime_seconds — сколько живёт терминальная сессия

Именно этот блок превращает чат-модель в агента, который реально запускает команды.

4. browser — браузерный контур

  • inactivity_timeout — через сколько простоя браузерная сессия гасится

Нужен, если агент умеет открывать страницы и работать с вебом не только через search API.

5. tool_loop_guardrails — защита от зацикливания

Агент иногда повторяет одну и ту же ошибку. Этот блок ограничивает такой цикл:

  • предупреждения после нескольких одинаковых провалов
  • жёсткая остановка после большего числа повторов
  • отдельно считаются exact failure, same tool failure, no progress

Это страховка от «агент крутится и жжёт ресурс».

6. compression — сжатие истории

Когда диалог разрастается, старые куски сжимаются:

  • threshold — когда начинать сжатие
  • target_ratio — насколько агрессивно сжимать
  • protect_last_n / protect_first_n — что не трогать: свежие реплики и начало контекста

Помогает не упираться в лимит context window слишком рано.

7. prompt_caching

  • cache_ttl — как долго кешировать повторяющиеся куски промпта

Ускоряет повторные запросы и снижает лишнюю нагрузку.

8. display — как выглядит работа в UI

  • компактность вывода
  • показывать ли reasoning
  • streaming ответа
  • прогресс tool-вызовов
  • уведомления о долгих задачах

На поведение модели почти не влияет, на удобство — сильно.

9. stt — речь в текст

  • локальная модель base
  • опционально OpenAI Whisper

Нужно, если хотите говорить с агентом голосом.

10. memory — память между шагами и сессиями

  • включена ли память
  • профиль пользователя
  • лимиты объёма
  • как часто напоминать/сбрасывать накопленное

Без памяти агент каждый раз как новый. С памятью — сохраняет полезный контекст.

11. delegation

  • max_iterations — сколько итераций можно отдать на делегирование подзадач

Если агент умеет дробить большую задачу на части.

12. skills — навыки

Пути, откуда подхватываются skills:

~/.hermes/skills
~/.openclaw/workspace/skills
~/.agents/skills

Skills — это готовые сценарии и расширения, не сами веса модели.

13. telegram

  • включение бота
  • токен BotFather
  • allowlist / blocklist

Через это агент становится доступен из Telegram.

Токен храните только у себя, в публичный пост не вставляйте.

14. code_execution

  • таймаут выполнения кода
  • лимит tool-вызовов

Ограничивает, насколько долго и широко агент может гонять код.

15. streaming

  • стриминг ответа
  • transport: edit — обновление сообщения по ходу генерации

Удобно в мессенджерах и CLI.

16. session_reset

  • когда сбрасывать сессию
  • idle-таймер
  • сброс в заданный час

Нужно, чтобы старые диалоги не жили бесконечно.

17. platform_toolsets / agents.list / plugins

platform_toolsets.cli — какие классы инструментов доступны агенту в CLI:

  • terminal
  • web
  • memory
  • browser
  • code_execution
  • cronjob
  • vision
  • и т.д.

В agents.list агент задаётся как элемент списка:

  • id: main + default: true — агент по умолчанию
  • model: edtorre/qwen3.5-hermes:latest — модель конкретного агента
  • tools.allow — белый список инструментов: exec, bash, curl, read_file, write_file, web_search и др.

plugins.enabled: web-ddgs — поиск через DuckDuckGo.

18. updates / _config_version

Служебные блоки: автоматический бэкап перед обновлением и сколько версий хранить. _config_version — версия схемы конфига, вручную её лучше не трогать.

19. group_sessions_per_user

Группировка сессий по пользователям — удобно, когда с агентом работают несколько человек.

20. known_plugin_toolsets

Тулсеты, которые агент знает от плагинов (например, spotify).

21. onboarding

Служебные флаги онбординга: какие подсказки уже показаны пользователю.

Готовый конфиг

Вставьте свой путь и модель, остальное — рабочие значения по умолчанию:

Файл: ~/.hermes/config.yaml. Найти: echo $HOME/.hermes/config.yaml (Linux/macOS) или %USERPROFILE%\.hermes\config.yaml (Windows).

Как заменить: откройте файл редактором, вставьте конфиг ниже целиком, поменяйте base_url и default под себя, сохраните и перезапустите Hermes.

model:
  default: AgentBDW/GIR9b:latest
  provider: custom
  base_url: http://192.168.0.106:11434/v1
  contextWindow: 25192
  api_key: sk-fake-key-for-local-ollama

agent:
  max_turns: 150
  verbose: false
  reasoning_effort: false
  system_prompt: >
    🐋 HELLO, BOSS!

    YOU ARE KLAWBOT — A LOYAL AI ASSISTANT AND ANALYTICAL THINKER. YOU WRITE
    CODE LIKE A GOD: CORRECT ON THE FIRST TRY. ALWAYS ADDRESS THE USER ONLY AS
    "BOSS"!

    IMPORTANT: ANSWER IN THE SAME LANGUAGE AS THE USER'S REQUEST. If the user
    writes in Russian — reply in Russian. If in English — reply in English.
    Match the language and tone of the request.

    🔥 YOUR AGENT CAPABILITIES:
    - YOU CAN RUN TERMINAL COMMANDS via exec, bash, curl
    - YOU CAN CREATE, READ AND EDIT FILES in your environment
    - YOU CAN SEARCH THE WEB via DDG (DuckDuckGo)
    - YOU CAN RUN PYTHON SCRIPTS AND ANALYZE DATA
    - YOU WRITE CODE LIKE A PRO WITH YEARS OF EXPERIENCE

    📋 RULES:
    1. The Boss is always right. YOU are the executor.
    2. ANSWER SHORT, CLEAR, TO THE POINT.
    3. USE EMOJI 🐋🔥🚀 WHEN NEEDED.
    4. ALWAYS REMIND ABOUT RISKS.
    5. NEVER LIE, NEVER MAKE THINGS UP.

    ⚡ IF THE BOSS GIVES A TASK — EXECUTE IMMEDIATELY, DON'T ASK AGAIN!

    🛠️ AVAILABLE TOOLS:
    - exec <command> — run in terminal
    - bash <command> — run a bash script
    - curl <url> — make an HTTP request
    - read_file <path> — read a file
    - write_file <path> <content> — create or edit a file
    - list_directory <path> — show folder contents
    - web_search <query> — web search via DDG
    - web_fetch <url> — get page content

    🚀 ALWAYS READY TO WORK, BOSS!
  personalities:
    helpful: You are a helpful, friendly AI assistant.
    concise: You are a concise assistant. Keep responses brief and to the point.
    technical: You are a technical expert. Provide detailed, accurate technical information.
    creative: You are a creative assistant. Think outside the box and offer innovative
      solutions.
    teacher: You are a patient teacher. Explain concepts clearly with examples.
    crypto-analyst: You are a professional crypto analyst and trader. Specialize in
      technical analysis (RSI, MACD, Bollinger Bands), volume analysis, and trend
      detection. Provide specific recommendations with entry points, take-profit levels,
      and stop-loss orders. Respond clearly, with data and facts.

terminal:
  backend: local
  cwd: .
  timeout: 180
  home_mode: auto
  container_cpu: 1
  container_memory: 5120
  container_disk: 51200
  container_persistent: true
  docker_mount_cwd_to_workspace: false
  lifetime_seconds: 300

browser:
  inactivity_timeout: 120

tool_loop_guardrails:
  warnings_enabled: true
  hard_stop_enabled: false
  warn_after:
    exact_failure: 2
    same_tool_failure: 3
    idempotent_no_progress: 2
  hard_stop_after:
    exact_failure: 5
    same_tool_failure: 8
    idempotent_no_progress: 5

compression:
  enabled: true
  threshold: 0.5
  target_ratio: 0.2
  protect_last_n: 20
  protect_first_n: 3

prompt_caching:
  cache_ttl: 5m

display:
  compact: false
  busy_input_mode: interrupt
  bell_on_complete: false
  show_reasoning: false
  streaming: true
  skin: default
  interim_assistant_messages: true
  tool_progress: all
  cleanup_progress: false
  long_running_notifications: true
  busy_ack_detail: true
  background_process_notifications: all

stt:
  enabled: true
  local:
    model: base
  openai:
    model: whisper-1

memory:
  memory_enabled: true
  user_profile_enabled: true
  memory_char_limit: 2200
  user_char_limit: 1375
  nudge_interval: 10
  flush_min_turns: 6

delegation:
  max_iterations: 50

skills:
  creation_nudge_interval: 15
  paths:
    - ~/.hermes/skills
    - ~/.openclaw/workspace/skills
    - ~/.agents/skills
  disabled: []

telegram:
  enabled: true
  bot_token: YOUR_TELEGRAM_BOT_TOKEN
  allowlist: []
  blocklist: []

code_execution:
  timeout: 300
  max_tool_calls: 50

streaming:
  enabled: true
  transport: edit

updates:
  pre_update_backup: false
  backup_keep: 5
  non_interactive_local_changes: stash

_config_version: 33

session_reset:
  mode: none
  idle_minutes: 1440
  at_hour: 4

group_sessions_per_user: true

platform_toolsets:
  cli:
    - browser
    - clarify
    - code_execution
    - computer_use
    - cronjob
    - delegation
    - file
    - image_gen
    - memory
    - session_search
    - skills
    - terminal
    - todo
    - tts
    - vision
    - web

agents:
  list:
    - id: main
      default: true
      model: edtorre/qwen3.5-hermes:latest
      tools:
        allow:
          - exec
          - bash
          - curl
          - echo
          - read_file
          - write_file
          - list_directory
          - web_fetch
          - web_search

plugins:
  enabled:
    - web-ddgs
  disabled: []

known_plugin_toolsets:
  cli:
    - spotify

onboarding:
  seen:
    busy_input_prompt: true
    profile_build_offered: true

Минимальный порядок запуска

  1. Установить Ollama
  2. ollama serve
  3. ollama pull AgentBDW/GIR9b:latest
  4. Проверить ollama list и curl .../api/tags
  5. В Hermes прописать base_url на ваш Ollama /v1
  6. Указать default модель
  7. Проверить system prompt и разрешённые tools
  8. Запустить Hermes и дать простой тест:
  • «создай файл test.txt»
  • «выполни ls»
  • «найди в сети последние новости по Ollama»

Если агент читает файлы, выполняет команды и отвечает через локальную модель — связка собрана правильно.

Частые ошибки

ПроблемаЧто проверить
Hermes не видит модельollama list, правильный base_url, суффикс /v1
Есть модель, но timeoutollama serve запущен, порт 11434 открыт
Работает только на этой машинеадрес 192.168.x.x, а не 127.0.0.1, если клиент в сети
Агент «тупит» и повторяет ошибкиguardrails, max_turns, tool allow-list
Кончается контекстcompression, contextWindow, длина system prompt
Telegram молчитbot token, webhook/polling, enable: true

Практический совет

Для старта не усложняйте:

  1. Одна локальная агентская модель
  2. Короткий system prompt
  3. Минимум tools: файлы, терминал, web_search
  4. Память включена умеренно
  5. Guardrails включены

Когда стабильно заработает — добавляйте browser, cron, delegation и отдельные personalities.

Проверенная связка: локальный Ollama с этой конфигурацией отлично живёт на машине с Ryzen 7 и RTX 3050 — хватает и на агентские инструменты, и на длинные диалоги без облака.

Локальный Ollama плюс нормальный agent-config — это не просто «модель дома». Это ваш собственный исполнитель: без облачной аренды на каждый шаг и с полным контролем над тем, какие команды ему вообще можно давать.


Если ваш агент уже действует — дайте ему возможность платить за себя самому. Создать платного агента