Делегирование субагентам и пакетная обработка в Hermes Agent

В этой главе представлены две возможности параллельной обработки в Hermes: делегирование субагентам, позволяющее главному агенту распределять задачи между несколькими субагентами для параллельного выполнения, и система пакетной обработки, которая может запускать агентов параллельно на сотнях промптов и генерировать структурированные обучающие данные.


Делегирование субагентам и параллелизм

Hermes поддерживает делегирование задач от главного агента субагентам, обеспечивая параллельные рабочие процессы.

Субагенты черезdelegationРеализация набора инструментов:

Пример

# Путь к файлу: ~/.hermes/config.yaml
# Убедитесь, что набор инструментов delegation включён
toolsets
:
 - delegation

Главный агент используетspawn_agentилиspawn_parallelАгент, производный от инструмента.

Следующий псевдокод иллюстрирует механизм параллельного делегирования:

Пример

# Механизм параллельного делегирования Agent в сессиях (псевдокод, объясняющий принцип)
# spawn_parallel запускает несколько субагентов одновременно, каждый выполняется независимо.

spawn_parallel([
  {"prompt": "Проанализируй данные продаж за Q1 и сформируй отчёт о тенденциях"},
  {"prompt": "Проанализируй данные продаж за Q2 и сформируй отчёт о тенденциях"},
  {"prompt": "Проанализируй данные продаж за Q3 и сформируй отчёт о тенденциях"}
])
# Три субагента работают параллельно, результаты агрегируются и возвращаются главному Agent

Фоновая задача

Запускайте фоновые задачи прямо в сессии:

Пример

# Запуск фоновой задачи в сессии
/background проверь все серверы и сообщи о простоях

Совместная работа нескольких агентов в Kanban

Набор инструментов Kanban обеспечивает более структурированное взаимодействие нескольких агентов — агент-оркестратор распределяет задачи по доске, а несколько рабочих агентов забирают и выполняют их:

Пример

# Включить набор инструментов kanban (требуется явное включение; all/* не включит его автоматически)
hermes tools enable kanban

# Добавьте описания ролей в профиль, чтобы оркестратор знал возможности каждого агента.
hermes profile create researcher \
  --description "Умеет читать исходный код и внешнюю документацию, создавать исследовательские отчёты"
hermes profile create coder \
  --description "Умеет реализовывать функции, исправлять ошибки и писать тесты"

Набор инструментов Kanban необходимо включить явно — даже all или * не включат его автоматически. Это сделано намеренно, потому что взаимодействие нескольких агентов расходует больше токенов.


Пакетная обработка и генерация данных для RL-обучения

Пакетная обработка позволяет запускать агентов параллельно на сотнях или тысячах запросов, генерируя структурированные данные траекторий — в основном используется для генерации данных для дообучения модели и оценки.

Быстрый старт

Пример

# Подготовьте набор данных промптов в формате JSONL
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": "Напишите функцию на Python для поиска палиндромов"}
{"prompt": "DebugThisError", "cwd": "/home/user/project", "docker_image": "python:3.12"}

Основные параметры

ПараметрЗначение по умолчаниюОписание
--dataset_fileОбязательныйПуть к набору данных JSONL
--batch_sizeОбязательныйКоличество промптов на пакет
--run_nameОбязательныйИмя запуска (используется для выходного каталога и возобновления из контрольной точки)
--modelclaude-sonnet-4.6Используемые модели
--num_workers4Количество параллельных рабочих процессов
--max_turns10Максимальное количество раундов вызова инструментов на промпт
--distribution"default"Распределение набора инструментов (случайная выборка различных комбинаций инструментов)
--reasoning_effort—Усилие рассуждения: none/minimal/low/medium/high/xhigh
--resumefalseПродолжить с контрольной точки

Структура вывода

Пакетная обработка создаёт следующую структуру каталогов:

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:

Пример

# Сгенерировать обучающие данные, совместимые с 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
Другие расширения