Мультиагентные системы: архитектурные паттерны и компромиссы
Продвинутое3 минРедакция Innovialabs
Коротко
Мультиагентная система оправдана, когда задачу можно разделить на независимые части или нужны разные роли и проверка; в остальных случаях один агент с хорошими инструментами проще, дешевле и надёжнее. Главные компромиссы — стоимость, задержка и сложность отладки.
Коротко: когда нужны несколько агентов
Агент — это LLM, которая в цикле решает, какой инструмент вызвать, и действует по результату. Мультиагентная система — несколько таких агентов с разными ролями, промптами и инструментами, которые обмениваются результатами.
Несколько агентов оправданы, если:
- задачу можно распараллелить на независимые подзадачи;
- один контекст не вмещает всю информацию;
- нужны разные специализации или независимая проверка результата.
Если ни одно не верно — начните с одного агента.
Паттерн 1. Orchestrator-worker
Оркестратор разбивает задачу на подзадачи, раздаёт их исполнителям и собирает результат.
- Плюсы: параллельность, каждый исполнитель работает с чистым узким контекстом, легко добавлять новых исполнителей.
- Минусы: качество зависит от того, насколько хорошо оркестратор декомпозирует задачу; исполнители могут дублировать работу; растёт число вызовов LLM.
- Подходит для: исследования по многим источникам, анализа большого набора документов, генерации частей отчёта.
Паттерн 2. Pipeline (конвейер)
Агенты работают последовательно: выход одного — вход следующего. Например: извлечь данные → проверить → сформировать ответ.
- Плюсы: предсказуемость, простая отладка — видно, на каком шаге сломалось; каждый шаг можно тестировать отдельно.
- Минусы: ошибка на раннем шаге распространяется дальше; нет параллельности; жёсткая структура плохо подходит для открытых задач.
- Подходит для: обработки документов, процессов с понятными этапами.
Часто конвейер вообще не требует «агентности» — это обычная цепочка вызовов LLM, и это хорошо.
Паттерн 3. Debate и проверка
Несколько агентов предлагают решения или критикуют друг друга, а финальный агент выносит вердикт. Упрощённый вариант — пара «исполнитель + рецензент».
- Плюсы: выявляет ошибки, которые пропускает один проход; полезен там, где цена ошибки высока.
- Минусы: несколько раундов умножают стоимость и задержку; агенты на одной модели могут соглашаться в одной и той же ошибке.
- Подходит для: проверки кода, юридических и финансовых формулировок, сложных рассуждений.
Сравнение паттернов
| Критерий | Orchestrator-worker | Pipeline | Debate |
|---|---|---|---|
| Параллельность | Высокая | Нет | Частичная |
| Предсказуемость | Средняя | Высокая | Средняя |
| Стоимость | Растёт с числом исполнителей | Умеренная | Растёт с числом раундов |
| Отладка | Сложнее | Проще всего | Средняя |
Память и состояние
Это самая недооценённая часть архитектуры.
- Краткосрочная память — контекст текущей задачи. Не передавайте исполнителям всю историю — давайте только нужное, иначе растут стоимость и шум.
- Общее состояние — храните его явно: в базе, файле или структурированном объекте, а не в тексте переписки агентов.
- Долгосрочная память — факты между сессиями, обычно через поиск по базе знаний.
- Структурированные передачи — агенты обмениваются данными по схеме (например, JSON), а не свободным текстом. Это упрощает проверку и отладку.
- Идемпотентность и повторы — если шаг упал, его должно быть безопасно перезапустить.
Когда один агент лучше
- Задача последовательная и укладывается в контекст.
- Важны низкая задержка и предсказуемая стоимость.
- Подзадачи сильно зависят друг от друга — передача контекста между агентами теряет детали.
- У вас ещё нет трассировки и оценки — без них мультиагентную систему почти невозможно отлаживать.
Хорошее правило: сначала один агент с качественными инструментами и промптом, затем разделение — только там, где замеры показывают выигрыш.
Частые ошибки
- Делать «команду агентов» ради архитектуры, а не задачи.
- Отсутствие лимитов на число шагов и вызовов — агенты зацикливаются.
- Нет логирования каждого вызова и решения.
- Неясные границы ролей: агенты дублируют или противоречат друг другу.