Суть
CrewAI смотрит на MAS как на команду, а не граф (MAS Frameworks): вы «нанимаете» спец-агентов под одну бизнес-цель. Базовые объекты:
- Agent —
role(«Senior Research Analyst»),goal,backstory,tools,llm. - Task —
description,expected_output,agent(кому назначить),context(что подать на вход — обычно output другой задачи). - Crew — команда агентов + список задач + Process +
manager_llm. - Process —
sequential/hierarchical/parallel(выбираете под задачу).
Три классические роли — PM/Planner (декомпозирует, назначает), Developer (исполняет), QA/Critic (ищет дефекты).
Как работает
- Память (
memory=True) — векторное хранилище через ChromaDB: short-term (сессия), long-term (постоянная), entity memory (извлечённые сущности: люди, места, концепции). Для production-памяти между сессиями подключают Mem0. - Planning (
planning=True) — доп. фаза: отдельный LLM-запрос анализирует все задачи и строит execution plan до запуска. - allow_delegation — может ли агент делегировать подзадачи другим (в простом пайплайне выключают:
allow_delegation=False). - Дифференцированные модели: «умная» на планирование/критику, дешёвая на исполнение (см. Agent CostControl, Agent Routing).
- Минусы: токен-стоимость высокая (context передаётся между задачами); cycles с feedback-loop дебажить сложно — для жёсткого контроля берут LangGraph; streaming ограничен.
Пример
Эволюция из ноутбука курса (CRM follow-up для лидов): Stage 1 — один Writer-агент; Stage 2 — crew {Researcher, Planner, Writer, Critic}; Stage 3 — тот же crew + Mem0 (память между сессиями, scoped по user_id=lead_id).
from crewai import Agent, Task, Crew, Process, LLM
llm_strong = LLM(model="openrouter/anthropic/claude-haiku-4.5", # через OpenRouter
api_key=os.environ["OPENROUTER_API_KEY"],
base_url="https://openrouter.ai/api/v1", temperature=0.3)
writer = Agent(
role="B2B Sales Follow-up Writer",
goal="Написать персонализированное follow-up письмо лиду по истории взаимодействий.",
backstory="Опытный B2B sales-копирайтер EdTech-платформы…",
llm=llm_strong, verbose=True, allow_delegation=False,
)
crew = Crew(
agents=[researcher, planner, writer, critic],
tasks=build_tasks(lead_id),
process=Process.sequential,
manager_llm=supervisor_llm,
memory=True, # Stage 3: подключаем Mem0
memory_config={"provider": "mem0",
"config": {"user_id": lead_id, "api_key": os.environ["MEM0_API_KEY"]}},
)
result = await crew.kickoff_async()
Связано с
- MAS Frameworks — место CrewAI среди AutoGen/LangGraph/Mastra
- Multi Agent Systems — когда вообще нужна «команда»
- Multi Agent Patterns — роли исполнитель/критик, параллелизм
- Mem0 — память между сессиями для crew
- Agent CostControl — дорогая токен-стоимость как главный минус
Открытые вопросы
- на каком размере задачи token-стоимость CrewAI перестаёт окупаться
- entity memory ChromaDB vs внешний Mem0 — когда что