Когда решают строить агента самостоятельно, выбор почти всегда сводится к трём именам: LangGraph, CrewAI и AutoGen. Сравнений в сети много, но почти все они пересказывают документацию. Здесь — разбор с той стороны, с которой это выглядит после нескольких месяцев эксплуатации: где каждый ломается, во что обходится и когда фреймворк вообще не нужен.
Что вообще делает фреймворк
Языковая модель сама по себе умеет одно: получить текст и выдать текст. Всё остальное, из чего состоит агент, — код вокруг неё. Кто-то должен хранить историю разговора, описывать модели доступные инструменты, разбирать её ответ на «это финальный текст» и «это запрос на вызов функции», выполнять вызов, класть результат обратно и повторять цикл. Плюс логировать, ретраить, ограничивать число итераций, чтобы агент не крутился вечно.
Это и есть работа фреймворка. Ничего принципиально невозможного в ней нет — базовый цикл пишется руками за вечер. Фреймворк нужен, когда поверх базового цикла появляются ветвления, параллельность, несколько исполнителей и требование всё это отлаживать.
LangGraph: граф состояний
LangGraph выросла из LangChain и предлагает описывать работу агента как граф: узлы — шаги, рёбра — переходы между ними, плюс общий объект состояния, который течёт по графу и который каждый узел может менять.
Сильная сторона — управляемость. Переходы вы задаёте явно, включая условные: «если проверка не прошла, вернись на шаг назад». Есть встроенные точки сохранения: выполнение можно остановить, сохранить состояние, а потом продолжить с того же места — в том числе после перезапуска процесса. Для длинных процессов, где на середине нужно подтверждение человека, это принципиально.
Слабая — порог входа. Придётся думать в терминах графов и состояний, а не «попроси модель сделать». Простая задача, которая в других фреймворках занимает двадцать строк, здесь потребует описания узлов, рёбер и схемы состояния. На маленьком проекте это выглядит как бюрократия, и ощущение не обманывает.
Берите, если процесс длинный, ветвистый и его нужно уметь останавливать и возобновлять.
CrewAI: роли и задачи
CrewAI устроена вокруг метафоры команды. Вы описываете агентов через роль, цель и предысторию — «ты старший аналитик, твоя задача найти в данных аномалии» — раздаёте задачи и запускаете. Конфигурация во многом декларативная, часть описывается в YAML без кода.
Сильная сторона — скорость старта. Первый работающий прототип из нескольких агентов собирается за час, и он читаем: даже человек, не писавший его, поймёт из конфигурации, кто что делает.
Слабая — управляемость там, где метафора кончается. Ролевая модель хорошо ложится на последовательный процесс «аналитик → писатель → редактор» и начинает сопротивляться, как только нужны условные переходы, откаты и нестандартный порядок. Плюс качество сильно зависит от формулировок роли, и отладка сводится к переписыванию описаний — процесс, который трудно назвать инженерным.
Берите для прототипа и для процессов, которые честно раскладываются в цепочку ролей.
AutoGen: разговор между агентами
AutoGen от Microsoft Research строит систему как диалог: агенты обмениваются сообщениями, пока не придут к результату. Есть агент-представитель пользователя, который может запрашивать подтверждение у человека, есть групповые чаты с несколькими участниками и модератором.
Сильная сторона — исследовательские задачи. Там, где решение заранее неизвестно и его нужно нащупать через обсуждение, схема с критиком работает заметно лучше одиночного агента: второй участник ловит ошибки первого.
Слабая — предсказуемость и цена. Разговор может не сойтись: агенты передают задачу по кругу, каждый раз «почти» решая. Ограничитель по числу ходов ставится, но тогда вы получаете обрыв на середине вместо результата. И главное — каждое сообщение между агентами оплачивается как обычный запрос к модели. Обсуждение из двадцати реплик стоит двадцать запросов, а на глаз это выглядит как одна задача.
Берите для исследовательских сценариев, где важна перепроверка, и закладывайте бюджет с запасом.
Сводка
- Порог входа: CrewAI — низкий, AutoGen — средний, LangGraph — высокий.
- Контроль над процессом: LangGraph — полный, AutoGen — средний, CrewAI — ограниченный рамками ролей.
- Предсказуемость расходов: LangGraph — высокая, CrewAI — средняя, AutoGen — низкая.
- Возобновление после сбоя: из коробки только у LangGraph.
- Отладка: у LangGraph — обход графа, у CrewAI и AutoGen — чтение переписки агентов.
Общие грабли, о которых не пишут в документации
Расходы растут не линейно. Каждый ход тянет за собой всю предыдущую переписку. В мульти-агентной схеме это умножается на число участников: три агента, обменявшиеся десятью репликами, — это далеко не тридцать коротких запросов, а тридцать запросов с растущим контекстом. Счёт за тестовый прогон удивляет примерно всех.
Зацикливание — норма, а не исключение. Любая схема, где агенты решают, продолжать ли работу, рано или поздно уходит в круг. Жёсткий потолок по итерациям нужен с первого дня, а не когда счёт придёт.
Смена версии модели ломает промпты. Инструкции, вылизанные под одну версию, после обновления начинают работать иначе. Это не баг фреймворка, но эксплуатировать систему приходится с этим знанием.
Локальная отладка не предсказывает продакшен. На трёх тестовых примерах работает всё. Проблемы начинаются на реальных данных, где встречаются пустые ответы, таймауты и тексты, которые модель понимает не так.
Что ещё есть кроме этих трёх
Тройка на слуху, но выбор ей не исчерпывается, и иногда ответ лежит рядом.
Родные SDK провайдеров. У Anthropic и OpenAI есть свои средства для агентных сценариев: описание инструментов, цикл вызовов, потоковая выдача. Плюс в том, что они обновляются вместе с моделями и не отстают на релиз-другой. Минус — привязка к одному провайдеру: сменить модель на конкурента будет означать переписывание.
LlamaIndex. Изначально про работу с документами и поиск по ним, но агентная часть там тоже есть. Разумный выбор, когда главное в задаче — не координация исполнителей, а качественный поиск по большому корпусу текстов.
Semantic Kernel. Ещё один проект Microsoft, ориентированный на корпоративную разработку и .NET. Если инфраструктура вокруг уже майкрософтовская, он ляжет ровнее остальных.
Плоский цикл на своём коде. Отдельно повторим, потому что этот вариант систематически недооценивают. Восемьдесят строк, полное понимание происходящего и ноль чужих абстракций между вами и моделью.
Как выбрать за пять минут
Четыре вопроса по порядку. Первый же положительный ответ закрывает выбор.
- Вам нужен агент для работы или вы строите продукт? Если для работы — фреймворк не нужен вовсе, берите готовую платформу. Писать инфраструктуру, чтобы ей пользоваться, — это как собирать автомобиль ради поездки в магазин.
- Шагов немного и они идут по прямой? Пишите свой цикл. Вечер работы против недели на изучение чужих абстракций.
- Нужно останавливать процесс на середине и продолжать позже? LangGraph, и без вариантов — у остальных этого из коробки нет.
- Нужно показать прототип на этой неделе? CrewAI. Если задача исследовательская и от спора агентов есть польза — AutoGen.
И правило, которое сэкономит больше всего: не начинайте с самого мощного варианта. Мульти-агентная система на задаче, которая решается цепочкой из трёх шагов, обойдётся дороже, будет работать непредсказуемее и отлаживаться в разы дольше. Поднимайтесь по лестнице сложности только когда предыдущая ступень честно не справилась.
Когда фреймворк не нужен вовсе
Самый частый случай, который стоит проговорить: задача решается одним вызовом модели с парой инструментов. Тогда фреймворк добавляет зависимость, свою модель абстракций и свои баги — и не добавляет ничего взамен. Цикл «вызов модели → выполнить инструмент → вернуть результат» пишется на любом языке за вечер и полностью вам понятен.
Разумный порог такой: пока шагов немного и они идут по прямой, обходитесь своим кодом. Как только появляются ветвления, откаты, параллельные ветки и требование продолжить с середины после сбоя — берите LangGraph. Нужно быстро показать прототип — CrewAI. Задача исследовательская и требует спора — AutoGen.
И отдельный вариант, о котором забывают: если агент нужен для работы, а не для разработки продукта, писать его на фреймворке необязательно. Готовые платформы закрывают вызов инструментов, память между сессиями и выбор модели под задачу без единой строчки кода. Фреймворк — инструмент разработчика, который строит своё; для большинства прикладных задач он избыточен.