LangGraph vs CrewAI vs AutoGen — что вы выберете и для каких задач?

Краткий тезис

Выбор между LangGraph, CrewAI и AutoGen зависит от сложности логики, необходимости циклов и типа коммуникации между агентами. LangGraph подходит для сложных графовых workflow с ветвлениями и циклами, CrewAI — для быстрого прототипирования multi-agent систем с ролями, AutoGen — для децентрализованных peer-to-peer диалогов. В production чаще используют LangGraph из-за гибкости, но для MVP удобнее CrewAI.


1. Термины: Agentic RAG и Multi-agent системы

Agentic RAG — это архитектура, где агенты (автономные программы с LLM) принимают решения о том, когда и как выполнять поиск, переформулировать запросы или вызывать инструменты. В отличие от простого RAG, где retrieval запускается всегда, агент может решить не искать, а ответить из памяти или уточнить вопрос.

Multi-agent система — несколько агентов, каждый со своей ролью (например, исследователь, редактор, критик), которые взаимодействуют для решения сложной задачи. Три фреймворка решают, как организовать это взаимодействие:

ФреймворкМодель коммуникацииСложностьГибкость
LangGraphГраф (узлы и рёбра)ВысокаяМаксимальная
CrewAIИерархия ролей + задачиСредняяСредняя
AutoGenPeer-to-peer (агенты общаются напрямую)Низкая-средняяВысокая (но хаотичная)

2. LangGraph: графы, циклы и сложное ветвление

LangGraph — библиотека от LangChain для построения графов состояний (state graphs). Агенты — это узлы, переходы между ними — рёбра с условиями. Главная фишка: поддержка циклов (loop) и условных ветвлений (edges|conditional edges).

Когда выбирать

  • Нужен детерминированный workflow с чёткими шагами (например, сначала retrieval, потом проверка релевантности, потом генерация, потом оценка качества).
  • Требуются циклы: агент может повторять шаг, если результат неудовлетворительный (self-reflection).
  • Сложная маршрутизация: в зависимости от запроса выбирать разные подграфы (например, для вопросов по финансам — один пайплайн, для медицины — другой).

Пример кода (упрощённый):

from langgraph.graph import StateGraph, END

class AgentState(TypedDict):
    query: str
    documents: List[str]
    answer: str

def retrieve(state: AgentState):
    # поиск документов
    return {"documents": search(state["query"])}

def generate(state: AgentState):
    # генерация ответа
    return {"answer": llm.generate(state["query"], state["documents"])}

def should_retry(state: AgentState) -> str:
    if not state["documents"]:
        return "retrieve"  # цикл: повторить поиск
    return "generate"

graph = StateGraph(AgentState)
graph.add_node("retrieve", retrieve)
graph.add_node("generate", generate)
graph.set_entry_point("retrieve")
graph.add_conditional_edges("retrieve", should_retry, {"retrieve": "retrieve", "generate": "generate"})
graph.add_edge("generate", END)

Плюсы полный контроль, поддержка параллельных узлов, встроенный мониторинг (LangSmith).
Минусы крутой порог входа, много boilerplate кода.


3. CrewAI: роли, задачи и быстрые прототипы

CrewAI — фреймворк, где вы определяете роли (role), задачи (task) и процессы (process). Агенты действуют как члены команды: один ищет, другой проверяет, третий пишет финальный ответ.

Когда выбирать

  • Нужно быстро собрать multi-agent прототип за часы, а не дни.
  • Задача естественно раскладывается на роли (исследователь, редактор, критик).
  • Не требуется сложная логика с циклами — достаточно последовательного или иерархического выполнения.

Пример кода

from crewai import Agent, Task, Crew

researcher = Agent(
    role="Исследователь",
    goal="Найти релевантные документы по запросу",
    backstory="Эксперт по поиску информации",
    tools=[search_tool]
)

writer = Agent(
    role="Писатель",
    goal="Написать ответ на основе найденных документов",
    backstory="Опытный редактор"
)

task1 = Task(description="Найти документы по теме", agent=researcher)
task2 = Task(description="Написать ответ", agent=writer)

crew = Crew(agents=[researcher, writer], tasks=[task1, task2])
result = crew.kickoff()

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


4. AutoGen: peer-to-peer диалоги

AutoGen (от Microsoft) — фреймворк, где агенты общаются напрямую, как в чате. Каждый агент может отправлять сообщения любому другому агенту. Нет центрального оркестратора — агенты сами решают, кому и что писать.

Когда выбирать

  • Задача требует динамического диалога между агентами (например, один агент задаёт уточняющие вопросы другому).
  • Агенты должны договариваться или конкурировать (например, дебаты между двумя LLM).
  • Нужна асинхронная коммуникация (агенты работают параллельно).

Пример кода

from autogen import AssistantAgent, UserProxyAgent

assistant = AssistantAgent(
    name="assistant",
    llm_config={"config_list": [{"model": "gpt-4", "api_key": "..."}]}
)

user_proxy = UserProxyAgent(
    name="user_proxy",
    human_input_mode="NEVER",
    code_execution_config=False
)

# Запуск диалога
user_proxy.initiate_chat(assistant, message="Найди информацию о LangGraph")

Плюсы естественная модель для диалогов, встроенная поддержка кода (агенты могут писать и запускать Python), хорош для исследовательских задач.
Минусы сложно контролировать порядок выполнения, трудно отлаживать (нет графа), может быть непредсказуемым.


5. Сравнительная таблица

КритерийLangGraphCrewAIAutoGen
АрхитектураГраф состоянийИерархия ролейPeer-to-peer чат
ЦиклыДа (условные рёбра)Нет (только последовательно)Да (через повторные сообщения)
ПараллелизмДа (узлы могут выполняться параллельно)Да (задачи могут быть параллельными)Да (агенты работают асинхронно)
Сложность настройкиВысокаяНизкаяСредняя
ОтладкаLangSmith, визуализация графаЛоги задачЛоги сообщений
Production-readyДа (много компаний используют)Средне (меньше опыта)Средне (активно развивается)
СообществоБольшое (LangChain)РастущееСреднее (Microsoft)

6. Практические рекомендации

Для Agentic RAG в production

  • Используйте LangGraph, если workflow сложный: нужно переформулировать запрос, проверять релевантность, повторять поиск при неудаче.
  • Используйте CrewAI, если задача простая: один агент ищет, второй пишет ответ, третий проверяет качество.

Для прототипов и хакатонов

  • CrewAI — самый быстрый старт (10 минут до первого результата).
  • AutoGen — если нужно показать диалог между агентами (например, дебаты).

Для исследовательских проектов

  • AutoGenгибкость в экспериментах с коммуникацией.
  • LangGraph — если нужно точное воспроизведение эксперимента.

Комбинирование Можно использовать LangGraph как оркестратор, а внутри узлов вызывать CrewAI или AutoGen для подзадач. Например, в узле LangGraph запускается CrewAI-команда для анализа документов.


7. Типичные ошибки при выборе

  1. Выбор AutoGen для простого последовательного пайплайна — избыточно, проще взять CrewAI.
  2. Выбор CrewAI для задачи с циклами — придётся костылить (например, вызывать агента рекурсивно), лучше сразу LangGraph.
  3. Выбор LangGraph для MVP — слишком много кода, замедлит итерации.
  4. Игнорирование мониторинга — любой фреймворк без логов и трейсинга (LangSmith, Weights & Biases) превращается в чёрный ящик.

Пет-проект для закрепления

Задача Создать multi-agent систему для ответа на вопросы по документации LangGraph, CrewAI и AutoGen. Агент-исследователь ищет информацию, агент-критик проверяет факты, агент-писатель формирует ответ.

Инструменты

Шаги:

  1. Разверните векторную БД с документацией трёх фреймворков.
  2. В LangGraph создайте граф: retrieve -> critique -> generate.
  3. В узле critique используйте CrewAI: два агента (критик и исследователь) проверяют факты.
  4. В узле generate используйте AutoGen: диалог между писателем и редактором для улучшения стиля.
  5. Добавьте цикл: если критика находит ошибку, возвращайтесь к retrieve.
  6. Запустите 10 тестовых запросов, запишите метрики (время, точность).

Ожидаемый результат

  • Работающая система, которая отвечает на вопросы по документации.
  • Сравнение: сколько времени заняла бы реализация только на одном фреймворке.
  • Вывод: LangGraph даёт контроль, CrewAI — скорость разработки, AutoGen — естественный диалог.

Связь с другими вопросами

ВопросТема
140Что такое Agentic RAG и чем отличается от обычного RAG?
141Какие паттерны multi-agent систем вы знаете?
142Как вы проектируете оркестрацию агентов?
144Какие инструменты (tools) вы даёте агентам?
146Как вы тестируете и отлаживаете multi-agent системы?
147Как обеспечить согласованность (consistency) между агентами?

Навигация