r3tam blog

Лучшие практики для “агентных” систем (а также мульти-агентных)

Лучшие практики для «агентных» систем (а также мульти-агентных)

2025 год стал переломным для агентных систем: от экспериментальных прототипов индустрия перешла к production-grade решениям, а 2026-й закрепил мультиагентную архитектуру как стандарт для сложных AI-воркфлоу. Если 2023 год был про промптинг, 2024 — про RAG, а 2025 — про одиночных агентов с инструментами, то 2026-й — это год, когда несколько AI-агентов координируются для выполнения реальной работы в продакшене.

Но вместе с ростом популярности пришли и типовые проблемы. Команды бросаются делить задачи на 10-12 агентов, забывая о координационных издержках. Агенты зацикливаются и тратят бюджеты. Контекст разрастается, качество деградирует, а отладка превращается в кошмар. В этой статье мы собрали лучшие практики, которые помогут вам построить надёжную агентную систему — от выбора архитектуры до мониторинга.

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

Самая частая ошибка 2026 года — овердекомпозиция. Команды в энтузиазме дробят систему на 8–12 специализированных агентов, хотя 3–4 справились бы с тем же качеством при втрое меньших накладных расходах. Главное правило: сложность — это налог. Каждый дополнительный агент умножает координационные издержки, поверхность отладки, задержки и стоимость каждого запроса.

Мультиагентность нужна, когда:

  • Задача требует нескольких разнородных компетенций, которые сложно уместить в один промпт
  • Разные шаги workflow требуют разных моделей (дешёвая для классификации, дорогая для генерации)
  • Требуется параллельное выполнение независимых подзадач
  • Необходимы изолированные контексты и security boundaries между агентами
  • Планируется рост системы: разделение ответственности сейчас предотвращает массовый рефакторинг позже

Мультиагентность не нужна, когда:

  • Задача укладывается в один-два шага с одним агентом
  • Все подзадачи используют общий контекст без необходимости изоляции
  • Основная сложность — в бизнес-логике, а не в координации агентов

Как пишут в Anthropic: «Начинайте с самого простого решения, которое может сработать. Добавляйте сложность только тогда, когда измерения вынуждают вас к этому». Одиночный агент с хорошо спроектированными инструментами часто оказывается достаточным.

Паттерны оркестрации

После того как вы решили, что мультиагентность оправдана, встаёт вопрос выбора паттерна оркестрации. Исследование 30+ production-систем и анализ от Microsoft, Google, LangChain и Anthropic выделяют несколько устоявшихся шаблонов.

Orchestrator-Worker

Самый распространённый паттерн. Центральный агент-оркестратор получает задачу, декомпозирует её, делегирует подзадачи специализированным рабочим агентам, собирает результаты и синтезирует финальный ответ. Оркестратор не выполняет предметную работу — он планирует и координирует. Рабочие агенты — это узкие специалисты: агент-исследователь, агент-писатель, агент-кодер, агент-ревьюер.

Этот паттерн хорошо работает для well-defined многошаговых workflow с понятным финальным результатом. Он даёт предсказуемость, модульность и прозрачную отладку: вы всегда знаете, какой агент что сделал.

Pipeline (линейная цепочка)

Агенты выстроены в последовательность, где выход одного становится входом для следующего. Это ETL для агентов. Паттерн идеален, когда процесс строго упорядочен: классификация → извлечение → генерация → валидация. Pipeline предсказуем, прост в отладке и легко тестируется посегментно.

Ключевое ограничение — последовательное исполнение: общая задержка равна сумме задержек всех агентов.

Classifier + Router

Дешёвый агент-классификатор (например, на Haiku или Llama-8B) определяет тип задачи и направляет её соответствующему рабочему агенту. Это умный роутинг, который оставляет дорогие модели только для реальной работы. На практике этот паттерн даёт наибольшую экономию: 60–80% запросов обрабатываются быстрой моделью.

Hierarchical (иерархический)

Топ-уровневый оркестратор делегирует задачи мидл-уровневым оркестраторам, каждый из которых управляет своей группой специализированных агентов. Паттерн масштабируется для очень больших систем — до десятков агентов. Эмпирическое правило: не более 3–8 агентов на одного оркестратора. Если нужно больше — добавляйте уровень иерархии.

Swarm (рой)

Агенты децентрализованно обмениваются задачами и сообщениями через общую шину. Подход интересен, но в production встречается редко из-за сложности контроля и предсказуемости. Используйте его только если задачи действительно требуют самоорганизации без центрального управляющего.

Context Engineering

Контекст — самый дорогой ресурс агентной системы. Исследования Chroma Research показывают: качество ответа начинает деградировать уже при заполнении контекстного окна на 25%, а не на 100%, как принято думать. Эта проблема многократно усиливается в мультиагентных системах, где каждый агент добавляет свои рассуждения, результаты инструментов и промежуточные выводы.

Изоляция контекста

Главная причина использовать суб-агентов — изоляция контекста, а не параллелизм. Anthropic замерила улучшение качества на 90,2% при переходе от одного монолитного агента к системе с изолированными контекстами. Каждый агент должен получать только тот контекст, который необходим для его конкретной задачи. Не тащите «на всякий случай» всю историю взаимодействия.

Компакция контекста

Между передачами контекста от агента к агенту применяйте компакцию: суммаризацию, selective pruning, извлечение ключевых фактов. Не передавайте сырые логи — передавайте структурированное резюме. На практике хорошо себя зарекомендовали следующие стратегии:

  • Summarization: сжатие длинного диалога в короткое резюме ключевых решений
  • Structured extraction: извлечение фактов в фиксированную схему (JSON) вместо передачи текста
  • Sliding window: удержание только последних N шагов взаимодействия
  • Hybrid: краткосрочная память (последние шаги) + долгосрочная (векторный индекс ключевых фактов)

Context Rot

Термин из AI Agent Handbook 2026 — деградация качества контекста по мере его роста. Системные промпты «размываются» новым контентом, инструкции в начале контекста теряют влияние. Защиты: реинжекция ключевых инструкций в нижней части контекстного окна, ротация системного промпта каждые N шагов, чёткие stop-conditions для каждого агента.

Структурированный вывод и function calling

Самая частая причина падения production-агентов — не плохие рассуждения, а плохой формат вывода. Агент правильно решает, что клиенту нужен возврат, но возвращает сумму как $45.00 вместо 45.00, и пайплайн падает. Структурированный вывод устраняет целый класс таких ошибок.

Structured Outputs вместо JSON mode

С 2025 года OpenAI и Anthropic предлагают нативные Structured Outputs API, которые гарантируют соответствие схеме. Если JSON mode гарантирует только валидный JSON, но не конкретную схему (модель может вернуть {"answer": "yes"} вместо ожидаемого {"approved": true, "reason": "..."}), то Structured Outputs со strict: true обеспечивают математическую гарантию соблюдения схемы.

Практическое правило: всегда предпочитайте Structured Outputs JSON mode. Используйте Pydantic/Zod-модели для описания схемы, добавляйте валидацию на каждом шаге и автоматические retry при ошибках валидации (не более 3 попыток).

Function Calling: паттерны для продакшена

Function calling — мост от «LLM, который говорит» к «LLM, который делает». Демо-агент вызывает API погоды и получает чистый JSON. Продакшен-агент вызывает платёжный API, получает 503, модель галлюцинирует несуществующую стратегию retry, и клиента списывают дважды.

Ключевые практики для function calling в продакшене:

  • Плоские схемы: вложенные объекты — главный источник галлюцинаций полей. Если функции нужно 5 параметров, сделайте их 5 топ-уровневыми параметрами
  • Классификация pillar: разделите все функции на категории — Read (авто-одобрение, 3 retry), Compute (авто-одобрение, без retry), Action (требует подтверждения человека)
  • Структурированные ошибки: никогда не возвращайте модели сырой stack trace. Всегда оборачивайте исключения в структурированный объект ошибки с кодом, сообщением и suggested action
  • Human-in-the-loop: для опасных действий (запись в БД, отправка API-запроса, деплой) — трёхшаговый паттерн: модель предлагает → человек подтверждает → система исполняет

Контроллер + Форматтер

Практический паттерн, рекомендуемый для production: используйте function calling для агента-«мозга» (Controller), который собирает контекст и принимает решения. Затем передавайте результат финальному дешёвому агенту (Formatter), использующему только Structured Outputs, чтобы гарантировать, что финальный ответ идеально соответствует схеме UI или API.

Протоколы: MCP и A2A

Экосистема агентов в 2026 году стандартизируется вокруг двух протоколов.

MCP (Model Context Protocol) — стандарт подключения инструментов к агентам. Вместо хардкода трёх функций в промпте агент динамически запрашивает у MCP-сервера доступные инструменты, выбирает подходящие и вызывает их. MCP нужен, когда агенту требуется доступ к данным, API, файловой системе или внешним сервисам.

A2A (Agent-to-Agent) — открытый протокол Google для коммуникации между агентами, построенными в разных фреймворках и на разных языках. A2A — это «HTTP мира агентов». Каждое взаимодействие обёрнуто в Task с жизненным циклом: submitted → working → completed/failed. A2A нужен, когда специалисты живут в разных рантаймах, организациях или за разными security boundaries.

Правило выбора: Structured Outputs — всегда включены. MCP — для доступа к инструментам. A2A — для вызова другого агента, особенно через границу доверия. В типичном production-флоте 2026 года: одна A2A-точка (оркестратор), несколько MCP-серверов (по одному на источник данных) и Structured Outputs — везде.

Observability и отладка

Мультиагентные системы отказывают тонкими, распределёнными способами, которых нет у одиночных агентов. Без сильной трассировки и пошаговой инспекции отладка становится невозможной. Стройте observability в первую очередь, а не как дополнение.

Что обязательно должно быть:

  • Distributed tracing: каждый вызов LLM, каждый инструмент, каждый handoff между агентами — с временем, токенами и результатом
  • Пошаговая репродукция: возможность «переиграть» конкретный run с теми же параметрами
  • Метрики: latency на агента, стоимость на шаг, количество retry, частота зацикливаний
  • Аудит-трейл: structured логи каждого решения: какие сигналы, какие evidence, какие tool calls привели к этому выводу

Из инструментов: LangFuse, LangSmith, Arize — все поддерживают distributed tracing для мультиагентных архитектур.

Безопасность, guardrails и governance

С ростом числа агентов экспоненциально растёт поверхность атаки и количество точек отказа. Базовые практики безопасности для мультиагентных систем:

  • Guardrails на каждом уровне: входная валидация, schema validation, content moderation на каждом агенте
  • Least-privilege: каждый агент имеет доступ только к тем инструментам, которые нужны для его задачи. Агент-исследователь не должен иметь доступ к записи в БД
  • Policy-as-code: права доступа, разрешённые действия и ограничения описываются кодом, а не промптами
  • Privacy constraints: агенты обмениваются только task-relevant информацией, никаких сырых пользовательских данных между агентами
  • Human-in-the-loop gates: обязательное подтверждение человека для high-stakes действий
  • Max-step и max-budget counters: каждый run имеет жёсткие лимиты на количество шагов и токенов. Kill switch — аварийная остановка при превышении бюджета

Хорошая новость: если вы используете паттерн оркестратора (а не peer-to-peer), все эти проверки можно централизовать в оркестраторе, не размазывая их по каждому агенту.

Заключение

Мультиагентные системы в 2026 году — это уже не эксперимент, а production-инструмент. Но они требуют инженерной дисциплины, а не просто красивого промптинга. Резюмируем ключевые практики:

  1. Начинайте с одного агента. Добавляйте агентов только когда измерения показывают, что одиночный не справляется
  2. Выбирайте паттерн под задачу: Orchestrator-Worker — для сложных workflow, Pipeline — для последовательных процессов, Classifier + Router — для экономии
  3. Изолируйте контексты — это главная причина использовать мультиагентность
  4. Используйте Structured Outputs везде — на границах каждого агента, каждой функции, каждой передачи контекста
  5. Стройте observability первой — мультиагентные системы невозможно отлаживать без distributed tracing
  6. Ставьте guardrails и limit'ы на каждом уровне
  7. Документируйте роли и инструменты до того, как писать код: role cards, tool definitions, схемы вывода — всё в git

Следуя этим практикам, вы получите систему, которая не просто демонстрирует возможности AI, а надёжно и предсказуемо решает бизнес-задачи в продакшене.