Делегирование субагентам и пакетная обработка в Hermes Agent
В этой главе представлены две возможности параллельной обработки в Hermes: делегирование субагентам, позволяющее главному агенту распределять задачи между несколькими субагентами для параллельного выполнения, и система пакетной обработки, которая может запускать агентов параллельно на сотнях промптов и генерировать структурированные обучающие данные.
Делегирование субагентам и параллелизм
Hermes поддерживает делегирование задач от главного агента субагентам, обеспечивая параллельные рабочие процессы.
Субагенты черезdelegationРеализация набора инструментов:
Пример
# Убедитесь, что набор инструментов delegation включён
toolsets:
- delegation
Главный агент используетspawn_agentилиspawn_parallelАгент, производный от инструмента.
Следующий псевдокод иллюстрирует механизм параллельного делегирования:
Пример
# spawn_parallel запускает несколько субагентов одновременно, каждый выполняется независимо.
spawn_parallel([
{"prompt": "Проанализируй данные продаж за Q1 и сформируй отчёт о тенденциях"},
{"prompt": "Проанализируй данные продаж за Q2 и сформируй отчёт о тенденциях"},
{"prompt": "Проанализируй данные продаж за Q3 и сформируй отчёт о тенденциях"}
])
# Три субагента работают параллельно, результаты агрегируются и возвращаются главному Agent
Фоновая задача
Запускайте фоновые задачи прямо в сессии:
Пример
/background проверь все серверы и сообщи о простоях
Совместная работа нескольких агентов в Kanban
Набор инструментов Kanban обеспечивает более структурированное взаимодействие нескольких агентов — агент-оркестратор распределяет задачи по доске, а несколько рабочих агентов забирают и выполняют их:
Пример
hermes tools enable kanban
# Добавьте описания ролей в профиль, чтобы оркестратор знал возможности каждого агента.
hermes profile create researcher \
--description "Умеет читать исходный код и внешнюю документацию, создавать исследовательские отчёты"
hermes profile create coder \
--description "Умеет реализовывать функции, исправлять ошибки и писать тесты"
Набор инструментов Kanban необходимо включить явно — даже all или * не включат его автоматически. Это сделано намеренно, потому что взаимодействие нескольких агентов расходует больше токенов.
Пакетная обработка и генерация данных для RL-обучения
Пакетная обработка позволяет запускать агентов параллельно на сотнях или тысячах запросов, генерируя структурированные данные траекторий — в основном используется для генерации данных для дообучения модели и оценки.
Быстрый старт
Пример
cat data/prompts.jsonl
# {"prompt": "Напишите функцию на Python для поиска самой длинной палиндромной подстроки"}
# {"prompt": "Создайте эндпоинты REST API для аутентификации пользователей с помощью Flask"}
# {"prompt": "Отладка этой ошибки:TypeError: невозможно распаковать non-iterable"}
# Запуск пакетной обработки
python batch_runner.py \
--dataset_file=data/prompts.jsonl \
--batch_size=10 \
--run_name=my_first_run \
--model=anthropic/claude-sonnet-4-6 \
--num_workers=4
# Возобновить прерванную задачу из контрольной точки
python batch_runner.py \
--dataset_file=data/prompts.jsonl \
--batch_size=10 \
--run_name=my_first_run \
--resume
Формат набора данных
Каждая строка — это объект JSON, должна содержатьpromptПоле, необязательно содержит дополнительный контекст:
Пример
{"prompt": "DebugThisError", "cwd": "/home/user/project", "docker_image": "python:3.12"}
Основные параметры
| Параметр | Значение по умолчанию | Описание |
|---|---|---|
| --dataset_file | Обязательный | Путь к набору данных JSONL |
| --batch_size | Обязательный | Количество промптов на пакет |
| --run_name | Обязательный | Имя запуска (используется для выходного каталога и возобновления из контрольной точки) |
| --model | claude-sonnet-4.6 | Используемые модели |
| --num_workers | 4 | Количество параллельных рабочих процессов |
| --max_turns | 10 | Максимальное количество раундов вызова инструментов на промпт |
| --distribution | "default" | Распределение набора инструментов (случайная выборка различных комбинаций инструментов) |
| --reasoning_effort | — | Усилие рассуждения: none/minimal/low/medium/high/xhigh |
| --resume | false | Продолжить с контрольной точки |
Структура вывода
Пакетная обработка создаёт следующую структуру каталогов:
data/my_first_run/ ├── trajectories.jsonl # 最终合并输出(所有批次) ├── batch_0.jsonl # 各批次结果 ├── batch_1.jsonl ├── checkpoint.json # 断点续传记录 └── statistics.json # 工具使用统计
Каждая траектория выводится в формате ShareGPT, включая полную историю диалога, записи вызовов инструментов и статистику покрытия рассуждений:
Пример
"prompt_index": 42,
"conversations": [
{"from": "human", "value": "Напишите функцию для поиска палиндромов..."},
{"from": "gpt", "value": "Я создам эту функцию...",}
"tool_calls": [{"name": "terminal", "arguments": {...}}]},
{"from": "tool", "value": "...результат выполнения..."},
{"from": "gpt", "value": "Это готовая функция..."}
],
"completed": true,
"toolsets_used": ["terminal", "file"],
"tool_stats": {
"terminal": {"count": 2, "success": 2, "failure": 0}
}
}
Фильтрация качества
После завершения пакетного запуска автоматически применяются два фильтра:
| элемент фильтра | Правила | Назначение |
|---|---|---|
| Фильтрация нулевого вывода | Примеры без каких-либо следов рассуждений были отброшены. | Убедитесь, что вывод содержит процесс мышления для повышения качества обучающих данных |
| Фильтрация галлюцинированных имён инструментов | Записи, содержащие вызовы инструментов, которых нет в списке допустимых инструментов, отфильтровываются. | Исключить некорректные вызовы инструментов, вызванные галлюцинациями модели |
Трассировки рассуждений ссылаются на маркеры <REASONING_SCRATCHPAD> или нативные токены размышления. Отфильтрованные данные лучше подходят для тонкой настройки модели.
Интеграция с RL-средой Atropos
Пакетная обработка может напрямую генерировать обучающие данные, совместимые с Atropos:
Пример
python batch_runner.py \
--dataset_file=data/coding_tasks.jsonl \
--run_name=atropos_run \
--model=nous-hermes-3.1 \
--num_workers=8 \
--reasoning_effort=high
# Выходной файл trajectories.jsonl можно напрямую использовать как входные данные для обучения Atropos