title: “CrewAI” sidebarTitle: “CrewAI” description: “Оркестрируйте команды, потоки, агентов по ролям, инструменты, память и обратную связь от пользователей.” icon: “/images/frameworks/crewai.svg”
Установка
crewai версии 1.13 до 2.0. 1.13 — это релиз, добавивший started_event_id и нормализовавший использование токенов, на которые полагается адаптер для сопоставления событий и отчётности о токенах.
Инструментирование
instrument() регистрирует слушатель на шине событий CrewAI на уровне модуля и подписывает один обработчик на класс событий. Ничего не меняется в вашей команде, агентах, задачах или инструментах.
Что записывается
Задача ничего не испускает намеренно. Задача CrewAI — это подмножество выполнения агента, который её запускает, поэтому испускание обоих означало бы удвоение каждой строки и отображение их как сиблингов. Вместо этого id и имя задачи находятся на собственных событиях агента.
Операции с памятью и знаниями записываются как инструменты, названные по поверхности, которую они затрагивают, поэтому они появляются рядом с вашими реальными инструментами, где вы можете сравнить их латентность.
В иерархической команде вложенность делает трассу читаемой:
delegate_work_to_coworker, а не на менеджере напрямую, поэтому адаптер следует этой ссылке. Без неё каждый агент выходит сиблингом каждого другого и структура делегирования теряется.
Пример
analyst закрывается, спан writer открывается, и оба находятся внутри одного спана crew.
Назовите ваши спаны
agent_id происходит из Agent(role=...), что делает его читаемым аспектом панели управления.
agent_id — колонка низкой кардинальности. Роль, содержащая id запуска или отметку времени, деградирует её для каждого запроса, который кто-либо выполняет. Если роль выглядит как id, адаптер отказывает в её использовании и помещает реальное значение в поле полезной нагрузки вместо этого.
Управление сеансом
Разрешается в этом порядке, первое совпадение побеждает:instrument("crewai", session_id=...)- Охватывающая область
failproofai_sdk.session() - Сгенерированный
uuid4().hex, один раз на команду или поток
Параметры
session_id — единственный параметр, который читает этот адаптер. Подсказки и завершения всегда записываются, усечены до бюджета полезной нагрузки.
Человек в цикле
CrewAI имеет две поверхности человека в цикле, и обе записываются как одни и те же четыре события.@human_feedback на методе потока проходит через шину событий CrewAI: среда выполнения испускает событие перед блокировкой на человеке и другое после ответа.
Task(human_input=True) не проходит. Она вызывает input() внутри собственного поставщика входных данных CrewAI и не испускает событие никакого рода, поэтому адаптер оборачивает этого поставщика напрямую — без этого вся ожидание человека было невидимым и учитывалось как активное время агента.
В любом случае вы получаете:
agent_pause в agent_resume — единственная пара, которая питает время паузы. Без неё десятиминутное ожидание человека учитывается как десять минут активного времени агента.
CrewAI не устанавливает корреляционный id на события обратной связи от человека, поэтому адаптер сопоставляет их по имени потока и метода, переходя к наиболее недавно открытой паузе. Это корректно, потому что консольный запрос блокирует. Если вы создаёте конкурентного поставщика обратной связи, установите
request_id на оба события.Поскольку путь
Task(human_input=True) — это обёртка вокруг поставщика входных данных CrewAI, а не подписка на события, он восстанавливается на uninstrument() и повторно вызывает всё, что вызывает input(), включая KeyboardInterrupt, без изменений.Общие проблемы
Фильтр агентов имеет тысячи записей
Фильтр агентов имеет тысячи записей
role содержит UUID, отметку времени или суффикс для каждого запуска. Используйте стабильную человеческую роль и поместите id для конкретного запуска в описание задачи вместо этого.Тест читает нулевые события, но панель управления их показывает
Тест читает нулевые события, но панель управления их показывает
Шина событий асинхронна, и Это свойство CrewAI, а не SDK.
kickoff() возвращает значение перед запуском последних обработчиков. Сначала осушите её:Ничего не записывается
Ничего не записывается
Проверьте по порядку:
instrument() запустился перед kickoff(); есть with failproofai_sdk.session(): вокруг него; crewai версии 1.13 или новее; FAILPROOFAI_SDK_STRICT=1 установлен, поэтому деградированный хук вызывает исключение вместо его подавления.Далее
Как это работает
Пары, ids, жизненный цикл сеанса и доставка.
Прочитайте трассу
Следите за причинно-следственной связью через сеанс, который вы только что захватили.
Другие фреймворки
LangGraph, LlamaIndex, Pydantic AI и пользовательские агенты.

