Мульти-агентные системы на базе 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-команда начнёт приносить прибыль.







