Паттерны — это язык поверх фреймворков

Заметил повторение? Supervisor в LangGraph, GroupChatManager в AutoGen, hierarchical process в CrewAI — это одна и та же идея, выраженная по-разному. Паттерн координации — это абстракция над инструментом: описание как устроена коммуникация и принятие решений в команде, независимо от того, чем ты её собираешь.

Знать паттерны важнее, чем знать API конкретного фреймворка. API меняются и устаревают, а паттерны — устойчивый словарь: «здесь нам нужен Supervisor», «а тут лучше Pipeline». Этот раздел даёт такой словарь. Начинаем с Supervisor — он закрывает огромную долю реальных задач.

ℹ️ Четыре паттерна раздела

Мы разберём четыре способа координации: Supervisor (центр раздаёт), Pipeline (конвейер), Swarm (агенты передают управление друг другу) и Debate (спорят ради истины). Плюс отдельно — как они обмениваются данными (shared state vs message passing). Supervisor — первый и самый ходовой.

Как устроен Supervisor

В основе — топология звезды: в центре координатор (supervisor), по краям специалисты (workers). Вся коммуникация идёт через центр. Supervisor получает задачу, разбивает на подзадачи, выбирает исполнителя для каждой, отдаёт ему работу, получает результат — и решает следующий шаг: делегировать ещё или закончить.

100%
колёсико — масштаб  ·  зажать и тянуть — перемещение
задача SUPERVISOR разбивает · делегирует · собирает итог готово → worker A поиск worker B анализ worker C текст делегирует отчитывается звезда: всё через центр · воркеры не общаются напрямую · supervisor решает

Ключевое свойство: воркеры не общаются между собой — только с супервайзером. Это и сила (централизованный контроль, ясная ответственность), и ограничение (центр — узкое место). Supervisor мыслит как руководитель: он держит общую картину, а специалисты делают узкую работу, не зная о существовании друг друга.

Сильные и слабые стороны

✅ Сильные стороны
  • централизованный контроль и ясная логика
  • легко добавлять воркеров (масштабируемость)
  • понятная ответственность: за всё отвечает центр
  • просто отлаживать — один «дирижёр»
❌ Слабые стороны
  • центр — узкое место и точка отказа
  • лишний «хоп» через супервайзера на каждом шаге
  • при многих воркерах координатор перегружается
  • качество держится на «уме» супервайзера
Перегруз центра лечится иерархией

Когда воркеров становится слишком много для одного супервайзера, его делят: вводят супервайзеров над супервайзерами (команды команд). Это та же иерархия, что мы видели в уроках про subgraphs и Supervisor модуля 03. Начинай с одного уровня; иерархию добавляй, только когда координатор реально захлёбывается.

Один паттерн — три реализации

Главная мысль раздела: паттерн один, инструменты разные. Покажем Supervisor в трёх знакомых фреймворках — обрати внимание, что идея везде идентична.

Supervisor в трёх фреймворках (идея одна)
python
# --- LangGraph (модуль 03): узел-маршрутизатор + условные рёбра ---
builder.add_node("supervisor", supervisor)
for w in WORKERS:
    builder.add_edge(w, "supervisor")          # воркер → назад в центр
builder.add_conditional_edges("supervisor", route,
    {**{w: w for w in WORKERS}, "FINISH": END})

# --- AutoGen: GroupChatManager выбирает спикера ---
manager = GroupChatManager(groupchat=groupchat, llm_config=llm_config)
user_proxy.initiate_chat(manager, message="...")

# --- CrewAI: hierarchical process с менеджером ---
Crew(agents=[...], tasks=[...], process=Process.hierarchical,
     manager_llm=ChatOpenAI(model="gpt-4o"))

# ВО ВСЕХ ТРЁХ: центральный координатор раздаёт работу воркерам,
#               собирает результат и решает следующий шаг

Видишь? Разный синтаксис — один паттерн. Поняв Supervisor как идею (центр делегирует, воркеры отчитываются, центр решает), ты реализуешь его на любом инструменте, даже на голом коде с if-ами. Это и есть ценность мышления паттернами.

Когда брать Supervisor

Supervisor — отличный выбор по умолчанию для команд, где нужна централизованная координация:

  • Динамическая маршрутизация: кто работает следующим, зависит от промежуточного результата — центр решает в рантайме.
  • Разные специалисты: есть набор узких ролей, и под каждую подзадачу нужно подобрать подходящего.
  • Нужен контроль и аудит: все решения проходят через один узел — легко логировать и проверять.
  • Возможны повторы/доработки: супервайзер может отправить задачу тому же воркеру ещё раз.

А вот если работа — строго линейная (A→B→C без ветвлений), центр избыточен: проще Pipeline (следующий урок). И если воркеры должны сами передавать управление по контексту — это Swarm. Supervisor — про централизованное решение «кто следующий».

⚠️ Не делай супервайзера без условия завершения

Как и в каждой реализации (FINISH в LangGraph/AutoGen, лимиты в CrewAI), центральному координатору нужно уметь сказать «готово». Иначе цикл «делегировал → получил → делегировал» не остановится. Условие завершения + предохранитель по числу шагов — обязательны в любом Supervisor.

Типичные ошибки

Ошибка 1: воркеры общаются в обход центра

В чистом Supervisor вся коммуникация идёт через координатор. Прямые связи воркер↔воркер ломают паттерн (это уже Swarm/Network) и путают ответственность.

Ошибка 2: слабый «мозг» супервайзера

Всё качество держится на координаторе: плохо планирует и делегирует — разваливается команда. Супервайзеру нужна сильная модель и чёткие инструкции о ролях воркеров.

Ошибка 3: Supervisor для линейной задачи

Если порядок известен и без ветвлений, центр — лишний хоп и стоимость. Для прямой цепочки бери Pipeline.

Ошибка 4: плоская команда из десятков воркеров

Один супервайзер на 20 ролей перегружается и путается. На таком размере вводи иерархию (супервайзеры над супервайзерами), а не наращивай плоский список.

Шпаргалка

Supervisor — всё в одном месте
text
ПАТТЕРН: центральный координатор делегирует задачи специалистам
  топология «звезда» — всё через центр, воркеры НЕ общаются напрямую

ЦИКЛ: задача → supervisor разбивает → делегирует воркеру →
      получает результат → решает (ещё делегировать / FINISH)

ОДИН ПАТТЕРН — РАЗНЫЕ ИНСТРУМЕНТЫ:
  LangGraph — узел-маршрутизатор + conditional edges (next/FINISH)
  AutoGen   — GroupChatManager выбирает спикера
  CrewAI    — Process.hierarchical + manager_llm

✅ ПЛЮСЫ: контроль · ясная ответственность · легко добавлять воркеров · отладка
❌ МИНУСЫ: центр = узкое место/точка отказа · лишний хоп · перегруз при росте

КОГДА: динамическая маршрутизация · разные специалисты · нужен контроль/аудит
НЕ НАДО: строго линейно → Pipeline · воркеры сами передают → Swarm

ПРАВИЛА:
  • условие завершения (FINISH) + предохранитель — обязательны
  • супервайзеру — сильную модель
  • много воркеров → ИЕРАРХИЯ, не плоский список

Практическое задание

Узнай и собери паттерн на любом инструменте:

Задание: Supervisor своими руками

  1. Возьми задачу с разными подзадачами (например, «по теме X: найди факты, посчитай метрику, напиши вывод»). Определи воркеров и их роли.
  2. Реализуй Supervisor на знакомом инструменте: LangGraph (модуль 03), AutoGen GroupChat или CrewAI hierarchical — на выбор. Убедись, что воркеры ходят только через центр.
  3. Проверь завершение: супервайзер должен корректно остановиться (FINISH/лимит). Намеренно убери условие выхода и увидь зацикливание.
  4. Поставь супервайзеру слабую модель и оцени, как деградирует координация — это подтверждает «всё держится на центре».
  5. Сравни свою реализацию с тем, как тот же паттерн выглядит на другом инструменте — найди общую структуру под разным синтаксисом.
  6. Со звёздочкой: доведи команду до размера, где один супервайзер «захлёбывается», и преврати её в двухуровневую иерархию (супервайзер над под-супервайзерами).

Что дальше

Supervisor — про централизованное «кто следующий». Но для прямой, заранее известной последовательности центр не нужен — задачи просто идут по конвейеру. Это второй паттерн координации — Pipeline.