Теория мультиагентных систем: Автономность, коммуникация и координация
Мы прошли большой путь: от низкоуровневой оптимизации Python до построения сложных RAG-пайплайнов. Но RAG — это пассивная система. Она ждет запроса, ищет информацию и отвечает. Это уровень «умной энциклопедии».
Следующий шаг эволюции, за который компании готовы платить топовые зарплаты (400к+), — это агентность. Переход от систем, которые отвечают на вопросы, к системам, которые выполняют работу.
На собеседовании на позицию Lead/Senior AI Engineer вас спросят: «Как вы спроектируете систему, где один бот пишет код, второй его тестирует, а третий пишет документацию, и они делают это автономно до получения результата?». Это и есть мультиагентная система (MAS).
В этой статье мы разберем теоретический фундамент MAS, без которого невозможно эффективно использовать фреймворки вроде LangGraph, CrewAI или AutoGen.
Что делает код Агентом?
В классическом программировании мы пишем функции. Функция детерминирована: на вход , на выход . Агент — это нечто иное.
Согласно классическому определению Вудриджа (Wooldridge), агент обладает четырьмя свойствами:
Автономность (Autonomy): Агент оперирует без прямого вмешательства человека и имеет контроль над своими действиями и внутренним состоянием.
Социальность (Social Ability): Агенты взаимодействуют с другими агентами (или людьми) через коммуникационный язык.
Реактивность (Reactivity): Агент воспринимает среду и реагирует на изменения в ней.
Проактивность (Pro-activity): Агент не просто реагирует, а проявляет целенаправленное поведение, беря инициативу на себя.Математическая модель агента
Формально поведение агента можно описать как функцию, отображающую историю восприятий в действие:
Где:
* — функция агента (его «мозг» или политика).
— последовательность (история) всех восприятий (percepts), полученных агентом от начала работы до текущего момента.
* — действие (action), которое агент выбирает выполнить.
В контексте LLM:
— это контекстное окно (история чата + результаты выполнения инструментов).
* — это сама LLM + промпт.
* — это сгенерированный текст или вызов функции (Tool Call).
Когнитивная архитектура: Анатомия агента
Чтобы агент был полезным, простого вызова openai.chat.completions.create недостаточно. Ему нужна архитектура. Самый популярный паттерн сегодня — это ReAct (Reason + Act), но давайте взглянем на это шире.
[VISUALIZATION: Схема когнитивной архитектуры агента. В центре блок "Brain (LLM)". Вокруг него блоки: "Perception" (входные данные), "Memory" (Short-term и Long-term), "Planning" (разбиение задач), "Tools" (API, Code Interpreter). Стрелки показывают циклический поток данных: Perception -> Memory -> Planning -> Brain -> Tools -> Action.]
1. Профиль (Persona)
Это системный промпт, определяющий роль.
«Ты — Senior QA Engineer, придирчивый к деталям. Ты никогда не пропускаешь код без тестов». Это задает ограничения пространства действий.
2. Память (Memory)
Без памяти агент — это золотая рыбка. В MAS выделяют:
*
Сенсорная память: Текущий запрос пользователя.
*
Краткосрочная память (Short-term): История текущего диалога или шаги рассуждения (Chain of Thought). Обычно хранится в контекстном окне.
*
Долгосрочная память (Long-term): Векторная база данных (RAG), куда агент может сохранить опыт или извлечь правила компании.
3. Планирование (Planning)
Способность разбить сложную цель (
«Создай веб-сайт») на подзадачи (
«Напиши HTML», «Напиши CSS», «Запусти сервер»).
Техники планирования:
* Chain of Thought (CoT): Пошаговое рассуждение.
* Tree of Thoughts (ToT): Генерация нескольких вариантов шага и выбор лучшего.
* Reflection: Агент критикует свой собственный план перед исполнением.
Коммуникация в мультиагентных системах
Когда у вас два агента, возникает проблема: как им общаться? В Python мы привыкли к вызовам функций, но агенты обмениваются смыслами.
Паттерн 1: Прямой обмен сообщениями (Message Passing)
Агент А отправляет сообщение Агенту Б. Это похоже на модель акторов (Actor Model).
* Плюс: Простота реализации, низкая задержка.
* Минус: Сильная связность. Агент А должен знать, что Агент Б существует и какой у него интерфейс.
Паттерн 2: Классная доска (Blackboard Pattern)
Это фундаментальный паттерн для современных фреймворков типа LangGraph.
Представьте комнату, где стоит большая доска. Агенты не говорят друг с другом. Они смотрят на доску, видят текущее состояние задачи, подходят, пишут свое решение и отходят.
* State (Состояние): Единый объект данных (например, TypedDict в Python), доступный всем.
* Плюс: Полная развязка (Decoupling). Агенту-программисту все равно, кто проверит его код — Агент-QA или человек. Он просто кладет код в поле code на доске.
* Минус: Необходимость механизма блокировок или разрешения конфликтов при одновременной записи (хотя в LLM-агентах ходы обычно последовательны).
Язык коммуникации
В 90-х годах пытались придумать стандарты типа KQML или FIPA-ACL. В эпоху LLM стандартом стал
структурированный JSON.
Пример контракта общения:
Использование Pydantic для валидации этих сообщений — обязательный навык Senior-разработчика.
Координация и управление
Как заставить стадо котов (автономных агентов) идти в одну сторону? Существует два основных подхода к топологии систем.
1. Оркестрация (Orchestration)
Есть центральный «Босс» (Supervisor/Controller). Он получает задачу от пользователя и раздает команды подчиненным агентам.
* Пример: Пользователь просит «Напиши отчет». Супервизор вызывает Агента-Исследователя, ждет текст, передает его Агенту-Редактору, получает итог и отдает пользователю.
* Преимущества: Легко отлаживать, понятный поток управления (Control Flow), меньше шансов зацикливания.
* Недостатки: Супервизор становится узким местом (Single Point of Failure) и ограничивает автономность подчиненных.
[VISUALIZATION: Схема топологии "Оркестрация". В центре крупный узел "Supervisor Agent". От него исходят лучи к меньшим узлам: "Coder", "Tester", "Writer". Стрелки двунаправленные: команды идут от центра, отчеты возвращаются в центр.]
2. Хореография (Choreography)
Центрального управляющего нет. Агенты знают правила игры и реагируют на изменения среды (состояния).
* Пример: Агент-Разработчик коммитит код. Агент-CI видит новый коммит и запускает тесты. Агент-Деплоер видит зеленые тесты и катит в прод. Никто не давал прямых команд, процесс произошел реактивно.
* Преимущества: Высокая масштабируемость, надежность (нет единой точки отказа).
* Недостатки: Сложно мониторить процесс целиком, риск возникновения бесконечных циклов (Агент А правит баг, создает новый, Агент Б находит его, возвращает Агенту А).
Проблема консенсуса и принятия решений
Что делать, если три агента предлагают разные решения? Например, три агента-критика оценивают качество текста.
Нам нужен механизм агрегации мнений. Самый простой — Голосование большинства (Majority Voting).
Математически выбор решения из множества вариантов можно описать так:
Где:
* — количество голосов за вариант .
* — количество агентов.
* — решение (decision), принятое -м агентом.
* — индикаторная функция, которая равна 1, если условие в скобках истинно (агент выбрал вариант ), и 0 в противном случае.
Побеждает вариант с максимальным . В более сложных системах (Weighted Voting) у агентов могут быть веса (авторитет), тогда формула меняется на взвешенную сумму.
Паттерны сотрудничества (Collaboration Patterns)
На практике вы будете строить системы из комбинаций этих паттернов.
Sequential Handoffs (Эстафета): Строгая последовательность. Выход одного — вход другого. Идеально для детерминированных пайплайнов.
Hierarchical Teams (Иерархия): Супервизор управляет группой, но сам может быть подчиненным у Супервизора более высокого уровня. Позволяет масштабировать сложность.
Joint Chat (Круглый стол): Все агенты видят сообщения всех. Порядок ответов может быть фиксированным (Round Robin) или динамическим (говорит тот, кто считает, что ему есть что сказать).Вызовы и риски (Challenges)
Создание MAS сопряжено с проблемами, которых нет в обычном бэкенде.
1. Бесконечные циклы (Infinite Loops)
Агент-Тестировщик находит баг -> Агент-Кодер «исправляет» (но не исправляет) -> Агент-Тестировщик снова находит баг.
Решение: Всегда вводить max_iterations или time_to_live (TTL) для графа выполнения.
2. Распространение галлюцинаций
Если первый агент в цепочке придумал несуществующий факт, остальные агенты примут его за истину и построят на нем свои выводы. Ошибка усиливается каскадно.
Решение: Внедрять агентов-верификаторов (Critics), которые имеют доступ к исходным данным и проверяют каждый шаг.
3. Стоимость и задержка
Мультиагентная система может делать десятки запросов к LLM для решения одной задачи. Это дорого и долго.
Решение: Использовать маленькие модели (Llama-3-8B, GPT-4o-mini) для простых подзадач и большие (GPT-4o, Claude 3.5 Sonnet) только для сложных рассуждений и финальной сборки.
Заключение
Теория мультиагентных систем дает нам словарь и паттерны для проектирования автономного софта. Мы уходим от жестко прописанной логики (if-else) к вероятностной логике взаимодействия ролей.
В следующей статье мы перейдем от теории к практике и разберем LangGraph — библиотеку, которая позволяет реализовать паттерны State Machine и Blackboard в Python, создавая надежные, циклические графы агентов.