Зачем несколько агентов

Иногда вместо одного «универсального» агента выгоднее собрать команду специализированных. Разбираем, зачем и когда.

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

Проблема «агента-универсала»

Можно дать одному агенту все инструменты и все инструкции сразу. Но с ростом задачи это ломается:

  • Перегруженный промпт — десятки инструментов и правил в одном контексте; модель путается, какой инструмент когда брать.
  • Смешение ролей — «и поищи, и посчитай, и оформи, и проверь» в одной голове даёт хуже результат, чем узкая фокусировка.
  • Трудно отлаживать — всё свалено в один монолитный цикл.

Идея специализации

Вместо универсала — несколько узких агентов, у каждого своя роль, свой узкий промпт и свои инструменты:

  • Исследователь — только ищет информацию.
  • Аналитик — только считает и обрабатывает данные.
  • Писатель — только оформляет результат.
  • Критик — только проверяет качество.

Каждому проще: короткий промпт, понятная задача, минимум инструментов. Это та же декомпозиция, что в обычном программировании, — маленькие специализированные модули вместо одной гигантской функции.

Когда несколько агентов оправданы

  • Задача естественно делится на разные роли (исследовать → проанализировать → написать → проверить).
  • Каждой роли нужен свой узкий набор инструментов и стиль.
  • Полезен независимый «взгляд со стороны» (критик, дебаты).

Когда НЕ стоит

Несколько агентов = больше вызовов LLM, больше координации, больше точек отказа. Для простой задачи один агент дешевле и надёжнее. Не начинайте с мультиагентной системы «потому что модно» — это премия за сложность, которую надо окупить.

Специализация на пальцах

Покажем, как «узкие» агенты-заглушки дают чистый результат, каждый занимаясь своим.

def researcher(topic):
    facts = {"осень": "осенью холодает и желтеют листья"}
    return facts.get(topic, "фактов нет")

def writer(fact):
    return f"Короткий текст: {fact}."

def critic(text):
    return "ок" if len(text) > 10 else "слишком коротко"

# каждый агент делает только своё
topic = "осень"
fact = researcher(topic)
text = writer(fact)
verdict = critic(text)

print("Исследователь:", fact)
print("Писатель:", text)
print("Критик:", verdict)

Вывод:

Исследователь: осенью холодает и желтеют листья
Писатель: Короткий текст: осенью холодает и желтеют листья.
Критик: ок

Каждая функция-агент проста и отвечает за одно. В настоящей системе за каждой стоял бы свой вызов LLM со своим узким промптом — но структура «роли и передача работы» та же.

Итог

  • Агент-универсал с десятком инструментов перегружается; специализация упрощает каждую роль.
  • Несколько узких агентов = понятные промпты, узкие наборы инструментов, легче отлаживать.
  • Это премия за сложность: оправдана для делимых многоролевых задач, избыточна для простых.
Проверьте себя
1. Почему один агент со всеми инструментами сразу плохо масштабируется?
ALLM не поддерживает много инструментов технически
BИнструменты конфликтуют по именам
CПерегруженный промпт и смешение ролей путают модель и ухудшают выбор инструментов
DЭто запрещено протоколом function calling
2. В чём главная идея специализации агентов?
AИспользовать для каждого агента более крупную модель
BЗапускать всех агентов одновременно
CОбъединить все промпты в один
DДать каждому агенту узкую роль, короткий промпт и минимум нужных инструментов
3. Когда мультиагентная система НЕ оправдана?
AДля простой задачи — несколько агентов добавят вызовов, координации и точек отказа без выгоды
BКогда задача делится на роли
CКогда нужен критик
DКогда ролям нужны разные инструменты