Мульти-агентні системи на базі LLM — коли кілька AI-агентів взаємодіють для вирішення складних задач. Без чіткої координації вони перетворюються на хаос: агенти дублюють роботу, втрачають контекст, генерують суперечливі результати. Ми стикалися з цим на десятках проєктів — і CrewAI став основним інструментом для наведення порядку. Наша команда з 5-річним досвідом у впровадженні AI-рішень реалізувала понад 100 проєктів. За 2 роки CrewAI показав себе у 50+ інтеграціях, скоротивши час аналізу на 70%.
CrewAI — фреймворк з відкритим вихідним кодом, що вводить поняття «crew» (команди). Кожен агент отримує роль, мету та набір інструментів. Завдання делегуються за ролями, а потік виконання керується декларативно або ієрархічно. На відміну від CrewAI (офіційний репозиторій), де описуються стани та переходи, тут просто говориться: «цей агент шукає дані, цей пише звіт, а менеджер перевіряє якість». Налаштування мульти-агентних систем з CrewAI дозволяє створити команду за пару годин.
Які проблеми вирішує CrewAI?
Типовий біль клієнта — ручний збір даних, їх розрізненість та низька швидкість підготовки аналітики. Один виробничий цикл може займати тижні. CrewAI вирішує три ключові проблеми:
- Координація агентів: агенти не заважають один одному, не дублюють роботу, оскільки кожен знає свою роль та залежності.
-
Контекстна пам'ять: агенти передають результати один одному через
contextабоmemory, зберігаючи зв'язність міркувань. - Інтеграція інструментів: десятки готових інструментів (SerperDev, ScrapeWebsite, FileWriter) та можливість створити кастомний за пару годин.
Ось як це виглядає на практиці: один клієнт з фінтеху попросив автоматизувати щоквартальний конкурентний аналіз. Раніше це займало 3 тижні силами 2 аналітиків, а з CrewAI — 4 години автономної роботи + 2 години рев'ю. Покриття конкурентів зросло з 5 до 12 компаній, а пропущених значущих подій стало 0 замість 2–3 (дані внутрішнього звіту). CrewAI забезпечує в 70% швидше виконання аналізу порівняно з ручним процесом.
Як ми це робимо: стек та код
Використовуємо 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 — це інвестиція, яка швидко окупається.
Пишіть нам — оцінимо ваш проект безкоштовно. Пропонуємо рішення під ключ за 2-3 тижні. Зв'яжіться з нами, щоб оцінити можливість інтеграції CrewAI у ваш проєкт. Ми надаємо гарантію на стабільність системи після деплою та сертифікати відповідності. Замовте демо — покажемо, як ваша AI-команда почне приносити прибуток.







