Когда нужна многоагентная архитектура
Многоагентная архитектура оправдана не всегда. Прежде чем строить MAS, ответьте на три вопроса:
- Задачу нельзя решить одним агентом? (Ограничение контекста, необходимость параллелизма или специализации)
- Задача поддаётся чёткому разбиению на независимые подзадачи?
- Стоимость координации приемлема по сравнению с выигрышем?
Типичные сценарии для MAS: исследование и анализ (один агент ищет данные, другой анализирует, третий пишет отчёт), параллельная обработка (независимые задачи выполняются одновременно), peer review (один агент генерирует решение, другой критикует и улучшает), разделение по доменам (финансовый агент + юридический агент + технический агент в рамках одного workflow).
Паттерн Orchestrator-Subagent
Orchestrator-Subagent — наиболее распространённый паттерн MAS. Orchestrator (главный агент) получает задачу пользователя, декомпозирует её, делегирует подзадачи специализированным Subagents и агрегирует результаты.
Ключевые характеристики Orchestrator:
- Не выполняет задачи напрямую — только делегирует и координирует
- Имеет доступ к «реестру агентов» с описаниями их возможностей
- Принимает решения о последовательности или параллельности исполнения
- Обрабатывает ошибки Subagents (retry, fallback, escalation)
Пример реализации на LangGraph:
graph = StateGraph(AgentState)
graph.add_node("orchestrator", orchestrator_node)
graph.add_node("research_agent", research_node)
graph.add_node("analysis_agent", analysis_node)
graph.add_node("writer_agent", writer_node)
graph.add_conditional_edges("orchestrator", route_to_agents)
Subagents в этом паттерне имеют ограниченный контекст: они видят только свою подзадачу, но не всю историю разговора. Это снижает стоимость токенов, но требует тщательной передачи контекста при делегировании.
Паттерн Peer-to-Peer и дебаты агентов
В паттерне P2P агенты взаимодействуют без центрального координатора. Наиболее известный вариант — Society of Mind и Agent Debate: несколько агентов предлагают решения и критикуют решения друг друга до достижения консенсуса.
Agent Debate особенно эффективен для задач с субъективной оценкой (написание текстов, дизайн архитектуры) и для повышения фактической точности через взаимную проверку.
Структура дебатов:
- Раунд 1: каждый агент независимо генерирует решение
- Раунд 2: каждый агент читает решения остальных и критикует их
- Раунд 3: каждый агент обновляет своё решение с учётом критики
- Финал: агрегирование или выбор лучшего решения
Число раундов обычно 2–3: больше не даёт значимого прироста качества, но кратно увеличивает стоимость. Число агентов в дебатах: 2–5.
Управление состоянием и передача контекста
Управление состоянием — наиболее технически сложный аспект MAS. Каждый агент имеет собственный контекст, и ключевая проблема — как обеспечить согласованность общего состояния системы.
Подходы к управлению состоянием:
- Shared state store: все агенты читают/пишут в общее хранилище (Redis, PostgreSQL). Просто, но создаёт конфликты при параллельном доступе — необходима блокировка или CRDT.
- Message passing: агенты общаются только через сообщения, каждый хранит своё состояние. Более надёжно, но сложнее в реализации. Используется в AutoGen.
- Event sourcing: все изменения состояния — события в append-only лог. Агенты реагируют на события. Лучший выбор для аудитируемых систем.
Независимо от выбранного подхода, при передаче задачи от Orchestrator к Subagent явно передавайте: цель задачи, доступный контекст, ожидаемый формат результата, дедлайн или ограничения.
Наблюдаемость и отладка MAS
Отладка MAS значительно сложнее отладки одного агента. Минимальный набор инструментов наблюдаемости: трассировка каждого взаимодействия агент-инструмент с timestamp и токен-стоимостью, граф вызовов агентов (какой агент кого вызвал и с каким результатом), механизм replay: возможность воспроизвести сессию с сохранёнными входными данными.
LangSmith, Arize Phoenix и Helicone поддерживают трассировку LangGraph и AutoGen «из коробки». Для кастомных систем используйте OpenTelemetry с LLM-специфичными атрибутами.
Установите алерты на: число токенов за сессию (порог: 3x от медианы), число итераций (порог: max_iterations * 0.8), частоту ошибок инструментов (порог: >10% вызовов).
Многоагентные системы открывают возможности, недостижимые для одиночного агента, но требуют тщательного проектирования. Начинайте с паттерна Orchestrator-Subagent как наиболее предсказуемого и масштабируемого. Добавляйте сложность — P2P, дебаты, динамическое создание агентов — только при наличии конкретных требований. Инвестируйте в наблюдаемость с первого дня: в MAS проблема, незаметная на одном агенте, может стать катастрофой на масштабе системы.