Паттерны делегирования

Когда делегировать

Делегирование подзадач субагентам — ключевая возможность Hermes Agent. Оно позволяет выполнять несколько задач параллельно, изолировать контекст и экономить итерации основного агента. Вот основные ситуации, когда делегирование уместно:

  • Параллельные независимые задачи — когда нужно исследовать несколько тем, проверить несколько файлов или протестировать несколько подходов одновременно.
  • Изоляция контекста — когда задача требует «свежего взгляда» без накопленных в беседе предположений.
  • Мультифайловая работа — рефакторинг затрагивающий множество файлов, где каждый субагент отвечает за свой набор файлов.
  • Ресурсоёмкий анализ — когда задача требует длительного рассуждения и не должна загромождать контекст основного агента.

Паттерн: параллельный ресёрч

Самый распространённый паттерн. Запускаете несколько субагентов одновременно, каждый изучает свой аспект темы. Пример: один субагент ищет информацию о ценах конкурентов, другой — об отзывах пользователей, третий — о технических особенностях продукта.

Ключевые правила:

  • Каждый субагент получает чёткую цель и список источников.
  • Используйте toolset ["web"] для веб-исследований — это ограничивает субагента только поиском и извлечением контента.
  • Результаты собираются автоматически, основной агент синтезирует итоговый отчёт.

Паттерн: ревью кода

Делегируйте ревью кода субагенту с toolset ["file"] (только чтение, без shell). Субагент анализирует файлы и возвращает список проблем, не имея возможности случайно изменить что-либо. Основной агент затем принимает решение о том, какие изменения вносить.

Для более глубокого ревью с запуском тестов используйте ["terminal", "file"] — субагент сможет запустить тесты и линтеры.

Паттерн: мультифайловый рефакторинг

Когда нужно обновить десятки файлов по одному шаблону — разбейте работу между субагентами. Каждый получает свой набор файлов с чётким описанием изменений:

  • Цель — конкретное описание, что изменить (не «пофикси баг», а «в строке 47 файла api/handlers.py замени вызов old_func на new_func»).
  • Контекст — абсолютные пути к файлам, корень проекта, команда запуска тестов.
  • Toolsets["terminal", "file"] для работы с кодом.

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

Паттерн: сбор данных и анализ

Двухшаговый подход. Сначала execute_code выполняет механический сбор данных (десятки последовательных запросов), затем субагент проводит аналитическую работу с чистым контекстом. Это часто самый эффективный паттерн — код дёшево обрабатывает рутинные запросы, а субагент фокусируется на рассуждениях.

Настройка инструментов (Toolsets)

Выбирайте набор инструментов в зависимости от задачи:

  • ["web"] — только веб-поиск и извлечение контента.
  • ["terminal", "file"] — работа с кодом: shell и файловые операции.
  • ["terminal", "file", "web"] — полный набор для комплексных задач.
  • ["file"] — только чтение файлов, без shell (для анализа).

Ограничение toolsets удерживает субагента в фокусе и предотвращает случайные побочные эффекты.

Ограничения и настройка

  • По умолчанию 3 параллельных субагента — настраивается через max_concurrent_children в config.yaml.
  • Каждый субагент — отдельная сессия с собственным терминалом и рабочей директорией.
  • Нет истории беседы — субагент видит только цель и контекст, переданные при вызове.
  • 50 итераций по умолчанию — для простых задач можно уменьшить через max_iterations.
  • Не durable — если основной агент прерван, все дочерние задачи отменяются. Для долгосрочной работы используйте cronjob или фоновые процессы.

Советы

  • Будьте конкретны в целях — «пофикси баг» слишком расплывчато. «Исправь TypeError в api/handlers.py строка 47» — достаточно для работы.
  • Указывайте абсолютные пути — субагенты не знают структуру вашего проекта.
  • Проверяйте результаты — субагент возвращает саммари. Если он говорит «тесты проходят», проверьте это сами.
  • Используйте делегирование для изоляции контекста — формулирование задачи для субагента заставляет вас чётко артикулировать проблему.