Делегирование и параллельная работа

Hermes может создавать изолированные дочерние агенты для параллельной работы над задачами. Каждый под-агент получает собственный диалог, сессию терминала и набор инструментов. Обратно возвращается только итоговое резюме — промежуточные вызовы инструментов никогда не попадают в ваше контекстное окно.

Полное описание возможностей см. в разделе Делегирование под-агентов.


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

Хорошие кандидаты для делегирования:

Когда использовать другое:


Паттерн: Параллельное исследование

Исследуйте три темы одновременно и получите структурированные резюме:

Research these three topics in parallel:

1. Current state of WebAssembly outside the browser

2. RISC-V server chip adoption in 2025

3. Practical quantum computing applications

Focus on recent developments and key players.

За кулисами Hermes использует:

delegate_task(tasks=[
    {
        "goal": "Research WebAssembly outside the browser in 2025",
        "context": "Focus on: runtimes (Wasmtime, Wasmer), cloud/edge use cases, WASI progress",
        "toolsets": ["web"]
    },
    {
        "goal": "Research RISC-V server chip adoption",
        "context": "Focus on: server chips shipping, cloud providers adopting, software ecosystem",
        "toolsets": ["web"]
    },
    {
        "goal": "Research practical quantum computing applications",
        "context": "Focus on: error correction breakthroughs, real-world use cases, key companies",
        "toolsets": ["web"]
    }
])

Все три запускаются одновременно. Каждый под-агент независимо ищет в интернете и возвращает резюме. Затем родительский агент собирает их в единый связный обзор.


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

Делегируйте проверку безопасности под-агенту с чистым контекстом, который подходит к коду без предубеждений:

Review the authentication module at src/auth/ for security issues.
Check for SQL injection, JWT validation problems, password handling,
and session management. Fix anything you find and run the tests.

Ключевой момент — поле context: оно должно включать всё, что нужно под-агенту:

delegate_task(
    goal="Review src/auth/ for security issues and fix any found",
    context="""Project at /home/user/webapp. Python 3.11, Flask, PyJWT, bcrypt.
    Auth files: src/auth/login.py, src/auth/jwt.py, src/auth/middleware.py
    Test command: pytest tests/auth/ -v
    Focus on: SQL injection, JWT validation, password hashing, session management.
    Fix issues found and verify tests pass.""",
    toolsets=["terminal", "file"]
)

warning Проблема контекста Под-агенты абсолютно ничего не знают о вашем разговоре. Они начинают с нуля. Если вы делегируете "исправь ошибку, которую мы обсуждали", у под-агента нет ни малейшего представления, о какой ошибке речь. Всегда явно передавайте пути к файлам, сообщения об ошибках, структуру проекта и ограничения.


Паттерн: Сравнение альтернатив

Оцените несколько подходов к одной и той же задаче параллельно, затем выберите лучший:

I need to add full-text search to our Django app. Evaluate three approaches
in parallel:

1. PostgreSQL tsvector (built-in)

2. Elasticsearch via django-elasticsearch-dsl

3. Meilisearch via meilisearch-python

For each: setup complexity, query capabilities, resource requirements,
and maintenance overhead. Compare them and recommend one.

Каждый под-агент исследует один вариант независимо. Благодаря изоляции отсутствует перекрёстное загрязнение — каждая оценка опирается на собственные достоинства. Родительский агент получает все три резюме и проводит сравнение.


Паттерн: Рефакторинг нескольких файлов

Разделите крупную задачу рефакторинга между параллельными под-агентами, каждый из которых обрабатывает свою часть кодовой базы:

delegate_task(tasks=[
    {
        "goal": "Refactor all API endpoint handlers to use the new response format",
        "context": """Project at /home/user/api-server.
        Files: src/handlers/users.py, src/handlers/auth.py, src/handlers/billing.py
        Old format: return {"data": result, "status": "ok"}
        New format: return APIResponse(data=result, status=200).to_dict()
        Import: from src.responses import APIResponse
        Run tests after: pytest tests/handlers/ -v""",
        "toolsets": ["terminal", "file"]
    },
    {
        "goal": "Update all client SDK methods to handle the new response format",
        "context": """Project at /home/user/api-server.
        Files: sdk/python/client.py, sdk/python/models.py
        Old parsing: result = response.json()["data"]
        New parsing: result = response.json()["data"] (same key, but add status code checking)
        Also update sdk/python/tests/test_client.py""",
        "toolsets": ["terminal", "file"]
    },
    {
        "goal": "Update API documentation to reflect the new response format",
        "context": """Project at /home/user/api-server.
        Docs at: docs/api/. Format: Markdown with code examples.
        Update all response examples from old format to new format.
        Add a 'Response Format' section to docs/api/overview.md explaining the schema.""",
        "toolsets": ["terminal", "file"]
    }
])
Каждый под-агент получает собственную сессию терминала. Они могут работать в одном и том же каталоге проекта, не мешая друг другу — при условии, что редактируют разные файлы. Если два под-агента могут затронуть один и тот же файл, обработайте этот файл самостоятельно после завершения параллельной работы.

Паттерн: Сбор, затем анализ

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

# Step 1: Mechanical gathering (execute_code is better here — no reasoning needed)
execute_code("""
from hermes_tools import web_search, web_extract

results = []
for query in ["AI funding Q1 2026", "AI startup acquisitions 2026", "AI IPOs 2026"]:
    r = web_search(query, limit=5)
    for item in r["data"]["web"]:
        results.append({"title": item["title"], "url": item["url"], "desc": item["description"]})

# Extract full content from top 5 most relevant
urls = [r["url"] for r in results[:5]]
content = web_extract(urls)

# Save for the analysis step
import json
with open("/tmp/ai-funding-data.json", "w") as f:
    json.dump({"search_results": results, "extracted": content["results"]}, f)
print(f"Collected {len(results)} results, extracted {len(content['results'])} pages")
""")

# Step 2: Reasoning-heavy analysis (delegation is better here)
delegate_task(
    goal="Analyze AI funding data and write a market report",
    context="""Raw data at /tmp/ai-funding-data.json contains search results and
    extracted web pages about AI funding, acquisitions, and IPOs in Q1 2026.
    Write a structured market report: key deals, trends, notable players,
    and outlook. Focus on deals over $100M.""",
    toolsets=["terminal", "file"]
)

Это часто самый эффективный паттерн: execute_code дёшево выполняет 10+ последовательных вызовов инструментов, а затем под-агент выполняет одну дорогостоящую задачу рассуждения с чистым контекстом.


Выбор набора инструментов

Выбирайте наборы инструментов в зависимости от того, что нужно под-агенту:

Тип задачи Набор инструментов Зачем
Веб-исследования ["web"] только web_search + web_extract
Работа с кодом ["terminal", "file"] Доступ к shell + операции с файлами
Полный стек ["terminal", "file", "web"] Всё, кроме обмена сообщениями
Анализ только для чтения ["file"] Только чтение файлов, без shell

Ограничение наборов инструментов держит под-агента сфокусированным и предотвращает случайные побочные эффекты (например, исследовательский под-агент, выполняющий shell-команды).


Ограничения

Настройка параллелизма и глубины

Параметр По умолчанию Диапазон Эффект
max_concurrent_children 3 >=1 Размер параллельного пакета на один вызов delegate_task
max_spawn_depth 1 1-3 Сколько уровней делегирования могут порождать дальнейших агентов

Пример: запуск 30 параллельных рабочих с вложенными под-агентами:

delegation:
  max_concurrent_children: 30
  max_spawn_depth: 2

Советы

Будьте конкретны в целях. "Исправь ошибку" — слишком размыто. "Исправь TypeError в api/handlers.py на строке 47, где process_request() получает None от parse_body()" даёт под-агенту достаточно информации для работы.

Указывайте пути к файлам. Под-агенты не знают структуру вашего проекта. Всегда указывайте абсолютные пути к соответствующим файлам, корень проекта и команду для запуска тестов.

Используйте делегирование для изоляции контекста. Иногда нужен свежий взгляд. Делегирование заставляет вас чётко сформулировать проблему, а под-агент подходит к ней без допущений, накопившихся в вашем разговоре.

Проверяйте результаты. Резюме под-агента — это всего лишь резюме. Если под-агент говорит "исправил ошибку, тесты проходят", проверьте это, запустив тесты самостоятельно или прочитав diff.


Полную справочную информацию о делегировании — все параметры, интеграцию с ACP и расширенную настройку — см. в разделе Делегирование под-агентов.