Pular para o conteúdo principal

Visão geral

O CrewAI expõe um contrato de streaming baseado em frames para runtimes que precisam de mais do que chunks de texto simples. O contrato emite objetos StreamFrame ordenados para eventos de ciclo de vida de Flow, tokens de LLM diretos, atividade de ferramentas, mensagens de conversa e eventos personalizados. Use esta API ao criar uma UI, ponte de serviço, aplicativo de terminal ou runtime de implantação que precise de um fluxo estável de eventos estruturados enquanto um Flow, turno de chat ou chamada direta de LLM está em execução.

StreamFrame

Todo frame tem o mesmo envelope:
O campo channel é a forma mais rápida de rotear frames em consumidores: frame.type preserva o tipo do evento de origem, para que consumidores possam tratar eventos específicos dentro de um canal.

Transmitir um Flow

Defina stream=True em um Flow para fazer kickoff() retornar uma sessão de stream:
Você deve consumir o stream antes de ler stream.result. Acessar o resultado cedo demais gera um RuntimeError, para que consumidores não tratem uma execução parcial como concluída. Você também pode chamar flow.stream_events(...) diretamente quando quiser streaming para uma única invocação sem definir stream=True na instância do Flow.

Filtrar por canal

StreamSession expõe projeções por canal que preservam a ordem global dos frames dentro do canal selecionado:
As projeções disponíveis são: Use stream.interleave(["flow", "llm", "messages"]) quando um consumidor quiser apenas alguns canais, mas ainda precisar da ordem relativa entre eles.

Streaming assíncrono

Use astream() para consumidores assíncronos:
A sessão assíncrona tem as mesmas projeções da sessão síncrona.

Transmitir uma chamada direta de LLM

llm.call(...) ainda retorna o resultado final montado. Use llm.stream_events(...) quando quiser iterar pelos chunks conforme eles chegam, mantendo o payload estruturado do evento:
llm.stream_events(...) ativa temporariamente o streaming para a chamada encapsulada e restaura a configuração anterior de stream do LLM depois. As integrações de provedores continuam emitindo os eventos de stream de LLM subjacentes; esse helper fornece uma API de iterador comum sobre esses eventos para todos os provedores de LLM.

Turnos conversacionais

Flows conversacionais podem transmitir um turno de usuário com stream_turn():
Durante stream_turn(), o caminho de resposta conversacional integrado ativa o streaming de tokens de LLM para esse turno e restaura a configuração anterior de stream do LLM depois. Handlers de rota personalizados que criam seus próprios agentes ou instâncias de LLM devem configurar esses LLMs para streaming se precisarem de saída em nível de token.

Limpeza

Use a sessão como gerenciador de contexto quando possível. Se um cliente se desconectar antes de o stream ser esgotado, feche a sessão explicitamente:
Para streams assíncronos, use await stream.aclose().

Streaming de chunks legado

O streaming de Crew com stream=True ainda retorna a API orientada a chunks CrewStreamingOutput descrita em Streaming da Execução de Crew. Chamadas diretas llm.call(...) ainda retornam o resultado final do LLM. O contrato de frames é destinado a runtimes que precisam de um envelope de evento estável em Flows, chamadas diretas de LLM, turnos conversacionais, ferramentas e mensagens.