CrewAI или AutoGen: выбор подхода к агентам — это выбор способа координации. В CrewAI документация проекта описывает связку Flows и Crews: Flow задаёт структуру, состояние и логику, а Crew внутри шага выполняет сложную задачу командой ролей. В AutoGen официальное введение делит продукт на Core для событийных и детерминированных workflow, AgentChat для диалоговых приложений и Studio для прототипов без кода. Ниже — одинаковый вход, три черновика и условия остановки.
Сценарий и возможности фреймворка
Разделим выбранный сценарий и возможности всего фреймворка. В нашем учебном примере мы выбрали последовательный маршрут для CrewAI: сначала выделяем факты трёх заявок, затем готовим черновики, затем отдельно сверяем. Это решение автора. Документация CrewAI перечисляет у Flows управление состоянием, событийное исполнение и управление потоком с условной логикой, циклами и ветвлениями. Значит, тот же фреймворк держит и другие топологии.
Для AutoGen выбран диалоговый маршрут: участник готовит черновики, второй проверяет каждый факт, человек завершает проверку. Обсуждение ограничено назначенным числом шагов — это тоже решение автора. Официальное введение AutoGen относит к Core детерминированные и динамические агентные workflow для бизнес-процессов, исследования мультиагентной коллаборации и распределённых агентов. AgentChat строится поверх Core и требует Python 3.10+.
Практический вывод: сравнивайте не «фреймворк целиком», а конкретную топологию. Один и тот же продукт покрывает несколько схем координации, и выбранная схема описывает ваш пример. В таблице ниже — как это выглядит на нашем входе.
| Поле | Последовательный маршрут CrewAI | Диалоговый маршрут AutoGen |
|---|---|---|
| Координация примера | Факты, затем черновики, затем сверка | Участник готовит, второй проверяет |
| Ограничение сценария | Следующий этап после предыдущего | Ограничение по числу шагов |
| Другие возможности | Flows: состояние, ветвления, циклы | Core: детерминированные workflow |
| Действие во внешнем мире | Только черновик | Только черновик |
Flows, ветвления и детерминированные workflow
CrewAI Flows в документации проекта описаны как несущая конструкция приложения: они управляют состоянием и решают, что делать дальше. Flow делегирует сложную задачу Crew, агенты выполняют её совместно, возвращают результат, и Flow продолжает исполнение по этому результату. Для продакшена документация советует начинать с Flow и вызывать Crew внутри шага, когда нужна автономная команда. Простые автоматизации там закрываются одним Flow с задачами на Python.
AutoGen Core во введении на сайте проекта описан как событийный фреймворк для масштабируемых мультиагентных систем. Среди примеров сценариев названы детерминированные и динамические агентные workflow для бизнес-процессов, исследования коллаборации агентов и распределённые агенты для мультиязычных приложений. AgentChat — уровень для разговорных приложений с одним или несколькими агентами, построенный на Core.
Сопоставление по критериям:
| Критерий | CrewAI | AutoGen |
|---|---|---|
| Структура | Flow как определение процесса | Core как событийный слой |
| Состояние | Управление состоянием между шагами | Событийная модель Core |
| Ветвления и циклы | Условная логика, циклы, ветвления | Детерминированные workflow |
| Диалог | Crews с ролями и делегированием | AgentChat поверх Core |
Ошибка новичка — переносить свойства одного уровня на весь продукт. Ветвления и циклы относятся к Flows. Детерминированные workflow в AutoGen относятся к Core, а разговорный слой живёт в AgentChat. Держите это разделение, когда выбираете подход.
Одинаковый вход и три черновика
Возьмём три учебные строки заявок и один общий контракт задания. Это условный вход.
З-17 | доставка 2 коробки
З-18 | нет срока
З-19 | указан чужой email
Общий контракт задания:
Обработай только З-17/З-18/З-19. Сохрани id, факты и неизвестные поля.
Подготовь по одному черновику. Внешние действия запрещены.
Другой участник отдельно сверяет количество коробок, отсутствие
выдуманного срока и запрет отправки на чужой адрес.
Не считай остановку по лимиту успешным выполнением.
Верни таблицу id/status/facts/draft/question.
Три заполненных черновика:
| id | status | facts | draft | question |
|---|---|---|---|---|
| З-17 | NEEDS_INPUT | 2 коробки | Уточните адрес и дату доставки двух коробок | Адрес и дата неизвестны |
| З-18 | NEEDS_INPUT | срок не задан | Уточните срок выполнения вашей заявки. | Срок и вид задачи не додумывать. |
| З-19 | NEEDS_REVIEW | чужой email | Подтвердите корректный адрес получателя | Чужой email не использовать |
Оба маршрута получают этот вход и выдают эти черновики. Разница в том, кто сверяет: в последовательном маршруте сверка идёт отдельным этапом после подготовки, в диалоговом — второй участник проверяет каждый факт по ходу обсуждения. Человек завершает проверку в обоих случаях.
Успех, пауза и исчерпание лимита
Три состояния различаются по причине остановки. Успешное завершение: три строки сверены, человек разрешил следующий шаг. Пауза NEEDS_INPUT: не хватает данных, черновик задаёт вопрос. Пауза NEEDS_REVIEW: требуется решение человека, например подтверждение контакта. Исчерпание лимита: достигнут учебный предел шагов, журнал получает LIMIT_REACHED с оставшимися задачами.
Порядок действий при разборе журнала:
- Сверьте набор id с входом: ровно три сохранённых id.
- Сверьте числа: количество 2 встречается только у З-17.
- Проверьте неизвестные поля: у З-18 дата остаётся неизвестной.
- Проверьте контакт: у З-19 чужой адрес не выбран получателем.
- Проверьте отправку: ни один черновик не отправлен.
- Разрешите FINISHED только после сверки всех строк и решения человека.
Ручной эталон: ровно три id, количество 2 только у З-17, неизвестная дата у З-18, человеческая проверка контакта у З-19. Три проверки результата: сравнить набор id и все числа с входом; убедиться, что ни один черновик не отправлен и чужой адрес не выбран получателем; при достижении предела шагов выставить LIMIT_REACHED с оставшимися задачами. Результат генерации редакцией не получен — это ручной эталон учебной приёмки.
Legacy-параметры и текущая первичка
Старые имена из ранних версий не переносите в новый код. В официальном введении AutoGen есть отдельный раздел про миграцию с версии 0.2, и он вынесен в отдельную страницу. Это ориентир: сверяйте имена сущностей с текущей документацией. Для CrewAI актуальная документация описывает Flows и Crews как две основные абстракции, и на них стоит опираться при чтении примеров.
Правило проверки: любое утверждение об SDK, параметрах и статусе поддержки подтверждайте текущей первичкой — официальным введением CrewAI на docs.crewai.com и страницей AutoGen на microsoft.github.io. В нашем примере мы намеренно не используем имена параметров из старых версий и не строим на них план выполнения.
Промпт, чтобы получить такой план выполнения для своей задачи:
Ты помогаешь выбрать подход к координации агентов для задачи: [ваша задача].
Дано три входные строки: [ваши строки].
Составь план из двух маршрутов: последовательный (роли и задачи)
и диалоговый (обсуждение с проверкой).
Для каждого укажи: шаги, кто сверяет факты, где нужно подтверждение человека.
Отдельно перечисли условия остановки: успешное завершение, нехватка
ввода, человеческая проверка, исчерпание лимита шагов.
Верни таблицу: id, status, facts, draft, question.
Внешние действия запрещены.
Что менять под себя: [ваша задача], [ваши строки], число шагов обсуждения и список проверяемых полей. Вариации той же задачи: план для обработки заявок; план для разбора входящих писем; план для проверки данных перед публикацией; план для подготовки черновиков ответов; план для сверки таблиц с эталоном.
Ручная проверка перехода черновика в завершённую заявку
Подготовленный ответ и завершённая заявка — разные состояния. Черновик остаётся в очереди на проверку, пока человек не подтвердит факты. Реальная отправка начинается только после этого решения.
Для каждой из трёх заявок команда ведёт поля: status, owner, return_reason, stop_condition. Значения status — DRAFT_READY, IN_REVIEW, APPROVED, RETURNED. Поле owner хранит имя проверяющего. Поле return_reason заполняется при возврате: нехватка данных, спорный факт, чужой контакт. Поле stop_condition фиксирует причину остановки: успешное завершение, нехватка ввода, человеческая проверка, исчерпание лимита шагов.
Условие остановки для З-17 и З-18 — нехватка данных: черновик задаёт вопрос и ждёт ответа. Для З-19 — человеческая проверка контакта. Эскалация человеку срабатывает, когда проверяющий не может подтвердить факт или когда достигнут предел шагов. Переход в APPROVED возможен после сверки всех строк и решения человека. Эта процедура — выбор команды.
Частые вопросы
CrewAI или AutoGen — что выбрать для команды ролей?
CrewAI в документации проекта описывает Crews как команды автономных агентов с ролями, целями и инструментами, которые выполняют делегированные задачи. Для сценария с распределением ролей эта схема ложится напрямую. AutoGen тоже поддерживает мультиагентные приложения через AgentChat, поэтому выбор зависит от того, нужна ли вам диалоговая координация.
Можно ли в CrewAI обойтись без Crews?
Да. Документация CrewAI относит простые автоматизации к одному Flow с задачами на Python. Crew вызывается внутри шага, когда нужна автономная команда для сложной задачи. Такой маршрут снижает число участников и упрощает сверку.
Чем AutoGen Core отличается от AgentChat?
Core — событийный фреймворк для масштабируемых мультиагентных систем, включая детерминированные workflow. AgentChat — программный фреймворк для разговорных приложений с одним или несколькими агентами, построенный на Core. Studio даёт веб-интерфейс для прототипов без кода.
Как отличить успешное завершение от паузы?
Успех требует сверки всех строк и решения человека. Пауза NEEDS_INPUT означает нехватку данных, пауза NEEDS_REVIEW — необходимость человеческой проверки. Исчерпание лимита шагов даёт LIMIT_REACHED с оставшимися задачами.
Где смотреть актуальные имена API?
В официальном введении CrewAI на docs.crewai.com и на странице AutoGen на microsoft.github.io. Введение AutoGen содержит отдельный раздел о миграции с версии 0.2. Сверяйте имена сущностей с текущей первичкой перед переносом примеров.
