CrewAI — фреймворк для мультиагентных систем на Python

· 3 мин чтения
multi-agent framework python llm orchestration
📂 Исходный код на GitHub

Опенсорсный Python-фреймворк CrewAI для сборки production-агентных систем: автономные Crews, событийные Flows, инструменты, память и поддержка MCP.

CrewAI — фреймворк для мультиагентных систем на Python

CrewAI — опенсорсный Python-фреймворк для мультиагентных систем. Проект описывает себя как «быстрый и гибкий фреймворк мультиагентной автоматизации». Он дает высокоуровневые абстракции и низкоуровневые API для production-сценариев. Лицензия — MIT. Требуется Python от 3.10 до 3.13. Через курсы сообщества прошло больше 100 000 сертифицированных разработчиков.

Crews и Flows: два подхода

CrewAI строится на двух взаимодополняющих примитивах.

Crews («экипажи») — команды агентов с реальной автономией. Каждый агент получает роль, цель, предысторию, набор инструментов и LLM. Агенты сами решают, как делить работу, и взаимодействуют через ролевую модель.

Flows («потоки») — событийные рабочие процессы с точным контролем. Вы описываете шаги обычным кодом на Python. Переходы задаются декораторами, состояние хранится между задачами, а условная логика пишется явно.

Идея фреймворка проста: автономность там, где она помогает, и явный контроль там, где он нужен. Crews и Flows можно комбинировать. Например, запустить Crew как один шаг внутри Flow.

Установка

CrewAI использует UV для управления зависимостями. Установите uv, затем CLI:

curl -LsSf https://astral.sh/uv/install.sh | sh
uv tool install crewai

Проверить установку можно командой uv tool list. Обновление глобального CLI:

uv tool install crewai --upgrade

Первый проект

CLI создает проект с декларативной структурой на JSON:

crewai create crew latest-ai-development
cd latest_ai_development

Структура проекта выглядит так:

my_project/
├── .env
├── agents/
│   └── researcher.jsonc
├── crew.jsonc
├── knowledge/
├── pyproject.toml
├── skills/
└── tools/

Агенты описываются в файлах agents/*.jsonc. Задачи и настройки экипажа живут в crew.jsonc. Пример агента:

{
  "role": "{topic} Senior Data Researcher",
  "goal": "Uncover cutting-edge developments in {topic}",
  "backstory": "You're a seasoned researcher who finds relevant information and presents it clearly.",
  "llm": "openai/gpt-4o",
  "tools": ["SerperDevTool"]
}

Определение задач и процесса:

{
  "name": "Latest AI Development",
  "agents": ["researcher", "reporting_analyst"],
  "tasks": [
    {
      "name": "research_task",
      "description": "Conduct thorough research about {topic}.",
      "expected_output": "A list with 10 bullet points of the most relevant information.",
      "agent": "researcher"
    },
    {
      "name": "reporting_task",
      "description": "Review the research and expand each topic into a full section.",
      "expected_output": "A markdown report with the main topics.",
      "agent": "reporting_analyst",
      "context": ["research_task"],
      "output_file": "output/report.md",
      "markdown": true
    }
  ],
  "process": "sequential",
  "inputs": { "topic": "AI Agents" }
}

Плейсхолдеры вида {topic} заполняются из блока inputs. Если значения нет, CLI спросит его при запуске. Старый каркас на Python и YAML с файлами crew.py, config/agents.yaml и config/tasks.yaml доступен через флаг --classic.

Запуск

Перед запуском положите ключ провайдера моделей в файл .env. Для веб-поиска нужен ключ Serper.dev. Затем две команды:

crewai install
crewai run

Результат появится в консоли и в файле output/report.md.

Помимо последовательного процесса (sequential) есть иерархический (hierarchical). В этом режиме фреймворк добавляет менеджера, который сам делегирует задачи и проверяет результаты.

Flows на декораторах

Flows пишутся на чистом Python. Состояние задается Pydantic-моделью. Шаги связываются декораторами @start, @listen и @router. Логические операторы or_ и and_ комбинируют условия запуска. Упрощенный пример из документации:

from crewai.flow.flow import Flow, listen, start, router
from crewai import Agent, Task, Crew, Process
from pydantic import BaseModel

class MarketState(BaseModel):
    sentiment: str = "neutral"
    confidence: float = 0.0

class AnalysisFlow(Flow[MarketState]):
    @start()
    def fetch_market_data(self):
        self.state.sentiment = "analyzing"
        return {"sector": "tech", "timeframe": "1W"}

    @listen(fetch_market_data)
    def analyze_with_crew(self, market_data):
        analyst = Agent(
            role="Senior Market Analyst",
            goal="Conduct deep market analysis",
        )
        task = Task(
            description="Analyze {sector} data for {timeframe}",
            expected_output="Market analysis with confidence score",
            agent=analyst,
        )
        crew = Crew(agents=[analyst], tasks=[task], process=Process.sequential)
        return crew.kickoff(inputs=market_data)

    @router(analyze_with_crew)
    def determine_next_steps(self):
        if self.state.confidence > 0.8:
            return "high_confidence"
        return "low_confidence"

    @listen("high_confidence")
    def execute_strategy(self):
        return "Strategy execution started"

    @listen("low_confidence")
    def request_additional_analysis(self):
        return "Additional analysis required"

Такой стиль подходит для production: рядом с агентами живет обычный Python, переходы детерминированы, а состояние под контролем.

Подключение LLM

По умолчанию агенты обращаются к OpenAI API. Фреймворк работает и с локальными моделями через Ollama и LM Studio. Все варианты подключения описаны в разделе LLM Connections документации.

CrewAI для кодинг-агентов

Отдельный интерес для тех, кто уже работает с AI-агентами в редакторе: у CrewAI есть официальный набор скиллов в репозитории crewAIInc/skills. Эти скиллы учат кодинг-агента best practices фреймворка.

Для Claude Code:

/plugin marketplace add crewAIInc/skills
/plugin install crewai-skills@crewai-plugins
/reload-plugins

Для Cursor, Codex и Windsurf установка идет через skills.sh:

npx skills add crewaiinc/skills

В комплекте четыре скилла:

  • getting-started — каркас проекта и выбор между LLM.call(), Agent, Crew и Flow;
  • design-agent — настройка агентов: роль, цель, инструменты, память, guardrails;
  • design-task — описание задач, зависимости и структурированный вывод через output_pydantic и output_json;
  • ask-docs — запросы к MCP-серверу документации CrewAI за актуальными сведениями об API.

CrewAI AMP: коммерческая обвязка

Для компаний есть надстройка CrewAI AMP Suite. Она добавляет управляемое развертывание, observability, безопасность и поддержку 24/7. Часть набора под названием Crew Control Plane доступна бесплатно через app.crewai.com. Сам опенсорсный фреймворк при этом полностью функционален без оплаты.

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

Фреймворк подходит, когда одного промпта или чат-бота мало:

  • несколько агентов с разными ролями и задачами;
  • детерминированные событийные процессы вокруг автономных агентов;
  • логика приложения на обычном Python;
  • путь от эксперимента до production без смены фреймворка;
  • инструменты, память, чекпоинты и асинхронное исполнение по мере роста системы.

Готовые примеры — генератор лендингов, планировщик поездок, анализ акций — собраны в отдельном репозитории crewAI-examples. Для вклада в проект в репозитории есть гайд для контрибьюторов.

Телеметрия

CrewAI собирает анонимную телеметрию: версии фреймворка и Python, ОС, число агентов и задач, тип процесса, название LLM. Промпты, ответы моделей, описания агентов и секреты не собираются. Телеметрию можно отключить переменной окружения OTEL_SDK_DISABLED=true.

Источник: https://github.com/crewAIInc/crewAI