Що таке CrewAI?
CrewAI — Python-фреймворк для створення команд AI-агентів. Кожен агент має роль, мету та набір інструментів. Агенти взаємодіють між собою, передаючи завдання по ланцюжку для досягнення спільної мети.
Встановлення
pip install crewai crewai-tools langchain-ollama Створення команди агентів
from crewai import Agent, Task, Crew, Process
from langchain_ollama import OllamaLLM
llm = OllamaLLM(model="llama3.2", base_url="http://localhost:11434")
# Агент-дослідник
researcher = Agent(
role="Дослідник",
goal="Збирати актуальну інформацію за темою",
backstory="Досвідчений аналітик із широким кругозором",
llm=llm,
verbose=True
)
# Агент-письменник
writer = Agent(
role="Технічний письменник",
goal="Створювати зрозумілі статті на основі досліджень",
backstory="Експерт з технічної документації",
llm=llm
)
# Завдання
task1 = Task(
description="Вивчи переваги VDS-хостингу",
expected_output="Список із 5 ключових переваг",
agent=researcher
)
task2 = Task(
description="Напиши статтю на основі дослідження",
expected_output="Стаття 300 слів",
agent=writer
)
# Запуск
crew = Crew(agents=[researcher, writer], tasks=[task1, task2], process=Process.sequential)
result = crew.kickoff()
print(result) Вбудовані інструменти CrewAI
- SerperDevTool — пошук у Google
- FileReadTool, FileWriterTool — робота з файлами
- WebsiteSearchTool — пошук по конкретному сайту
- CodeInterpreterTool — виконання Python коду
Часті помилки під час налаштування
Частина помилок CrewAI виглядає як проблема з LLM, а насправді пов'язана з внутрішніми налаштуваннями самого фреймворку — пам'яттю та процесом виконання.
Помилка авторизації OpenAI, хоча використовується Ollama
openai.AuthenticationError: Incorrect API key provided За замовчуванням CrewAI використовує ембеддинги OpenAI для короткострокової пам'яті агентів, навіть якщо основна модель — локальна через Ollama. Якщо змінна OPENAI_API_KEY не задана, під час першого звернення до пам'яті виникає ця помилка. Рішення — явно вказати локальний ембеддер у конфігурації Crew або вимкнути пам'ять, якщо вона не потрібна для конкретного завдання.
Attribute manager_llm is required для Process.hierarchical
Ієрархічний процес вимагає окремої моделі для агента-менеджера, який розподіляє завдання. Якщо передати лише process=Process.hierarchical без manager_llm, Crew завершиться помилкою валідації ще до старту. Додайте manager_llm=llm під час створення об'єкта Crew.
Sequential і Hierarchical: порівняння процесів
| Параметр | Process.sequential | Process.hierarchical |
|---|---|---|
| Порядок завдань | Строго за списком tasks | Визначає менеджер під час виконання |
| Потрібен manager_llm | Ні | Так, обов'язково |
| Передбачуваність | Висока | Нижча, залежить від рішень менеджера |
| Коли використовувати | Відомий порядок кроків | Завдання можна перерозподіляти динамічно |
Коли CrewAI не підходить
- Потрібен один прямий виклик моделі без ролей і пам'яті — оверхед фреймворку не окупається, простіше звернутися до Ollama напряму.
- Потрібен тонкий контроль над кожним кроком ланцюжка викликів — для цього краще підходить LangChain з явними ланцюжками.
- Агентам потрібно самостійно писати і виконувати довільний код у діалозі — це сильна сторона AutoGen, а не CrewAI.
- Критична затримка в десятки мілісекунд — на кожного агента в команді витрачається окремий виклик LLM, і загальний час зростає з кількістю агентів.
Перевірка, що команда агентів працює
python3 -c "import crewai; print(crewai.__version__)"
ollama list Запустіть crew з verbose=True і переконайтеся, що в логу видно переходи між агентами: кожен агент має явно отримати завдання, вивести проміжний результат і передати його далі. Якщо лог обривається після першого агента без помилки, перевірте, що expected_output описано достатньо конкретно — розпливчастий опис результату іноді змушує агента зависати у спробах його уточнити.
Ще один практичний момент — вартість за часом виконання. Навіть при використанні безкоштовної локальної моделі через Ollama кожен агент у команді додає окремий послідовний виклик LLM, і сумарний час виконання crew зростає з кількістю агентів і завдань майже лінійно. Перш ніж додавати четвертого чи п'ятого агента в команду, варто виміряти, у скільки разів зріс загальний час відповіді, і вирішити, чи виправдана додаткова спеціалізація ролей таким зростанням затримки. На практиці рідко є сенс тримати більше трьох-чотирьох агентів в одному послідовному ланцюжку — далі вигідніше переробити одне велике завдання на окремого агента, ніж дробити його ще сильніше.