Фреймворки: LangGraph, CrewAI, AutoGen — что выбрать

Вы решили строить мультиагентную систему. Открываете поиск и находите полтора десятка фреймворков, каждый из которых обещает «production-ready multi-agent orchestration». Начинаете пробовать — и тонете в абстракциях, которые решают разные задачи разными способами.

Фреймворки: LangGraph, CrewAI, AutoGen — что выбрать

Чем грозит неправильный выбор

Без понимания разницы между фреймворками вы потеряете неделю-две. Типичный сценарий: прототип на CrewAI работает отлично, вы дотягиваете его до продакшена — и обнаруживаете, что нормального чекпоинтинга нет. Агент падает — весь прогресс теряется. Переписывать на LangGraph — ещё неделя.

Четыре фреймворка, которые стоит рассматривать в 2026 году

Остальные — либо заброшены, либо слишком нишевые. Разберём каждый из четырёх подробно.


LangGraph — графы и контроль

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

Подходит для продакшена, где важны отладка, восстановление после сбоев и прозрачность.

from langgraph.graph import StateGraph, START, END
from langgraph.prebuilt import create_react_agent
from langchain_community.llms import Ollama

researcher_llm = Ollama(model="mistral-nemo")
coder_llm = Ollama(model="qwen2.5-coder:32b")

researcher = create_react_agent(
    researcher_llm,
    tools=[search_tool, read_tool],
    prompt="Находи информацию. Возвращай факты."
)

coder = create_react_agent(
    coder_llm,
    tools=[write_tool, edit_tool],
    prompt="Пиши чистый код."
)

def supervisor(state):
    if state["needs_research"]:
        return "researcher"
    if state["needs_code"]:
        return "coder"
    return END

graph = StateGraph(AgentState)
graph.add_node("researcher", researcher)
graph.add_node("coder", coder)
graph.add_conditional_edges("supervisor", supervisor)
graph.add_edge(START, "supervisor")

app = graph.compile(checkpointer=MemorySaver())

Для типовых случаев есть сокращённый вариант через langgraph-supervisor:

from langgraph_supervisor import create_supervisor

supervisor = create_supervisor(
    agents=[researcher, coder, tester],
    model=Ollama(model="llama3.3:70b"),
    prompt="Исследуй → кодь → тестируй."
)

result = supervisor.invoke({"task": "REST API для управления задачами"})

Сильные стороны. Чекпоинтинг — агент продолжает с места остановки после сбоя. Условная маршрутизация — супервизор решает, кому передать задачу. Циклы и ветвления — полноценный граф, а не линейная цепочка. Интеграция с LangSmith для визуализации каждого шага.

Слабые. Высокий порог входа и много шаблонного кода.


CrewAI — роли и команды

CrewAI подходит к задаче иначе: агенты — это члены команды, у каждого из которых есть роль, цель и предыстория. Фреймворк проектировался так, чтобы описание системы было максимально интуитивным.

Идеален для прототипов и быстрой проверки гипотез.

from crewai import Agent, Task, Crew, LLM

local_llm = LLM(model="ollama/llama3.3:70b", base_url="http://localhost:11434")
fast_llm = LLM(model="ollama/mistral-nemo", base_url="http://localhost:11434")

researcher = Agent(
    role="Старший аналитик",
    goal="Находить актуальные данные по теме",
    backstory="10 лет в tech. Отличает маркетинг от реальности.",
    tools=[search_tool, scrape_tool],
    llm=fast_llm
)

writer = Agent(
    role="Технический писатель",
    goal="Писать чёткие статьи без воды",
    backstory="Блог на 50K подписчиков. Простой язык.",
    llm=local_llm
)

research_task = Task(
    description="Исследуй: {topic}. 5 фактов с источниками.",
    expected_output="Список фактов со ссылками.",
    agent=researcher
)

writing_task = Task(
    description="Напиши статью на основе исследования.",
    expected_output="1500-2000 слов, Markdown.",
    agent=writer,
    context=[research_task]
)

crew = Crew(agents=[researcher, writer], tasks=[research_task, writing_task])
result = crew.kickoff(inputs={"topic": "Мультиагентные системы в 2026"})

Сильные стороны. Запуск за 20 строк кода. Роли и предыстории помогают модели точнее следовать инструкциям. Больше сотни встроенных инструментов. Поддержка памяти: краткосрочной, долгосрочной и сущностной. Режим human-in-the-loop, когда агент может запросить уточнение.

Слабые. Чекпоинтинг ограничен. Для серьёзного продакшена придётся дорабатывать.


AutoGen (Microsoft) — диалоги между агентами

AutoGen построен на другом примитиве — разговоре. Агенты общаются друг с другом, как участники переписки: один предлагает, другой рецензирует, первый исправляет по замечаниям.

Лучше всего подходит для итеративных задач вроде парного программирования: код → ревью → исправление → ревью.

from autogen import ConversableAgent

coder = ConversableAgent(
    name="Кодер",
    system_message="Пишешь чистый Python. Тесты обязательны.",
    llm_config={"model": "llama3.3:70b", "base_url": "http://localhost:11434/v1"}
)

reviewer = ConversableAgent(
    name="Ревьюер",
    system_message="Ищешь баги и дыры. Всё ок — говоришь APPROVED.",
    llm_config={"model": "qwen2.5-coder:32b", "base_url": "http://localhost:11434/v1"}
)

result = coder.initiate_chat(
    reviewer,
    message="REST API на FastAPI с JWT.",
    max_turns=4
)

Сильные стороны. Естественная итерация, пары и группы, вложенные чаты. Хорош для задач, где нужно несколько раундов правок.

Слабые. Каждый ход — полный вызов модели, что дорого при частых итерациях. Нет чекпоинтинга. Со сложной логикой управления справляется плохо.


OpenAI Agents SDK — минимализм

Самый лаконичный из четырёх. Агент — это инструкции плюс инструменты. Передача задачи от одного агента другому оформляется через handoff.

Подходит, когда нужна простая цепочка без сложной оркестрации.

from agents import Agent, Runner

researcher = Agent(
    name="Исследователь",
    instructions="Находи информацию. Передавай кодеру.",
    tools=[search_tool],
    handoffs=["coder"]
)

coder = Agent(
    name="Кодер",
    instructions="Пиши код. Передавай тестеру.",
    tools=[write_tool],
    handoffs=["tester"]
)

tester = Agent(
    name="Тестер",
    instructions="Тестируй. Возвращай результат.",
    tools=[bash_tool]
)

result = Runner.run(researcher, input="CLI для GitHub API")

Сильные стороны. Открытый код, Python и TypeScript. Поддержка более сотни моделей через OpenAI-совместимый API, включая локальные через Ollama. Встроенные guardrails, трейсинг и sessions.

Слабые. Меньше контроля по сравнению с LangGraph. Проще, но и возможностей меньше.


Сравнение

LangGraph CrewAI AutoGen Agents SDK
Оркестрация Графы Роли Диалоги Handoffs
Порог входа Высокий Низкий Средний Низкий
Продакшен Отлично Средне Слабо Хорошо
Чекпоинты Да Ограниченно Нет Sessions
Отладка LangSmith Логи Логи Трейсинг
Модели Любые через Ollama Любые через Ollama Любые через Ollama OpenAI-совместимые
Параллелизм Да Да Ограничен Да
Лицензия MIT MIT Apache 2.0 MIT

Рекомендация

Если коротко:

  • Прототип → CrewAI. Самый быстрый путь от идеи до рабочей системы.
  • Продакшен → LangGraph. Надёжнее всего, хотя порог входа выше.
  • Итеративные задачи, код-ревью → AutoGen. Заточен именно под это.
  • Простая цепочка → Agents SDK. Минимум кода и абстракций.

Назад: ← Зачем нужны мультиагентные системы | Дальше: Модели →