Introdução
O CrewAI fornece a capacidade de transmitir saída em tempo real durante a execução da crew, permitindo que você exiba resultados conforme são gerados, em vez de esperar que todo o processo seja concluído. Este recurso é particularmente útil para construir aplicações interativas, fornecer feedback ao usuário e monitorar processos de longa duração.Como o Streaming Funciona
Quando o streaming está ativado, o CrewAI captura respostas do LLM e chamadas de ferramentas conforme acontecem, empacotando-as em chunks estruturados que incluem contexto sobre qual task e agent está executando. Você pode iterar sobre esses chunks em tempo real e acessar o resultado final quando a execução for concluída.Ativando o Streaming
Para ativar o streaming, defina o parâmetrostream como True ao criar sua crew:
Code
Streaming Síncrono
Quando você chamakickoff() em uma crew com streaming ativado, ele retorna um objeto CrewStreamingOutput que você pode iterar para receber chunks conforme chegam:
Code
Informações do Chunk de Stream
Cada chunk fornece contexto rico sobre a execução:Code
Acessando Resultados do Streaming
O objetoCrewStreamingOutput fornece várias propriedades úteis:
Code
Streaming Assíncrono
Para aplicações assíncronas, você pode usarakickoff() (async nativo) ou kickoff_async() (baseado em threads) com iteração assíncrona:
Async Nativo com akickoff()
O método akickoff() fornece execução async nativa verdadeira em toda a cadeia:
Code
Async Baseado em Threads com kickoff_async()
Para integração async mais simples ou compatibilidade retroativa:
Code
Para cargas de trabalho de alta concorrência,
akickoff() é recomendado pois usa async nativo para execução de tasks, operações de memória e recuperação de conhecimento. Consulte o guia Iniciar Crew de Forma Assíncrona para mais detalhes.Streaming com kickoff_for_each
Ao executar uma crew para múltiplas entradas comkickoff_for_each(), o streaming funciona de forma diferente dependendo se você usa síncrono ou assíncrono:
kickoff_for_each Síncrono
Comkickoff_for_each() síncrono, você obtém uma lista de objetos CrewStreamingOutput, um para cada entrada:
Code
kickoff_for_each_async Assíncrono
Comkickoff_for_each_async() assíncrono, você obtém um único CrewStreamingOutput que produz chunks de todas as crews conforme chegam concorrentemente:
Code
Tipos de Chunk de Stream
Chunks podem ser de diferentes tipos, indicados pelo campochunk_type:
Chunks TEXT
Conteúdo de texto padrão de respostas do LLM:Code
Chunks TOOL_CALL
Informações sobre chamadas de ferramentas sendo feitas:Code
Exemplo Prático: Construindo uma UI com Streaming
Aqui está um exemplo completo mostrando como construir uma aplicação interativa com streaming:Code
Casos de Uso
O streaming é particularmente valioso para:- Aplicações Interativas: Fornecer feedback em tempo real aos usuários enquanto os agentes trabalham
- Tasks de Longa Duração: Mostrar progresso para pesquisa, análise ou geração de conteúdo
- Depuração e Monitoramento: Observar comportamento e tomada de decisão dos agentes em tempo real
- Experiência do Usuário: Reduzir latência percebida mostrando resultados incrementais
- Dashboards ao Vivo: Construir interfaces de monitoramento que exibem status de execução da crew
Notas Importantes
- O streaming ativa automaticamente o streaming do LLM para todos os agentes na crew
- Você deve iterar através de todos os chunks antes de acessar a propriedade
.result - Para
kickoff_for_each_async()com streaming, use.results(plural) para obter todas as saídas - O streaming adiciona overhead mínimo e pode realmente melhorar a performance percebida
- Cada chunk inclui contexto completo (task, agente, tipo de chunk) para UIs ricas
Tratamento de Erros
Trate erros durante a execução com streaming:Code
