Hermes 3 как агент: function calling и tool use на своём сервере

Hermes 3 от Nous Research — fine-tune Llama 3.1 с заточкой под function calling и роли. Что умеет в агентских сценариях и почему его берут вместо OpenAI там, где данные нельзя отправлять наружу.

Hermes 3 как агент: function calling и tool use на своём сервере

Hermes 3 — это fine-tune Llama 3.1 (8B / 70B / 405B) от Nous Research. Главное отличие от базовой Llama — обучение на синтетике для function calling, JSON-output, ролей и многошаговых рассуждений. По бенчмаркам тoul use держит уровень GPT-4 и Claude 3 Sonnet на типовых сценариях, при этом веса открытые и запускается локально.

Hermes 3 как агент: function calling и tool use на своём сервере
Базовый агентский цикл: запрос → решение модели вызвать инструмент → выполнение → ответ.

Зачем брать Hermes вместо OpenAI

  • Данные не уходят к вендору. Медицина, финансы, юридические тексты, переписка с клиентами — там, где comply-требования или NDA не разрешают отправку в облако
  • Стоимость на объёме. 8B на A10/A100 — копейки за 1М токенов на своём железе, OpenAI — 0.50-2.50 USD за 1M
  • Контроль. Можно дообучать на своих данных, версионировать, фиксировать поведение
  • Нет лимитов RPM. На своём железе ограничены только GPU

Function calling из коробки

Hermes 3 обучен на формате `<tool_call>` — модель сама понимает когда нужно вызвать инструмент и возвращает JSON с именем функции и аргументами. Системный промпт с описанием инструментов, дальше — генерация:

<|im_start|>system
You have access to tools:
<tools>
[{"name": "search_orders", "description": "Find orders by client phone", "parameters": {"phone": "string"}}]
</tools>
<|im_end|>
<|im_start|>user
Найди заказы клиента +79993001802
<|im_end|>
<|im_start|>assistant
<tool_call>
{"name": "search_orders", "arguments": {"phone": "+79993001802"}}
</tool_call>

Дальше код парсит JSON, вызывает реальную функцию, возвращает результат в формате `<tool_response>`, модель формулирует ответ для пользователя.

Развёртывание

  • vLLM — самый быстрый рантайм, batched inference, OpenAI-совместимый API. Запуск: `vllm serve NousResearch/Hermes-3-Llama-3.1-8B --tool-call-parser hermes`
  • Ollama — проще для прототипа, но без батчинга. Команда `ollama pull hermes3:8b` и работает
  • llama.cpp — минимальные требования к железу, GGUF-кванты. Подходит для CPU-deployment в крайнем случае
  • TGI (text-generation-inference) — для production-нагрузки, autoscaling в Kubernetes

Железо

  • 8B — RTX 4090 / A10 (24GB VRAM). Хватает на 1-2 одновременных пользователя в реалтайме. Около 60 токенов/сек
  • 8B квантизованный (Q5_K_M) — RTX 3090 / 4070 Ti / 4060 Ti 16GB. 35-50 токенов/сек, качество чуть хуже
  • 70B — A100 80GB или 2× A100 40GB. Нужно если задачи сложные (длинное рассуждение, юридические тексты)
  • 405B — кластер из 8× H100. Уровень GPT-4. Только для крупных компаний

Типовые агентские сценарии где Hermes уместен

  • Внутренний помощник по корпоративным документам (RAG + tool call в search)
  • Бот в Telegram/MAX, который умеет дёргать CRM, склад, бухгалтерию
  • Авто-обработчик заявок: классификация → routing → черновик ответа → согласование человеком
  • Копайлот для контент-менеджера: генерит черновик, fetch-ит данные из БД, форматирует
  • QA-бот по логам и метрикам — можно дать MCP-сервер с доступом к Grafana/Prometheus

Что не получится

  • Long context inference — Hermes держит 128K, но 70B+ на длинных контекстах требует серьёзного железа и память на kv-cache
  • Очень сложное reasoning — для математики и кода R1 / Claude 3.5 Sonnet всё ещё лучше
  • Multimodal (картинки, голос) — Hermes только текст. Для vision брать Llava или Qwen2-VL отдельно

Подводные камни

  • Tool call parser должен быть выставлен правильно (`--tool-call-parser hermes` в vLLM). Без этого формат может ломаться
  • На 8B иногда галлюцинирует имена функций — добавлять валидацию JSON-schema на выходе
  • В русском языке знает плохо технические термины — для русскоязычных агентов лучше дообучать на своём корпусе или брать YandexGPT/GigaChat для chat-слоя