Abstract
Crew — команда агентов в CrewAI. Не один универсальный LLM, а набор специалистов: каждый со своей ролью, целью, инструментами. Решают задачу последовательно — результат одного агента кормится следующему. Оркестрация без хардкода — просто описываешь кто что делает.
Зачем crew
Один агент пытается сделать всё — и делает плохо. Context window разматывается, модель теряет фокус, инструменты конфликтуют. Crew делит задачу: Researcher ищет, Writer пишет, Reviewer проверяет. Каждый агент вызывает LLM со своим промптом, своим набором tools, своим контекстом. Результат — чище и точнее.
Как устроено
Три уровня: Agent → Task → Crew. Agent — LLM + role + goal + backstory + tools. Task — описание + expected_output + assigned_agent. Crew — список агентов + список задач + process (sequential или hierarchical).
researcher = Agent(
role="Researcher",
goal="Find relevant information",
backstory="Expert at web search",
tools=[search_tool],
llm=my_vllm
)
writer = Agent(
role="Writer",
goal="Write a summary",
backstory="Concise technical writer",
llm=my_vllm
)
crew = Crew(
agents=[researcher, writer],
tasks=[research_task, write_task],
process=Process.sequential
)Researcher отрабатывает → результат попадает в контекст Writer → финальный output.
Реальный пример
ИИбан-бот в Telegram — crew из двух агентов. Первый отвечает за对话 и memory retrieval, второй — за tool execution и форматирование. Разделение оправдано: один агент в context window 8K не вмещает и диалог, и инструменты, и системный промпт.
Проблемы
Токены. Каждый агент — отдельный LLM вызов. Crew из 3 агентов = 3x расход токенов. На локальном vLLM это бесплатно, но медленнее — sequential = сумма latency всех агентов.
Tool loops. Модель зацикливается на tool calls — вызывает инструмент, получает результат, вызывает снова. Фикс: убирать tools из запроса, если в истории уже есть tool-result message.
Souls. Роли в crew — это souls. Researcher и Writer должны звучать по-разному, иначе разница только в промпте, не в поведении.
Связанные