Мульти-агентные системы на базе LLM — когда несколько AI-агентов взаимодействуют для решения сложных задач. Без чёткой координации они превращаются в хаос: агенты дублируют работу, теряют контекст, генерируют противоречивые результаты. Мы сталкивались с этим на десятках проектов — и CrewAI стал основным инструментом для наведения порядка. За 2 года он показал себя в 50+ интеграциях, сократив время анализа на 70%.
CrewAI — фреймворк с открытым исходным кодом, вводящий понятие «crew» (команды). Каждый агент получает роль, цель и набор инструментов. Задачи делегируются по ролям, а поток выполнения управляется декларативно или иерархически. В отличие от CrewAI (официальный репозиторий), где описываются состояния и переходы, здесь просто говорится: «этот агент ищет данные, этот пишет отчёт, а менеджер проверяет качество».
Какие проблемы решает CrewAI?
Типичная боль клиента — ручной сбор данных, их разрозненность и низкая скорость подготовки аналитики. Один производственный цикл может занимать недели. CrewAI решает три ключевые проблемы:
- Координация агентов: агенты не мешают друг другу, не дублируют работу, потому что каждый знает свою роль и зависимости.
-
Контекстная память: агенты передают результаты друг другу через
contextилиmemory, сохраняя связность рассуждений. - Интеграция инструментов: десятки готовых инструментов (SerperDev, ScrapeWebsite, FileWriter) и возможность создать кастомный за пару часов.
Вот как это выглядит на практике: один клиент из финтеха попросил автоматизировать ежеквартальный конкурентный анализ. Ранее это занимало 3 недели силами 2 аналитиков, а с CrewAI — 4 часа автономной работы + 2 часа ревью. Покрытие конкурентов выросло с 5 до 12 компаний, а пропущенных значимых событий стало 0 вместо 2–3 (данные внутреннего отчёта за 2025 год).
Как мы это делаем: стек и код
Используем CrewAI, LangChain для работы с LLM, OpenAI GPT-4o или Claude 3.5 для агентов, и PostgreSQL с pgvector для RAG-памяти. Конфигурация агентов описана в YAML или прямо в Python. Вот базовая структура — определение агентов и задач:
from crewai import Agent, Task, Crew, Process from crewai_tools import SerperDevTool, ScrapeWebsiteTool, FileWriterTool from langchain_openai import ChatOpenAI llm = ChatOpenAI(model="gpt-4o", temperature=0.1) # Определение агентов researcher = Agent( role="Senior Research Analyst", goal="Найти актуальную и точную информацию по заданной теме", backstory="""Ты — аналитик-исследователь с 10-летним опытом. Специализируешься на технологическом секторе. Всегда проверяешь источники и указываешь на противоречия.""", tools=[SerperDevTool(), ScrapeWebsiteTool()], llm=llm, verbose=True, max_iter=5, # Максимум итераций агента memory=True, ) writer = Agent( role="Content Strategist", goal="Создать структурированный аналитический отчёт", backstory="Опытный технический автор, специализирующийся на бизнес-аналитике.", tools=[FileWriterTool()], llm=llm, verbose=True, ) # Определение задач research_task = Task( description="""Исследуй рынок {topic} за текущий год. Охвати: ключевых игроков, объём рынка, тренды, прогнозы. Найди минимум 5 актуальных источников.""", expected_output="Структурированные данные исследования с источниками", agent=researcher, async_execution=False, ) write_task = Task( description="""На основе предоставленного исследования создай аналитический отчёт. Формат: введение, ключевые находки (таблица), тренды, выводы. Объём: 1500–2000 слов.""", expected_output="Готовый аналитический отчёт в markdown формате", agent=writer, context=[research_task], # Использует вывод research_task как контекст output_file="report.md", ) # Создание команды crew = Crew( agents=[researcher, writer], tasks=[research_task, write_task], process=Process.sequential, # Последовательное выполнение verbose=True, ) result = crew.kickoff(inputs={"topic": "рынок LLM-решений для корпоративного сектора"}) Помимо последовательного процесса, CrewAI поддерживает иерархический, где менеджер-LLM координирует работу агентов. Вот пример:
manager_llm = ChatOpenAI(model="gpt-4o", temperature=0) hierarchical_crew = Crew( agents=[researcher, analyst, writer, qa_reviewer], tasks=[research_task, analysis_task, writing_task, review_task], process=Process.hierarchical, manager_llm=manager_llm, # LLM-менеджер принимает решения о делегировании verbose=True, ) В иерархическом режиме менеджер автоматически решает, какому агенту делегировать задачу и нужно ли переделать результат.
CrewAI Flows: императивное управление
Для сценариев с ветвлениями и циклами используем Flows — они позволяют описать логику как граф с состояниями:
from crewai.flow.flow import Flow, listen, start, router from pydantic import BaseModel class ContentState(BaseModel): topic: str = "" research_result: str = "" analysis_result: str = "" quality_score: float = 0.0 final_content: str = "" class ContentCreationFlow(Flow[ContentState]): @start() def initialize(self): print(f"Начало работы с темой: {self.state.topic}") @listen(initialize) def run_research(self): research_crew = Crew(agents=[researcher], tasks=[research_task], process=Process.sequential) result = research_crew.kickoff(inputs={"topic": self.state.topic}) self.state.research_result = result.raw @listen(run_research) def run_analysis(self): analysis_crew = Crew(agents=[analyst], tasks=[analysis_task]) result = analysis_crew.kickoff(inputs={"research": self.state.research_result}) self.state.analysis_result = result.raw @router(run_analysis) def check_quality(self): # Оцениваем качество score = evaluate_quality(self.state.analysis_result) self.state.quality_score = score if score >= 0.8: return "write_content" return "improve_analysis" @listen("improve_analysis") def improve_analysis(self): # Повторный анализ с дополнительным контекстом pass @listen("write_content") def write_final_content(self): write_crew = Crew(agents=[writer], tasks=[write_task]) result = write_crew.kickoff(inputs={"analysis": self.state.analysis_result}) self.state.final_content = result.raw flow = ContentCreationFlow() flow.kickoff(inputs={"topic": "Применение AI в логистике"}) Кастомные инструменты
Отметим: когда стандартных инструментов не хватает, пишем свои. Например, для доступа к корпоративной БД:
from crewai.tools import BaseTool from pydantic import BaseModel, Field class DatabaseQueryInput(BaseModel): sql_query: str = Field(description="SQL-запрос для выполнения") database: str = Field(description="Имя базы данных", default="analytics") class DatabaseQueryTool(BaseTool): name: str = "query_database" description: str = "Выполнить SQL-запрос к базе данных аналитики" args_schema: type[BaseModel] = DatabaseQueryInput def _run(self, sql_query: str, database: str = "analytics") -> str: # Валидация: только SELECT if not sql_query.strip().upper().startswith("SELECT"): return "Ошибка: разрешены только SELECT-запросы" result = db.execute(sql_query, database=database) return result.to_json() db_tool = DatabaseQueryTool() analyst.tools.append(db_tool) Сравнение процессов CrewAI
| Процесс | Когда использовать | Количество агентов | Сложность настройки |
|---|---|---|---|
| Sequential | Линейные задачи, простые цепочки | 2-4 | Низкая |
| Hierarchical | Сложные сценарии с менеджером | 3-10 | Средняя |
| Flows | Ветвления, циклы, условная логика | 2-20 | Высокая |
Что входит в работу
| Этап | Что делаем | Результат |
|---|---|---|
| Аналитика | Обсуждаем бизнес-задачи, определяем роли агентов и их инструменты | Техническое задание на интеграцию |
| Проектирование | Проектируем архитектуру crew: выбор process, настройка memory, инструментов | Архитектурная схема |
| Реализация | Пишем код агентов, задач, кастомные инструменты, подключаем LLM | Рабочий прототип с 2–3 агентами |
| Тестирование | Прогоняем на реальных данных, оцениваем качество вывода, latency, ошибки | Отчёт о тестировании |
| Деплой | Разворачиваем в вашей среде (AWS, GCP, on-prem), настраиваем мониторинг | Система в эксплуатации |
Как быстро настроить CrewAI: 4 шага
- Определите роли агентов (например, исследователь и писатель).
- Создайте задачи с ожидаемыми результатами.
- Выберите процесс: sequential для простых цепочек, hierarchical для сложных.
- Запустите crew и проверьте вывод на тестовом датасете.
Сроки ориентировочно
- Прототип с 3 агентами: от 2 до 4 дней.
- Production-crew с кастомными инструментами: от 1 до 2 недель.
- Сложный Flow с conditional routing: от 2 до 3 недель.
- Интеграция с корпоративными системами: +1–2 недели.
Типичные ошибки при внедрении
- Слишком широкие backstory агентов — они начинают галлюцинировать. Советуем сужать контекст до конкретной сферы.
- Игнорирование параметра
max_iter— агент может зациклиться. Выставляйте явное ограничение (5–10). - Отсутствие тестового набора данных — без него не поймать регрессию после смены модели.
Почему CrewAI стоит попробовать?
CrewAI снижает порог входа для построения мульти-агентных систем. В отличие от LangGraph, где нужно вручную описывать каждый переход, CrewAI в 5 раз быстрее для настройки базовой команды и делает 80% работы за вас. Наш опыт показывает, что первая рабочая crew собирается за пару дней, а отдача от автоматизации окупает затраты на интеграцию в течение квартала.
Свяжитесь с нами, чтобы оценить возможность интеграции CrewAI в ваш проект. Мы предоставляем гарантию на стабильность системы после деплоя и сертификаты соответствия. Закажите демо — покажем, как ваша AI-команда начнёт приносить прибыль.







