Skip to main content

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âmetro stream como True ao criar sua crew:
Code

Streaming Síncrono

Quando você chama kickoff() 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 objeto CrewStreamingOutput fornece várias propriedades úteis:
Code

Streaming Assíncrono

Para aplicações assíncronas, você pode usar akickoff() (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 com kickoff_for_each(), o streaming funciona de forma diferente dependendo se você usa síncrono ou assíncrono:

kickoff_for_each Síncrono

Com kickoff_for_each() síncrono, você obtém uma lista de objetos CrewStreamingOutput, um para cada entrada:
Code

kickoff_for_each_async Assíncrono

Com kickoff_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 campo chunk_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

Cancelamento e Limpeza de Recursos

CrewStreamingOutput suporta cancelamento gracioso para que o trabalho em andamento pare imediatamente quando o consumidor desconecta.

Gerenciador de Contexto Assíncrono

Code

Cancelamento Explícito

Code
Após o cancelamento, streaming.is_cancelled e streaming.is_completed são ambos True. Tanto aclose() quanto close() são idempotentes.

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
Ao aproveitar o streaming, você pode construir aplicações mais responsivas e interativas com o CrewAI, fornecendo aos usuários visibilidade em tempo real da execução dos agentes e resultados.