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

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

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

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

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

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

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

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

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

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

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

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

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

Несколько агентов = больше вызовов 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Когда ролям нужны разные инструменты
Поддержать проект