Listeners de Evento
Acesse eventos do CrewAI para criar integrações e monitoramento personalizados
Visão Geral
O CrewAI oferece um sistema de eventos poderoso que permite escutar e reagir a diversos eventos que ocorrem durante a execução do seu Crew. Esse recurso possibilita a criação de integrações personalizadas, soluções de monitoramento, sistemas de log ou qualquer outra funcionalidade que precise ser acionada com base nos eventos internos do CrewAI.
Como Funciona
O CrewAI utiliza uma arquitetura de event bus para emitir eventos ao longo do ciclo de vida da execução. O sistema de eventos é construído a partir dos seguintes componentes:
- CrewAIEventsBus: Um event bus singleton que gerencia o registro e emissão de eventos
- BaseEvent: Classe base para todos os eventos do sistema
- BaseEventListener: Classe base abstrata para criar listeners de evento personalizados
Quando ações específicas ocorrem no CrewAI (como a inicialização de um Crew, um Agent concluindo uma tarefa ou o uso de uma ferramenta), o sistema emite os eventos correspondentes. Você pode registrar handlers para esses eventos para executar código personalizado quando eles acontecerem.
O CrewAI Enterprise fornece o recurso Prompt Tracing, que aproveita o sistema de eventos para rastrear, armazenar e visualizar todos os prompts, respostas e metadados associados. Isso proporciona poderosas capacidades de depuração e transparência nas operações dos seus agentes.
Com o Prompt Tracing você pode:
- Visualizar o histórico completo de todos os prompts enviados ao seu LLM
- Monitorar o uso de tokens e custos
- Depurar falhas de raciocínio dos agentes
- Compartilhar sequências de prompts com sua equipe
- Comparar diferentes estratégias de prompts
- Exportar rastreamentos para compliance e auditoria
Criando um Listener de Evento Personalizado
Para criar um listener de evento personalizado, você precisa:
- Criar uma classe que herde de
BaseEventListener
- Implementar o método
setup_listeners
- Registrar handles para os eventos de seu interesse
- Instanciar seu listener no arquivo apropriado
Veja um exemplo simples de uma classe de listener de evento personalizado:
Registrando Corretamente Seu Listener
Apenas definir sua classe de listener não é suficiente. É necessário criar uma instância dela e garantir que ela seja importada na sua aplicação. Isso garante que:
- Os event handlers estejam registrados no event bus
- A instância do listener permaneça em memória (não seja coletada pelo garbage collector)
- O listener esteja ativo quando os eventos forem emitidos
Opção 1: Importar e Instanciar no Seu Crew ou Implementação de Flow
O mais importante é criar uma instância do seu listener no arquivo onde seu Crew ou Flow está definido e executado:
Para Aplicações Baseadas em Crew
Crie e importe seu listener no início do arquivo de implementação do seu Crew:
Para Aplicações Baseadas em Flow
Crie e importe seu listener no início do arquivo de implementação do seu Flow:
Isso assegura que seu listener será carregado e estará ativo quando seu Crew ou Flow for executado.
Opção 2: Criar um Pacote para Seus Listeners
Para uma abordagem mais estruturada, especialmente se houver múltiplos listeners:
- Crie um pacote para seus listeners:
- Em
my_custom_listener.py
, defina sua classe de listener e crie uma instância:
- Em
__init__.py
, importe as instâncias dos listeners para garantir seu carregamento:
- Importe seu pacote de listeners no arquivo do seu Crew ou Flow:
É exatamente assim que o agentops_listener
integrado do CrewAI é registrado. No código-fonte do CrewAI, você encontrará:
Isso garante que o agentops_listener
seja carregado quando o pacote crewai.utilities.events
for importado.
Tipos de Eventos Disponíveis
O CrewAI fornece uma ampla variedade de eventos para escuta:
Eventos de Crew
- CrewKickoffStartedEvent: Emitido quando um Crew inicia a execução
- CrewKickoffCompletedEvent: Emitido quando um Crew conclui a execução
- CrewKickoffFailedEvent: Emitido quando um Crew falha ao concluir a execução
- CrewTestStartedEvent: Emitido ao iniciar o teste de um Crew
- CrewTestCompletedEvent: Emitido ao concluir o teste de um Crew
- CrewTestFailedEvent: Emitido ao falhar no teste de um Crew
- CrewTrainStartedEvent: Emitido ao iniciar o treinamento de um Crew
- CrewTrainCompletedEvent: Emitido ao concluir o treinamento de um Crew
- CrewTrainFailedEvent: Emitido ao falhar no treinamento de um Crew
Eventos de Agent
- AgentExecutionStartedEvent: Emitido quando um Agent inicia a execução de uma tarefa
- AgentExecutionCompletedEvent: Emitido quando um Agent conclui a execução de uma tarefa
- AgentExecutionErrorEvent: Emitido quando um Agent encontra um erro durante a execução
Eventos de Task
- TaskStartedEvent: Emitido ao iniciar a execução de uma Task
- TaskCompletedEvent: Emitido ao concluir a execução de uma Task
- TaskFailedEvent: Emitido ao falhar na execução de uma Task
- TaskEvaluationEvent: Emitido quando uma Task é avaliada
Eventos de Uso de Ferramentas
- ToolUsageStartedEvent: Emitido ao iniciar a execução de uma ferramenta
- ToolUsageFinishedEvent: Emitido ao concluir a execução de uma ferramenta
- ToolUsageErrorEvent: Emitido quando ocorre erro na execução de uma ferramenta
- ToolValidateInputErrorEvent: Emitido ao ocorrer erro de validação de entrada na ferramenta
- ToolExecutionErrorEvent: Emitido quando ocorre erro na execução de uma ferramenta
- ToolSelectionErrorEvent: Emitido ao ocorrer erro na seleção de uma ferramenta
Eventos de Knowledge
- KnowledgeRetrievalStartedEvent: Emitido ao iniciar recuperação de conhecimento
- KnowledgeRetrievalCompletedEvent: Emitido ao concluir recuperação de conhecimento
- KnowledgeQueryStartedEvent: Emitido ao iniciar consulta de conhecimento
- KnowledgeQueryCompletedEvent: Emitido ao concluir consulta de conhecimento
- KnowledgeQueryFailedEvent: Emitido ao falhar consulta de conhecimento
- KnowledgeSearchQueryFailedEvent: Emitido ao falhar consulta de busca de conhecimento
Eventos de Guardrail do LLM
- LLMGuardrailStartedEvent: Emitido ao iniciar validação dos guardrails. Contém detalhes do guardrail aplicado e tentativas.
- LLMGuardrailCompletedEvent: Emitido ao concluir validação dos guardrails. Contém detalhes sobre sucesso/falha na validação, resultados e mensagens de erro, se houver.
Eventos de Flow
- FlowCreatedEvent: Emitido ao criar um Flow
- FlowStartedEvent: Emitido ao iniciar a execução de um Flow
- FlowFinishedEvent: Emitido ao concluir a execução de um Flow
- FlowPlotEvent: Emitido ao plotar um Flow
- MethodExecutionStartedEvent: Emitido ao iniciar a execução de um método do Flow
- MethodExecutionFinishedEvent: Emitido ao concluir a execução de um método do Flow
- MethodExecutionFailedEvent: Emitido ao falhar na execução de um método do Flow
Eventos de LLM
- LLMCallStartedEvent: Emitido ao iniciar uma chamada LLM
- LLMCallCompletedEvent: Emitido ao concluir uma chamada LLM
- LLMCallFailedEvent: Emitido ao falhar uma chamada LLM
- LLMStreamChunkEvent: Emitido para cada chunk recebido durante respostas em streaming do LLM
Estrutura dos Handlers de Evento
Cada handler de evento recebe dois parâmetros:
- source: O objeto que emitiu o evento
- event: A instância do evento, contendo dados específicos do evento
A estrutura do objeto de evento depende do tipo do evento, mas todos herdam de BaseEvent
e incluem:
- timestamp: O horário em que o evento foi emitido
- type: Identificador do tipo do evento
Campos adicionais variam pelo tipo de evento. Por exemplo, CrewKickoffCompletedEvent
inclui os campos crew_name
e output
.
Exemplo Real: Integração com AgentOps
O CrewAI inclui um exemplo de integração com AgentOps, uma plataforma de monitoramento e observabilidade para agentes de IA. Veja como é implementado:
Esse listener inicializa uma sessão do AgentOps quando um Crew inicia, cadastra agentes no AgentOps, rastreia o uso de ferramentas e finaliza a sessão quando o Crew é concluído.
O listener AgentOps é registrado no sistema de eventos do CrewAI via importação em src/crewai/utilities/events/third_party/__init__.py
:
Isso garante que o agentops_listener
seja carregado quando o pacote crewai.utilities.events
for importado.
Uso Avançado: Handlers Escopados
Para lidar temporariamente com eventos (útil para testes ou operações específicas), você pode usar o context manager scoped_handlers
:
Casos de Uso
Listeners de evento podem ser usados para várias finalidades:
- Log e Monitoramento: Monitore a execução do seu Crew e registre eventos importantes
- Analytics: Colete dados sobre o desempenho e comportamento do seu Crew
- Depuração: Configure listeners temporários para debugar problemas específicos
- Integração: Conecte o CrewAI a sistemas externos como plataformas de monitoramento, bancos de dados ou serviços de notificação
- Comportamento Personalizado: Dispare ações personalizadas com base em eventos específicos
Boas Práticas
- Mantenha Handlers Leves: Handlers de eventos devem ser leves e evitar operações bloqueantes
- Tratamento de Erros: Implemente tratamento de erros adequado nos event handlers para evitar que exceções afetem a execução principal
- Limpeza: Se seu listener alocar recursos, garanta o devido fechamento/liberação
- Escuta Seletiva: Escute apenas eventos que realmente precisa tratar
- Testes: Teste seus listeners de evento isoladamente para garantir que se comportam conforme esperado
Aproveitando o sistema de eventos do CrewAI, é possível estender a funcionalidade e integrá-lo facilmente à sua infraestrutura existente.