ГлавнаяБлогМногоагентные системы: когда и как делить задачи
AI / Нейросети

Многоагентные системы: когда и как делить задачи

Узнайте, когда один AI-агент справляется лучше, а когда нужно разделять задачи. Практические паттерны с кодом на Python для масштабирования.

Al
Редакция Algolitalgolit.ru
6 мин чтения26 июня 2026 г.

Зачем читать эту статью

Вы уже знаете, что AI-агент — это система, которая самостоятельно выполняет задачу за вас. Но как заставить одного агента работать в цикле? И когда разумно разбить работу на несколько агентов? В этой статье на примерах кода на Python вы разберётесь с run-циклом, узнаете, когда хватает одного агента, а когда нужно внедрять менеджера или децентрализованные передачи.

Run-цикл: сердце любого агента

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

Этот while-цикл — сердце любого агента. Он верен и для одного агента, и для сети агентов. Единственное, что меняется в больших системах — кто получает управление на каждом шаге.

# Пример run-цикла на псевдокоде
while not exit_condition:
    action = model.think(context)
    if action.tool_call:
        result = execute_tool(action.tool_name, action.params)
        context.append(result)
    else:
        exit_condition = True
        final_response = action.response

Начните с одного агента

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

Один агент, один цикл, растущий набор инструментов. Это упрощает оценку и сопровождение — а это важнее, чем кажется, когда вы отлаживаете в 11 вечера.

Хитрый приём для управления сложностью без разделения: используйте шаблон промпта с переменными вместо кучи отдельных промптов.

# Шаблон промпта с переменными
prompt_template = """
Вы — агент колл-центра компании {{company}}. Вы общаетесь с
{{user_name}}, клиентом со стажем {{tenure}}. Поприветствуйте его,
поблагодарите за лояльность и помогите с его вопросом.
"""

# Использование
prompt = prompt_template.format(company="Ромашка", user_name="Иван", tenure="3 года")

Новый сценарий? Обновите переменные, а не весь воркфлоу.

Когда разделять на несколько агентов

Разделяйте, когда один агент начинает «прогибаться». Два симптома:

  • Сложная логика: промпт превращается в лабиринт ветвлений if-то-это, его трудно масштабировать. Каждая логическая ветка — кандидат на собственного агента.
  • Перегрузка инструментами: проблема редко в сыром количестве инструментов — скорее в их пересечении. Некоторые агенты счастливо жонглируют 15+ чётко определёнными инструментами; другие путаются даже с 10 похожими. Если чёткие имена, параметры и описания перестают помогать — разделяйте.

Когда вы решите разделить, есть два основных паттерна.

Паттерн 1: менеджер

Один центральный агент (менеджер) координирует специалистов, вызывая их как инструменты. Специалисты делают свою работу и возвращают результаты. Менеджер остаётся у руля и собирает всё в единый ответ. Это подходит, когда нужен единый голос в общении с пользователем.

from agents import Agent

# Специализированные агенты
spanish_agent = Agent(name="spanish_agent", instructions="Переводи на испанский.")
french_agent = Agent(name="french_agent", instructions="Переводи на французский.")
italian_agent = Agent(name="italian_agent", instructions="Переводи на итальянский.")

# Агент-менеджер
manager_agent = Agent(
    name="manager_agent",
    instructions="Ты — переводчик. Используй предоставленные инструменты для перевода. Если запрошено несколько переводов, вызывай соответствующие инструменты.",
    tools=[
        spanish_agent.as_tool(tool_name="translate_to_spanish", tool_description="Перевести на испанский"),
        french_agent.as_tool(tool_name="translate_to_french", tool_description="Перевести на французский"),
        italian_agent.as_tool(tool_name="translate_to_italian", tool_description="Перевести на итальянский"),
    ],
)

Паттерн 2: децентрализованные передачи

Здесь нет начальника. Агенты — равноправные участники, и один может передать весь разговор другому. Передача — однонаправленная: новый агент принимает управление и текущее состояние, а исходный выходит из игры. Это идеально для триажа: первый агент выясняет, что нужно пользователю, и передаёт его нужному специалисту.

# Агенты-специалисты
technical_support_agent = Agent(name="tech_support", instructions="Помогай с техническими проблемами.")
sales_assistant_agent = Agent(name="sales_assistant", instructions="Консультируй по продажам.")
order_management_agent = Agent(name="order_management", instructions="Управляй заказами.")

# Триажный агент
triage_agent = Agent(
    name="Triage Agent",
    instructions="Ты — первая точка контакта. Оцени запрос клиента и направь его нужному специалисту.",
    handoffs=[
        technical_support_agent,
        sales_assistant_agent,
        order_management_agent,
    ],
)

Менеджер vs передача: кратко

  • Используйте менеджера, когда нужен один голос в общении с пользователем и объединение результатов.
  • Используйте передачи, когда готовы позволить специалисту полностью взять управление.

Что бы вы ни выбрали, правило остаётся: компоненты должны быть гибкими, составляемыми и управляться чёткими промптами.

Практический вывод

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

  1. Возьмите вашу текущую задачу и попробуйте реализовать её одним агентом с набором инструментов. Убедитесь, что не упёрлись в сложность логики или перегрузку инструментами.
  2. Если один агент начинает «буксовать» — примените паттерн менеджера или передач. Начните с менеджера, если важна единая точка общения; иначе — передачи.
  3. Протестируйте оба варианта на небольшом прототипе и выберите тот, который проще отлаживать и сопровождать.

В следующей части мы рассмотрим защитные барьеры: защиту от инъекций промптов, PII и когда нужно привлекать человека. Оставайтесь с нами!

#AI-агенты#многоагентные системы#паттерны проектирования#Python
Al
Редакция Algolit

Пишем про алгоритмы, подготовку к собеседованиям и карьеру в IT — так, чтобы было понятно и полезно.

Хочешь закрепить знания на практике?

Решай задачи на Algolit — интерактивная платформа для обучения

Начать бесплатно →