Hermes 3 как агент: function calling и tool use на своём сервере
Hermes 3 от Nous Research — fine-tune Llama 3.1 с заточкой под function calling и роли. Что умеет в агентских сценариях и почему его берут вместо OpenAI там, где данные нельзя отправлять наружу.
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 вместо 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-слоя