РЕАЛИЗОВАТЬ HIERARCHICAL COORDINATION (SUPERVISOR → 3 WORKER)
ТЕХНИЧЕСКОЕ ЗАДАНИЕ: РЕАЛИЗОВАТЬ HIERARCHICAL COORDINATION (SUPERVISOR → 3 WORKER)
1. Цель задачи
Разработать прототип иерархической системы с одним Supervisor-агентом и тремя Worker-агентами, в которой Supervisor декомпозирует пользовательскую задачу на подзадачи и распределяет их между воркерами, а затем собирает и объединяет результаты. Основной фокус — на корректной логической декомпозиции задачи, эффективной коммуникации между агентами и робастной сборке финального ответа.
Ключевой результат Работающая система, способная принять сложное задание (например, «Проанализируйте трёх конкурентов компании X по заданным критериям»), разбить его на три независимых подзадачи, выполнить их параллельно и сформировать единый отчёт. Декомпозиция должна быть логичной, без избыточности или пропусков.
2. Исходные данные
| Что нужно | Откуда взять |
|---|---|
| Описание задачи для декомпозиции (не менее 3-х примеров) | Придумать самостоятельно: например, «Сравнить три ноутбука по цене, производительности и надёжности», «Подготовить аналитику по трём отделам компании», «Сгенерировать три варианта логотипа с описанием» |
| API-ключ LLM (OpenAI или совместимый) | Личный аккаунт / переменная окружения OPENAI_API_KEY |
| Библиотеки Python | pip install openai langchain langchain-openai pydantic asyncio (или аналоги) |
| Среда выполнения | Локальная IDE (VS Code / PyCharm) или Jupyter Notebook |
Если нет реального инструмента — симулируем:
- Используем локальную LLM через Ollama (например, ollama run llama3) и библиотеку
langchain-ollama. - В качестве «воркеров» можно написать заглушки, которые просто возвращают фиксированный ответ для проверки логики декомпозиции.
- Для имитации Supervisor-агента без LLM — написать простой парсер, который ищет ключевые слова и на их основе делит задачу (но это не рекомендуется, лучше минимальный LLM-агент).
3. Технологический стек
| Компонент | Инструменты | Назначение |
|---|---|---|
| LLM (языковая модель) | OpenAI GPT-4o / GPT-4o-mini (или через Ollama) | Генерация декомпозиции, выполнение подзадач, сборка |
| Фреймворк для агентов | LangChain (AgentExecutor, Tool), LiteLLM | Организация цепочек вызовов, промптов |
| Асинхронное выполнение | asyncio, concurrent.futures | Параллельный запуск воркеров |
| Валидация данных | Pydantic (v2) | Проверка формата декомпозиции и ответов |
| Логирование | logging или structlog | Отслеживание работы агентов |
| Формат сообщений | JSON | Передача заданий и результатов |
4. Этапы выполнения
Этап 1: Проектирование архитектуры и протокола (40 мин)
Действия
- Определить роли агентов:
- Спроектировать формат сообщений (Pydantic модели):
- Продумать механизм повторных попыток при сбое воркера (retry + fallback).
- Нарисовать диаграмму потоков (диаграмма последовательности, включить в README).
Ожидаемый результат этапа Документ (текстовый или PDF) с описанием архитектуры и протокола, а также Pydantic модели в файле agents/models.py.
Этап 2: Реализация Supervisor-агента (1 ч 30 мин)
Действия
- Написать системный промпт для Supervisor, который явно предписывает:
- Проанализировать задачу пользователя.
- Разбить на ровно три логически независимые подзадачи (если задача не делится естественно — придумать три аспекта).
- Для каждой подзадачи указать её описание, формат ожидаемого результата.
- Вернуть результат в JSON-формате с ключами
subtasks(список из 3 объектов).
- Реализовать функцию
supervisor_decompose(user_task: str) -> list[Вики/Subtask|Subtask, которая вызывает Вики/GPT-4o|LLM с этим промптом и парсит ответ через Вики/Pydantic|Pydantic. - Добавить валидацию: если подзадач не 3 — повторить запрос (до 2 попыток).
- Реализовать метод collect_and_synthesize(results: list[WorkerResult]) -> FinalReport, который принимает результаты воркеров и формирует итоговый ответ — также через отдельный вызов LLM с инструкцией объединить.
- Включить обработку ошибок: таймаут на LLM-вызов (10 секунд), логирование каждого шага.
Ожидаемый результат этапа Файл agents/supervisor.py с классами и функциями для декомпозиции и синтеза. Возможность вызвать Supervisor из отдельного скрипта и получить JSON с подзадачами.
Этап 3: Реализация Worker-агентов (1 ч)
Действия
- Создать базовый класс
BaseWorkerс атрибутамиname: str,llm_interface. - Реализовать метод execute(subtask: Subtask) -> WorkerResult:
- Создать три экземпляра с разными
name(Worker-Alpha, Worker-Beta, Worker-Gamma) для имитации разных экспертиз. В промпте можно добавить различие, например, стиль ответа (аналитический, креативный, фактологический). - Написать тестовый вызов с фиктивной подзадачей.
Ожидаемый результат этапа Файл agents/worker.py с классом Worker, способным выполнять подзадачу и возвращать результат.
Этап 4: Интеграция и координация (1 ч 30 мин)
Действия
- Создать главный класс
HierarchicalSystem, который:- Инициализирует одного Supervisor и трёх Workers.
- Имеет метод
run(user_task: str) -> FinalReport.
- В методе
run: - Реализовать обработку случая, если какой-то Worker не ответил (таймаут 15 секунд) — заполнить результат заглушкой.
- Добавить логирование хода работы (уровень INFO): декомпозиция, старт воркеров, получение результатов, финальный ответ.
- Написать скрипт
main.py, который принимает задачу из аргументов командной строки или из стандартного ввода, запускает систему и выводит итоговый отчёт.
Ожидаемый результат этапа Рабочая программа, которая может быть запущена командой python main.py "Моя сложная задача" и выводит финальный отчёт.
Этап 5: Тестирование и оценка декомпозиции (1 ч)
Действия
- Подготовить 3 тестовые задачи разной сложности (см. п.2 «Исходные данные»).
- Запустить систему на каждой задаче, записать:
- Исходная задача.
- Сгенерированные подзадачи (декомпозиция).
- Ответы воркеров (сырые).
- Финальный отчёт.
- Оценить качество декомпозиции по критериям:
- Подзадачи не пересекаются по смыслу.
- Покрывают все аспекты исходной задачи.
- Каждая подзадача выполнима одним агентом (без дополнительной координации).
- Если декомпозиция неудовлетворительна — скорректировать промпт Supervisor (итеративно).
- Создать папку
tests/с тремя JSON-файлами, содержащими входные задачи и ожидаемый паттерн декомпозиции. - Написать unit-тесты на валидацию моделей и обработку ошибок (
pytest).
Ожидаемый результат этапа Оценка качества декомпозиции в виде краткого отчёта (можно включить в README). Папка tests/ с unit-тестами и примерами.
5. Критерии приемки (Definition of Done)
- Supervisor на основе LLM корректно декомпозирует задачу ровно на 3 подзадачи, логически связанные с исходной.
- Worker-агенты выполняют свои подзадачи параллельно (общее время выполнения системы не превышает
max(worker_time) + overhead). - Финальный отчёт (FinalReport) содержит введение от Supervisor, по одному разделу от каждого Worker и заключение.
- Код системы модульный: классы
Supervisor,WorkerиHierarchicalSystemнаходятся в отдельных файлах в пакетеagents. - Реализована обработка ошибок: таймауты, повторные попытки декомпозиции (до 2 раз), fallback-ответы при сбое воркера.
- В репозитории присутствует README с описанием архитектуры, инструкцией по запуску и примерами.
- Unit-тесты (pytest) проходят минимум на 80% покрытия ключевой логики (декомпозиция, валидация, сборка).
6. Ожидаемый результат
- Файл с кодом:
main.py(точка входа),agents/__init__.py,agents/models.py,agents/supervisor.py,agents/worker.py,agents/system.py. - Файл с тестами:
tests/test_models.py,tests/test_system.py,tests/fixtures/. - Файл
README.mdс описанием, диаграммой последовательности (ASCII или ссылка на файл), инструкцией по запуску, примерами задач и ожидаемыми результатами. - Опционально Видеодемонстрация (1-2 минуты) работы системы.
7. Возможные сложности и их решение
| Сложность | Решение |
|---|---|
| LLM не всегда выдаёт ровно 3 подзадачи (2 или 4) | Ужесточить промпт + добавить валидацию и повторный запрос с обратной связью («Должно быть ровно 3 подзадачи. Исправь.») |
| Большое время выполнения из-за последовательных вызовов | Использовать asyncio.gather для параллельных воркеров; ограничить модель на более быстрой (например, GPT-4o-mini) |
| Декомпозиция получается поверхностной или нерелевантной | Улучшить системный промпт Supervisor: добавить требование указывать критерии, по которым подзадача выделена |
| Worker-агенты возвращают неструктурированный текст | Задать формат ответа в промпте (JSON) и использовать Pydantic для парсинга; при неудаче — повторить запрос |
| API ключ закончился или превышен лимит | Использовать локальную LLM (Ollama) с той же архитектурой; переключение через переменную окружения LLM_BACKEND |
8. Бюджет времени (оценка)
| Этап | Время (часы) |
|---|---|
| Этап 1: Проектирование архитектуры и протокола | 0.7 |
| Этап 2: Реализация Supervisor-агента | 1.5 |
| Этап 3: Реализация Worker-агентов | 1.0 |
| Этап 4: Интеграция и координация | 1.5 |
| Этап 5: Тестирование и оценка | 1.0 |
| Итого | 5.7 |
Примечание Для первого выполнения задачи (без опыта работы с hierarchical multi-agent) рекомендуется заложить дополнительно 2 часа на отладку и коррекцию промптов.
9. Связанные вопросы из базы знаний
| Вопрос | Тема |
|---|---|
| 12 | Основы multi-agent систем |
| 45 | Проектирование иерархической архитектуры |
| 78 | Промпт-дизайн для ролевых агентов |
| 123 | Обработка ошибок в агентах с LLM |
| 156 | Асинхронное выполнение задач (asyncio) |
| 204 | Валидация данных с Pydantic |
| 267 | Координация с использованием Message Bus |
| 312 | Оценка качества декомпозиции задачи |
| 458 | Паттерны повторных попыток (retry) |
| 509 | Тестирование LLM-based систем |
10. Чек-лист самопроверки
- Я проверил, что YAML frontmatter корректен (теги, задача).
- В ТЗ описана конкретная, измеримая цель (Ключевой результат).
- Каждый этап содержит точные действия и ожидаемые результаты.
- Технологический стек указан реально (можно выполнить без коммерческих лицензий).
- Критерии приемки можно проверить автоматизированно или вручную за 5 минут.
- Чек-лист самопроверки заполняется в конце выполнения.