КЛАСТЕР 04 · MCP ОРКЕСТРАЦИЯ ~18 МИНУТ
День 20 · из 35

Оркестрация
и мультиагенты

Финал кластера 04. Когда задача слишком большая для одного агента — разбиваем на несколько. Когда лучше три специализированных, чем один универсальный. И почему «multi-agent system» — это часто переусложнение, а иногда — единственный разумный путь.

Суть урока

Мультиагентные системы — это не «модно», а архитектурный выбор. Один агент с 30 инструментами часто хуже трёх специализированных с 8-10 каждый: меньше путаницы, чище контекст, проще отлаживать. Но цена — оркестратор, передача данных, общая память, координация. Сегодня учимся видеть, когда разделение оправдано, а когда добавляет проблем без выгоды.

Когда один агент перестаёт работать

В Кластере 02 ты строил агентов с одним циклом, одним массивом messages, одной моделью. Это здорово работает для большинства задач. Но в какой-то момент ты увидишь признаки, что архитектура «треснула». Вот они:

  • Слишком много инструментов. Описания tools в system prompt занимают 3000+ токенов, агент путается, выбирает неправильные. Этому посвящён День 18, но если решения оттуда уже исчерпаны — пора разделять.
  • Сильно разные «роли». Часть задачи требует креативного письма (temperature ~0.8), другая — точного парсинга (temperature 0). Один агент не может быть и тем, и другим одновременно.
  • Очень длинные цепочки. Задача требует 30+ шагов. Контекст становится огромным, lost in the middle, дорого. Разделить на 3 агента по 10 шагов — короче каждый контекст, чище работа.
  • Параллелизм по природе задачи. Нужно одновременно делать три независимых исследования. Один агент делает последовательно, три агента — за треть времени.
  • Разные модели для разных шагов. Маленькая модель для рутинных шагов, большая для финального синтеза (Дни 5, 8). Это уже фактически разные агенты, просто на одной задаче.
  • Разные «области компетенции». Один кусок задачи — про работу с API, другой — про общение с пользователем. Промпты, инструменты, поведение — всё разное.

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

Мультиагентность — это не «когда умно», а когда один агент становится узлом сложности, который тебе невыгодно тянуть. До этого момента — не плоди сущности.

Когда мультиагент — переусложнение

Обратная сторона: соблазн «сделать как у больших, multi-agent». Часто это вредит. Признаки, что тебе не нужно разделение:

  • Один тип данных, одна цепочка действий, нет параллельности
  • Меньше 10 инструментов в наборе
  • Задачи решаются цепочкой из 5-10 шагов
  • Простой UX («задайте вопрос → получите ответ»)
  • Меньше 3 «ролей» (например, есть только «помощник»)

В таких случаях добавление второго агента — это удвоенный код, лишний оркестратор, удвоенная отладка, без выигрыша по качеству. Просто более «продвинуто звучит», и это плохая причина.

Архитектурные паттерны

За год-два, что индустрия экспериментирует с мультиагентами, выкристаллизовалось несколько устойчивых паттернов. Изучим четыре главных:

Паттерн 01

Оркестратор + специалисты

Один «менеджер» делегирует задачи нескольким «исполнителям»

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

Пример: исследовательский агент. Оркестратор получает «изучи рынок ниши X». Делегирует: research-agent ищет источники, analyst-agent обобщает данные, writer-agent пишет финальный отчёт. Оркестратор координирует, держит общую цель, собирает результаты.

Сильные стороны Чёткое разделение, легко добавлять новых специалистов. Каждый агент — со своим небольшим контекстом.
Слабые стороны Оркестратор становится узким местом. Если он плохо разбивает задачу — ничего не работает. Сложно отладить.
Паттерн 02

Конвейер (pipeline)

A → B → C, каждый шаг — отдельный агент

Не «оркестратор разруливает», а код задаёт чёткий конвейер. Агент A делает свою работу, его результат отправляется агенту B, тот — агенту C. Линейная передача данных, без центрального координатора.

Пример: AI-помощник для код-ревью. parser-agent разбирает diff PR. analyzer-agent ищет проблемы в каждом изменённом файле. writer-agent формирует финальные комментарии в стиле проекта.

Сильные стороны Простой, предсказуемый, легко отлаживать. Можно тестировать каждый этап отдельно.
Слабые стороны Жёсткий. Не подходит, если задача требует возврата к предыдущим шагам или ветвления.
Паттерн 03

Маршрутизатор

Простой агент классифицирует запрос и передаёт специализированному

Лёгкий первый агент (router) на маленькой модели читает запрос пользователя и определяет, к какому из специализированных агентов его отправить. Дальше работает один специалист — никакой координации в процессе.

Пример: служба поддержки. Запрос «не работает оплата» → router → billing-agent. «Не приходит письмо» → router → communications-agent. «Хочу вернуть деньги» → router → refunds-agent. У каждого свои инструменты, свой тон, свои ограничения.

Сильные стороны Экономный (маленькая модель в роутере). Каждый специалист — простой. Лёгкий старт.
Слабые стороны Только для задач, которые чисто делятся по типу. Если запрос «и то, и другое» — router запутается.
Паттерн 04

Диалог двух агентов

Два агента общаются между собой, пока не придут к ответу

Самый «исследовательский» паттерн. Два агента ведут диалог: один генерирует решения, второй критикует. Или: один задаёт вопросы, другой отвечает. Через 3-7 ходов диалога приходят к решению.

Пример: writer-agent пишет текст, critic-agent читает его глазами целевой аудитории и говорит, что улучшить. Цикл повторяется, текст становится лучше.

Сильные стороны Качество может быть очень высоким — два разных взгляда. Часто используется в исследовательских и креативных задачах.
Слабые стороны Дорого и медленно. Может зациклиться. Сложно остановить «вовремя».

В реальных системах часто комбинируют: внешний маршрутизатор отправляет к оркестратору, который запускает конвейер из специалистов. Все четыре паттерна — кирпичики, которые складываются.

Как агенты делятся данными

Главный новый класс проблем в мультиагенте — как агенты передают информацию друг другу. Это не та же задача, что передача между шагами одного агента (День 19) — здесь у каждого свой контекст, свой массив messages, свой жизненный цикл.

Три подхода, каждый со своим балансом:

Подход 1

Структурированные сообщения

Один агент возвращает строго типизированный JSON. Другой получает его как вход. Передаются только нужные поля, никакой «истории разговора».

Подход 2

Общая память

Все агенты пишут в общее хранилище (БД, файлы, vector store). Координация — через эту память: «я сделал X, результат в blob://abc». Возвращаемся к Кластеру 03.

Подход 3

Сообщения с историей

Агенты передают друг другу свой массив messages целиком. Контекст растёт быстро, но сохраняется «понимание задачи». Используется в paragmatic подходах типа AutoGen.

Какой выбрать

Прагматичное правило, которое поможет принять решение:

  • Простые конвейеры — структурированные сообщения. Чёткий контракт между этапами, легко тестировать.
  • Сложные задачи с долгой работой — общая память. Когда «состояние задачи» крупнее, чем то, что помещается в message.
  • Исследовательские, креативные сценарии — сообщения с историей. Когда важно «как мы пришли», а не только «к чему».
i
Самый частый антипаттерн
Передавать между агентами их полные массивы messages «по умолчанию». Контексты дублируются, токены тают, отлаживать невозможно. Если структурированные сообщения подходят — используй их. История нужна сильно реже, чем кажется.

Решения AI-инженера

Развилка 1. Когда оркестратор — LLM, когда — код

Главное решение в мультиагенте: оркестратор тоже на LLM или это программный код?

Оркестратор-LLM: гибко (можно делегировать на ходу, принимать новые типы задач), но непредсказуемо. Хорошо для задач, где «план зависит от того, что выяснится».

Оркестратор-код: жёстко (поток фиксирован), но надёжно и быстро. Хорошо для повторяющихся задач, где этапы известны заранее.

Гибридный подход (часто самый разумный): скелет — код, отдельные решения внутри — LLM. Код задаёт «сначала исследование, потом анализ, потом написание». Внутри каждого этапа LLM-агент свободно выбирает инструменты. Это и есть Task State Machine из Дня 13, расширенная на несколько агентов.

Развилка 2. Какие модели в специалистах

Соблазн — везде использовать одну большую модель. На практике большая часть специалистов прекрасно работает на средних моделях:

  • Router — самая маленькая. Простая классификация, не нужна большая модель.
  • Парсеры, экстракторы — маленькие или средние.
  • Анализаторы, классификаторы — средние.
  • Креативные/синтез — большие.
  • Оркестратор — обычно средняя, иногда reasoning-модель если задача правда сложная.

Хорошо спроектированная мультиагент-система экономит деньги, потому что большая модель используется только там, где правда нужна. Плохо спроектированная — тратит больше моноагента, потому что 10 запросов средней модели вместо 2 запросов большой.

Концептуальные грабли

Презентация с «мультиагентной архитектурой, где Research Agent взаимодействует с Analyst Agent» — впечатляющая. Реальный продукт, где это не нужно — это в 2 раза больше кода, в 2 раза больше багов, в 2 раза больше отладки.

Тест: работала ли бы эта задача в одном агенте с 8 инструментами? Если да — не разделяй. Технологическая красота никогда не стоит усложнения архитектуры.

«Research-agent наработал 20 итераций по 2K токенов — передаю весь его массив analyzer-agent». В контексте второго агента уже 40K токенов истории первого, до того как он начал работать.

Правильная привычка: между агентами передаётся результат, не история. Research-agent должен выдать структурированный ответ (факты, ссылки, выводы). Это и идёт в следующего. Возвращаемся к Дню 10: «контекст — это конструкция, не лог».

Каждый агент — это отдельный LLM-вызов. Координация между ними — это ещё дополнительные вызовы (оркестратор должен принимать решения). В сумме система из 3 агентов делает 6-10 вызовов вместо 3-5 одного агента.

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

Оркестратор на LLM — это удобно, но он ошибается. Может неправильно разбить задачу, неправильно выбрать специалиста, неправильно интерпретировать результат. Когда вся система зависит от его решений — одна ошибка ломает всё.

Возвращаемся ко Дню 15: критические переходы — это красная зона. «Окей, оркестратор предложил план — давайте покажем пользователю и попросим подтвердить, прежде чем гнать его всем специалистам». Особенно важно в продакшен-системах.

Что ты теперь умеешь

Кластер 04 — это переход от «модель сама что-то делает» к «модель в инфраструктуре стандартных инструментов и грамотной композиции». Пять уроков, пять слоёв:

Сводная карта кластера 04

MCP и инструменты: от подключения до оркестрации

  • 16 MCP — это стандарт, решающий N×M. Не «новая технология», а общая розетка. Сервисы делают серверы, приложения подключают.
  • 17 Описание инструмента — это то, что видит модель. Анатомия хорошего tool: чёткое имя, понятное description, типизированные параметры с примерами.
  • 18 Выбор инструмента — отдельная задача. Когда инструментов много, модель путается. Стратегии: иерархия, контекстная активация, namespaces.
  • 19 Композиция — это паттерны и обработка ошибок. Sequential / map / branch / refine. Четыре типа ошибок, каждая со своим уровнем обработки.
  • 20 Мультиагентность — это архитектурный выбор. Не «когда умно», а когда один агент перестаёт работать. Четыре паттерна, осознанное разделение.

Куда дальше

У нас есть агенты, память, инструменты. Не хватает одного — знаний. Что делать, когда нужная информация не в обучении модели, а в твоих документах, базах, файлах? Об этом — Кластер 05:

Кластер 05

RAG — поиск по знаниям

Индексация документов, эмбеддинги, семантический поиск, реранкинг. Как агент находит нужное в куче данных и тянет в контекст.

Кластер 06

Локальные LLM

Приватность и автономность. Когда нужны локальные модели, как разворачивать, какие компромиссы.

Кластер 07

Практические ассистенты

Финал курса: собираем всё в реальные продукты. Ассистент разработчика, ревью кода, поддержка, работа с файлами.

Если только один тейкэвей из кластера 04
Инструменты — это не «функции, которые модель вызывает». Это интерфейс между моделью и миром, у которого есть стандарт (MCP), есть своя инженерия (выбор, композиция, ошибки), и есть архитектурные паттерны (одноагент, мультиагент). Качество агента определяется не моделью, а тем, насколько хорошо ты спроектировал этот интерфейс.

Практика

Эксперимент 01 · Найди мультиагенты в инструментах

Reverse-инжиниринг существующих продуктов

Современные продвинутые AI-приложения — это часто мультиагенты под капотом. Cursor в «Agent mode» — оркестратор + специалисты. ChatGPT в «Research mode» — конвейер агентов. Claude с computer use — мультиагент с координатором. Сделай 2-3 сложных запроса в каждом и понаблюдай: сколько LLM-вызовов в одном запросе? Есть ли «промежуточные результаты»? Можно ли увидеть передачу между этапами? Это даст ощущение архитектуры в действии.

Эксперимент 02 · Распиши свой мультиагент

Самая большая твоя задача

Возьми задачу, которая в реальности занимает у тебя 1-2 часа (например, «подготовить еженедельный отчёт» или «найти и оценить пять кандидатов на роль»). Спроектируй её как мультиагент: какой паттерн (оркестратор/конвейер/маршрутизатор), какие специалисты, какие инструменты у каждого, как передаются данные. Через 30 минут такой работы у тебя на бумаге — готовая архитектура серьёзного агента, которую можно начать реализовывать.

Эксперимент 03 · Тест на «лишний агент»

Можно ли упростить

Возьми мультиагент-систему, спроектированную в Эксперименте 02. Пройди по каждому отдельному агенту и спроси: могла бы эта функция жить как «дополнительный инструмент» в основном агенте? Какие — да, какие — нет (с обоснованием)? Это очищает архитектуру от лишних разделений. Часто финальная версия в 2 раза проще первого черновика.