CrewAI

Низкопороговый фреймворк для мультиагентных «команд»: агент описывается как должностная инструкция (role + goal + backstory + tools), задачи и процесс задают workflow. Самый быстрый способ собрать рабочий crew — ~20 строк кода. Сильная сторона — линейные пайплайны research→write→review, понятные бизнесу; слабая — дебаг циклов с feedback-loop и высокая стоимость токенов на длинных задачах.

Суть

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 — когда что