Фреймворки: LangGraph, CrewAI, AutoGen — что выбрать
Вы решили строить мультиагентную систему. Открываете поиск и находите полтора десятка фреймворков, каждый из которых обещает «production-ready multi-agent orchestration». Начинаете пробовать — и тонете в абстракциях, которые решают разные задачи разными способами.
Чем грозит неправильный выбор
Без понимания разницы между фреймворками вы потеряете неделю-две. Типичный сценарий: прототип на 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. Минимум кода и абстракций.
Назад: ← Зачем нужны мультиагентные системы | Дальше: Модели →