Что такое 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 растёт с числом агентов и задач почти линейно. Перед тем как добавлять четвёртого или пятого агента в команду, стоит замерить, во сколько раз выросло общее время ответа, и решить, оправдана ли дополнительная специализация ролей этим ростом задержки. На практике редко имеет смысл держать больше трёх-четырёх агентов в одной последовательной цепочке — дальше выгоднее переработать одну крупную задачу на отдельного агента, чем дробить её ещё сильнее.