Что такое Hermes Agent
NousResearch — независимая исследовательская организация, которая специализируется на fine-tuning открытых языковых моделей. Их серия Hermes — это набор моделей поверх Llama 3, Mistral и других базовых весов, дообученных специально под агентные сценарии: tool use, function calling, структурированный вывод, следование многоступенчатым инструкциям.
Hermes — не просто чат-бот. Это рабочая лошадка для агентных пайплайнов, которая понимает JSON-схемы инструментов, умеет вызывать их в правильном формате и держать контекст задачи на протяжении многих шагов.
Зачем self-hosted агент, если есть OpenAI API?
Три причины, которые часто перевешивают:
Приватность. Все данные остаются на вашем сервере. Никакие запросы не уходят в облако OpenAI. Для задач с чувствительными данными — документами клиентов, внутренней аналитикой, кодом — это принципиально.
Стоимость. GPT-4o при интенсивной агентной работе (тысячи вызовов в день) быстро превращается в существенную статью расходов. Hermes на VPS за $20–40/месяц или на своём железе работает бесплатно после первоначальной настройки.
Контроль. Вы сами управляете версией модели, системным промптом, параметрами инференса. Никаких неожиданных обновлений API, никаких rate limits от OpenAI, никакой зависимости от внешних сервисов.
Hermes 3 (8B параметров) на практике сопоставим с GPT-3.5-turbo для большинства агентных задач, а Hermes 3 (70B) уже конкурирует с GPT-4 в ряде бенчмарков по следованию инструкциям.
Что нужно
- Ollama — установлен и запущен (инструкция ниже, если ещё нет)
- RAM: минимум 8 GB для Hermes 3 8B; 16 GB рекомендуется для комфортной работы
- GPU (опционально): CUDA или Metal ускоряет инференс в 5–10 раз, но CPU тоже работает
- Python 3.10+ — для агентного пайплайна
- Диск: ~5 GB свободного места для модели
Шаг 1: Установить Ollama и скачать модель
# Установка Ollama (Linux/macOS)
curl -fsSL https://ollama.com/install.sh | sh
# На Windows — скачайте инсталлятор с https://ollama.com/download
# Скачать Hermes 3 (8B — оптимально для агентных пайплайнов)
ollama pull nous-hermes3:8b
# Для более мощного варианта (требует 40+ GB RAM или GPU)
# ollama pull nous-hermes3:70b
# Проверка — модель должна ответить на русском
ollama run nous-hermes3:8b "Привет! Опиши себя в одном предложении."
После этой команды Ollama запустит локальный API-сервер на http://localhost:11434. Этот эндпоинт совместим с OpenAI API — многие библиотеки работают с ним без изменений.
Шаг 2: Базовый агентный пайплайн на Python
Устанавливаем зависимости:
pip install ollama
Простой агентный цикл с поддержкой инструментов:
import ollama
import json
# Определяем инструменты в формате JSON Schema
tools = [
{
"type": "function",
"function": {
"name": "get_current_time",
"description": "Возвращает текущее время в указанном городе",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "Название города, например 'Москва'"
}
},
"required": ["city"]
}
}
}
]
# Системный промпт для агентного режима
SYSTEM_PROMPT = """You are a helpful AI assistant with access to tools.
When you need to use a tool, respond with a JSON object in this format:
{"tool": "tool_name", "arguments": {"arg1": "value1"}}
After receiving tool results, provide a helpful response to the user."""
def run_agent(user_message: str):
messages = [
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": user_message}
]
response = ollama.chat(
model="nous-hermes3:8b",
messages=messages,
tools=tools
)
message = response["message"]
# Проверяем, вызвала ли модель инструмент
if message.get("tool_calls"):
for tool_call in message["tool_calls"]:
tool_name = tool_call["function"]["name"]
tool_args = tool_call["function"]["arguments"]
print(f"[Агент вызывает инструмент]: {tool_name}({tool_args})")
# Здесь выполняем реальную логику инструмента
tool_result = execute_tool(tool_name, tool_args)
# Добавляем результат в контекст
messages.append(message)
messages.append({
"role": "tool",
"content": str(tool_result)
})
# Получаем финальный ответ с учётом результата инструмента
final_response = ollama.chat(
model="nous-hermes3:8b",
messages=messages
)
return final_response["message"]["content"]
return message["content"]
def execute_tool(name: str, args: dict) -> str:
"""Диспетчер инструментов — добавляйте свои функции сюда."""
if name == "get_current_time":
# Заглушка — в реальном агенте подключите API
return f"В городе {args['city']} сейчас 14:30 по местному времени."
return "Инструмент не найден."
if __name__ == "__main__":
result = run_agent("Который сейчас час в Москве?")
print(f"\n[Финальный ответ]: {result}")
Шаг 3: Добавить инструменты (tool use)
Пример более практичного инструмента — поиск файлов:
import os
import glob
def search_files_tool(pattern: str, directory: str = ".") -> list[str]:
"""Ищет файлы по маске в указанной директории."""
matches = glob.glob(os.path.join(directory, "**", pattern), recursive=True)
return matches[:10] # Ограничиваем вывод
# Добавьте в список tools:
file_search_tool = {
"type": "function",
"function": {
"name": "search_files",
"description": "Ищет файлы по шаблону имени в файловой системе",
"parameters": {
"type": "object",
"properties": {
"pattern": {
"type": "string",
"description": "Шаблон имени файла, например '*.py' или 'config.*'"
},
"directory": {
"type": "string",
"description": "Директория для поиска (по умолчанию текущая)"
}
},
"required": ["pattern"]
}
}
}
Главное правило для инструментов Hermes: описание должно быть точным и однозначным. Модель принимает решение о вызове инструмента исключительно на основе поля description. Чем конкретнее описание, тем надёжнее работает tool use.
System prompt для агентных задач
Hermes использует формат ChatML для структурирования диалога. Для агентного режима рекомендуется следующий системный промпт:
<|im_start|>system
You are a function-calling AI assistant. You have access to the following tools:
AVAILABLE TOOLS:
{tools_json}
RULES:
1. Analyze the user request and determine if a tool call is needed.
2. If yes, respond ONLY with a valid JSON object:
{"name": "tool_name", "arguments": {"param": "value"}}
3. If no tool is needed, respond directly in natural language.
4. After receiving a tool result, synthesize it into a helpful response.
5. Never fabricate tool results — always wait for actual execution.
<|im_end|>
Детальный разбор этого промпта и примеры с несколькими инструментами — в скилле System prompt для Hermes в режиме tool use.
Сравнение с OpenAI API
| Параметр | Hermes 3 8B | GPT-3.5-turbo | GPT-4o |
|---|---|---|---|
| Стоимость | Бесплатно (своё железо) | ~$0.5/1M токенов | ~$5/1M токенов |
| Приватность | Полная (локально) | Данные в облаке | Данные в облаке |
| Скорость | 15–40 tok/s (CPU/GPU) | ~80 tok/s | ~60 tok/s |
| Tool use | Хорошо | Хорошо | Отлично |
| Следование инструкциям | Хорошо | Хорошо | Отлично |
| Контекст | 8K–128K (зависит от версии) | 16K | 128K |
| Зависимость от API | Нет | Да | Да |
| Лучший сценарий | Self-hosted, приватные данные | Быстрые прототипы | Сложные агенты |
Вывод: Hermes 3 8B — прагматичный выбор для большинства агентных задач, где важна приватность или бюджет. Для задач, критичных к качеству reasoning, стоит смотреть на Hermes 3 70B или оставить GPT-4o.
Что дальше
- n8n + Hermes — подключите Hermes как кастомный LLM-нод в ваши n8n автоматизации через Ollama API (совместим с OpenAI endpoint)
- OpenClaw — оберните Hermes-агента в OpenClaw для работы с браузером и файловой системой
- MCP — Hermes работает с Model Context Protocol через любой MCP-клиент, поддерживающий OpenAI-совместимый API
- Скилл: System prompt для tool use — детальный разбор промпта и примеры взаимодействий
Если железо ограничено — попробуйте Hermes 3 3B (quantized). Качество tool use немного ниже, но модель запускается даже на 4 GB RAM.