Учебник 26: Пакетная Обработка
Учебник 26: Пакетная Обработка — простое для понимания руководство на основе официальных документов
Это часть официальной серии уроков по Hermes Agent. Смотреть все уроки
Представьте, что это утренний чек-лист, который вы прогоняете перед началом работы — вам не нужно запоминать каждую задачу, вы записываете их один раз, а ваш ассистент автоматически отмечает их каждый день. Именно это Hermes позволяет вам делать с помощью хуков шлюза (gateway hooks) и простого файла под названием BOOT.md.
В этом уроке вы узнаете, как заставить Hermes выполнять собственный «пакет» задач при каждом запуске шлюза — например, проверять логи, отправлять напоминания или даже запускать мини-агента, который думает и сообщает о результатах.
Шаг 1: Создайте каталог для вашего хука
Сначала создайте папку внутри вашего каталога хуков. Каждый хук живет в своей собственной подпапке с двумя файлами: HOOK.yaml (конфигурация) и handler.py (логика).
mkdir -p ~/.hermes/hooks/boot-md
cd ~/.hermes/hooks/boot-md
Теперь создайте HOOK.yaml:
name: "boot-md"
event: "gateway_startup"
Вот и всё — событие сообщает Hermes, что этот хук нужно запустить при загрузке шлюза.
Шаг 2: Напишите обработчик
Теперь создайте handler.py. Вот где происходит вся магия. Обработчик читает файл BOOT.md из вашего домашнего каталога, а затем запускает фоновый поток, который выполняет агента с этими инструкциями.
Вот основная идея (упрощенная):
import os, threading
from pathlib import Path
from hermes.agent import AIAgent
def run_boot_md():
content = Path.home().joinpath(".hermes", "BOOT.md").read_text()
print(f"Running BOOT.md ({len(content)} chars)")
agent = AIAgent(
instructions=content,
model=_resolve_gateway_model(), # использует модель вашего шлюза
**_resolve_runtime_agent_kwargs() # использует учетные данные вашего провайдера
)
result = agent.run()
print(f"boot-md completed: {result.summary()}")
def handler(event):
thread = threading.Thread(target=run_boot_md, daemon=True)
thread.start()
Две ключевые строки:
_resolve_gateway_model()считывает текущую сконфигурированную модель шлюза._resolve_runtime_agent_kwargs()разрешает учетные данные провайдера так же, как это делает обычный ход шлюза — включая API-ключи, базовые URL, OAuth-токены и пулы учетных данных.
Без них голый AIAgent() будет использовать встроенные настройки по умолчанию и получит ошибку 401 при обращении к любой нестандартной конечной точке.
Шаг 3: Проверьте это
Перезапустите шлюз:
hermes gateway restart
Следите за логами:
hermes logs --follow --level INFO | grep boot-md
Вы должны увидеть Running BOOT.md (N chars), за которым следует либо boot-md completed: ... (краткое описание того, что сделал агент), либо boot-md completed (nothing to report), когда агент ответил точным токеном тишины, например [SILENT].
Удалите ~/.hermes/BOOT.md, чтобы отключить чек-лист — хук останется загруженным, но будет молча пропускать выполнение, если файла нет.
Расширение паттерна
- Чек-листы с учетом расписания: используйте
datetime.now().weekday()в инструкцияхBOOT.md(«если сегодня понедельник, также проверь еженедельный лог деплоя»). Инструкции — это свободный текст, так что все, о чем агент может рассуждать, подходит. - Несколько чек-листов: укажите хуку другой файл (
STARTUP.md,MORNING.mdи т.д.) и зарегистрируйте отдельные каталоги хуков для каждого. - Вариант без агента: если вам не нужен полный цикл агента, пропустите
AIAgentи заставьте обработчик отправлять фиксированное уведомление напрямую черезhttpx. Дешевле, быстрее и не зависит от провайдера.
Почему это не встроенная функция
В более ранней версии Hermes это было встроенным хуком, который молча запускал агента с настройками по умолчанию при каждой загрузке шлюза. Это удивляло пользователей с нестандартными конечными точками и делало функцию невидимой для тех, кто не знал о ее существовании. Оставляя это как документированный паттерн — созданный вами, в вашем каталоге хуков — вы точно видите, что он делает, и включаете его, просто создавая файлы.
Как это работает
- При запуске шлюза
HookRegistry.discover_and_load()сканирует~/.hermes/hooks/ - Каждая подпапка с
HOOK.yaml+handler.pyзагружается динамически - Обработчики регистрируются для объявленных событий
- В каждой точке жизненного цикла
hooks.emit()запускает все подходящие обработчики - Ошибки в любом обработчике перехватываются и логируются — сломанный хук никогда не крашит агента
:::info Хуки шлюза срабатывают только в шлюзе (Telegram, Discord, Slack, WhatsApp, Teams). CLI не загружает хуки шлюза. Для хуков, которые работают везде, используйте хуки плагинов. :::
Итог
Теперь вы знаете, как превратить простой текстовый файл в мощный стартовый чек-лист, который выполняется автоматически. Будь то полный цикл агента или быстрый HTTP-запрос, паттерн один и тот же: напишите хук, укажите ему на файл и позвольте Hermes сделать все остальное.
Далее: Урок 27 — Голосовой режим: общение с Hermes без помощи рук.
📖 Официальная документация
Эта статья основана на официальной документации Hermes Agent :Официальные документы › user-guide/features/batch-processing