agent-control-center/docs/patterns/WORKER_ORCHESTRATION.md

12 KiB
Raw Permalink Blame History

Worker Orchestration Patterns

Версия: 0.1.0-draft Дата: 2026-07-20 Статус: Draft Зависит от: SPECIFICATION.md, ARCHITECTURE.md, docs/adapters/HERMES.md

Этот документ описывает паттерны оркестрации через worker-профили Hermes Agent. Реализация запрещена до G0/G1 и утверждения оператором.

1. Обзор

Worker-профили Hermes Agent (worker-code, worker-fast, worker-research, worker-review) обеспечивают изолированное выполнение специализированных задач. Оркестратор (default профиль) маршрутизирует подзадачи, управляет fallback'ами и агрегирует результаты.

Архитектура оркестрации:

Пользователь → default (оркестратор)
                    ├──→ worker-code    (opencode-go / kimi-k2.7-code)
                    ├──→ worker-fast    (fireworks / grok-4.5)
                    ├──→ worker-research (gemini / gemini-3-flash-preview)
                    └──→ worker-review   (nvidia / deepseek-v4-pro)

2. Маршрутизация задач

2.1 Матрица маршрутизации

Тип задачи Первичный профиль Вторичный (fallback) Критерий выбора
Генерация кода worker-code worker-fast Задача содержит "напиши код", "реализуй", "создай файл"
Рефакторинг worker-code worker-review Задача требует изменения существующего кода с сохранением поведения
Отладка worker-code worker-research Задача содержит трассировку, ошибку, stack trace
Быстрый ответ worker-fast worker-code Задача простая, не требует сложного рассуждения
Исследование worker-research worker-code Задача требует анализа документации, поиска, чтения
Code Review worker-review worker-code Задача проверки качества/безопасности кода
Аудит безопасности worker-review worker-research Задача анализа уязвимостей, проверки политик
Планирование default (in-process) worker-research Задача требует стратегического рассуждения
Сложный анализ worker-research worker-review Задача с большим контекстом, требует synthesis

2.2 Алгоритм маршрутизации

1. Классифицировать задачу по типу (NL-эвристика)
2. Определить первичный профиль из матрицы
3. Проверить health первичного профиля
4. Если health OK → delegate_task(profile=primary, ...)
5. Если health DEGRADED/OFFLINE → проверить fallback
6. Если fallback OK → delegate_task(profile=secondary, ...)
7. Если оба недоступны → выполнить задачу в default с предупреждением

Маршрутизация MUST учитывать capabilities профиля: если задача требует browser, а worker-fast не имеет этого инструмента, маршрутизация не должна выбирать этот профиль.

3. Fallback-цепочки

3.1 Модель fallback'а

При отказе провайдера (rate limit, timeout, model unavailable) Hermes использует внутренний механизм credential pools (см. CREDENTIAL_POOLS.md). На уровне оркестратора реализуется дополнительный fallback:

worker-code (kimi-k2.7-code) → [ОТКАЗ]
  ├──→ worker-fast (grok-4.5)     — быстрая альтернатива для кода
  ├──→ worker-code (deepseek-v4-pro, nvidia) — та же роль, другой провайдер
  └──→ default (deepseek-v4-pro)  — выполнить in-process

3.2 Стратегии fallback'а

Стратегия Описание Применение
Role-preserving Та же роль, другой провайдер worker-code + nvidia вместо opencode-go
Downgrade Более простой профиль worker-codeworker-fast
Escalate Более мощный профиль worker-fastworker-code
In-process Выполнение в оркестраторе Когда все worker'ы недоступны

3.3 Политика повторных попыток

Ошибка Действие Макс. повторов Задержка
Rate limit (429) Ждать + повторить тот же профиль 3 Exponential: 1s, 4s, 16s
Timeout (504) Fallback на вторичный профиль 1
Model unavailable (503) Fallback на вторичный профиль 0
Auth error (401/403) Не повторять; alert оператору 0
Unknown error Fallback → in-process 1 5s

4. Параллельное делегирование (Fan-out)

4.1 Паттерн

delegate_task(tasks=[...]) запускает дочерние задачи параллельно:

{
  "tasks": [
    {"goal": "Реализовать API endpoint /users", "profile": "worker-code"},
    {"goal": "Написать тесты для /users endpoint", "profile": "worker-code"},
    {"goal": "Обновить документацию API", "profile": "worker-fast"}
  ]
}

4.2 Ограничения

Параметр Значение по умолчанию Описание
max_concurrent_children 3 Максимум параллельных дочерних задач
max_spawn_depth 2 Максимальная глубина вложенности оркестраторов
max_iterations 50 Максимум итераций на дочернюю задачу

4.3 Сбор результатов

Оркестратор SHOULD:

  1. Дождаться завершения всех дочерних задач (или таймаута)
  2. Агрегировать результаты в порядке исходного списка
  3. При частичном отказе — вернуть успешные результаты + ошибки для упавших
  4. Предложить пользователю retry для упавших задач

5. Передача контекста

5.1 Механизмы

Механизм Формат Применение
goal + context Markdown/JSON Основной механизм: цель + структурированный контекст
Файловая система Файлы в рабочей директории Общие артефакты (спецификации, результаты)
memory tool MEMORY.md Долгоживущие факты/решения между сессиями
session_search FTS5-поиск Поиск релевантной истории

5.2 Формат контекста

{
  "goal": "Реализовать модуль аутентификации",
  "context": {
    "objective": "JWT-based authentication module",
    "acceptance_criteria": ["Login endpoint", "Token refresh", "Password reset"],
    "constraints": {"framework": "FastAPI", "database": "PostgreSQL"},
    "decisions": ["Use python-jose for JWT", "Use passlib for hashing"],
    "artifact_refs": ["specs/auth-spec.md", "schemas/user.sql"],
    "completed_work": ["Database schema created", "User model defined"],
    "pending_work": ["Implement /login", "Implement /refresh"],
    "errors": []
  }
}

6. Health-check worker-профилей

6.1 Процедура

Health-check MUST выполняться:

  • Перед каждой делегацией задачи
  • Периодически (раз в 5 минут) для фонового мониторинга
# Проверка конкретного профиля
hermes --profile worker-code chat -q "respond with 'OK'" --quiet

# Проверка статуса провайдера
hermes --profile worker-code doctor

6.2 Состояния

Состояние Критерий Действие
ONLINE Успешный ping < 5s Нормальная маршрутизация
DEGRADED Успешный ping, но > 5s или retries Маршрутизация с предупреждением, приоритет fallback
OFFLINE Ping failed / timeout 30s Исключить из маршрутизации, алерт оператору
INCOMPATIBLE Adapter version mismatch Заблокировать запуск, требуется upgrade

6.3 Метрики health-check

Метрика Порог WARNING Порог CRITICAL
Ping latency > 5s > 30s (timeout)
Error rate (5 min) > 10% > 25%
Token usage rate > 80% квоты > 95% квоты
Active runs > 5 > 10

7. Паттерны обработки ошибок

7.1 Классификация ошибок делегирования

Код Ошибка Действие
DELEGATION_TIMEOUT Дочерняя задача превысила max_iterations Возврат частичного результата; предложить разбить задачу
DELEGATION_PROFILE_OFFLINE Профиль недоступен Fallback на альтернативный профиль
DELEGATION_RATE_LIMITED Исчерпана квота провайдера Fallback на профиль с другим провайдером
DELEGATION_TOOL_ERROR Ошибка инструмента в дочерней задаче Повтор с уточнённым контекстом
DELEGATION_DEPTH_EXCEEDED Превышена max_spawn_depth Выполнить задачу in-process

7.2 Таймауты

Стадия Таймаут по умолчанию Описание
Запуск профиля 10s Время на инициализацию Hermes
Ответ на goal 60s Время до первого осмысленного ответа
Полное выполнение 300s (5 min) Общее время на задачу
Сбор результатов 30s Таймаут после завершения задачи

8. Ссылки