Pular para o conteúdo principal
Casos de uso
  • Interfaces de chat que exibem as respostas à medida que chegam, antes de a geração terminar.
  • Geração de conteúdo longo (relatórios, código), em que esperar pela saída completa prejudica a UX.
  • Fluxos de agentes que exibem etapas de raciocínio ou chamadas de ferramentas em tempo real.
  • Redução da latência percebida em modelos lentos ou saídas grandes.

Início rápido

Habilite o streaming de respostas em tempo real para uma experiência do usuário melhor.

Configuração

Todos os modelos são compatíveis com streaming: nenhuma configuração adicional é necessária.

Formato da resposta

Chunks do streaming:
Chunk final: O último evento de um stream Responses é response.completed. Ele traz o objeto da resposta, incluindo usage e telemetry. O evento response.output_text.done marca apenas o fim do texto; por isso, continue lendo depois dele até que response.completed chegue.

Uso no chunk final

stream_options: { "include_usage": true } segue o formato da OpenAI e é aceito. Quando o stream informa o uso de tokens de toda a solicitação, ele faz isso em um chunk final após o chunk de conteúdo, enviado antes do marcador [DONE].
Leia usage do chunk que o contiver. A maioria das solicitações o envia em um chunk com um array choices vazio, mas uma solicitação que usa ferramentas de servidor o envia no chunk que também contém finish_reason; por isso, verificar usage em todos os chunks é a abordagem confiável:

Exemplos de código

Padrões de processamento de streams

Os exemplos desta seção usam o endpoint de Chat Completions. Os mesmos padrões se aplicam à Responses API: substitua chat.completions.create(...) por responses.create(...), altere o endpoint para /v3/router/responses e trate eventos response.output_text.delta em vez de choices[0].delta.content.

Processamento básico

Acumule os deltas em uma string completa e detecte a conclusão por meio de finish_reason.

Com tratamento de erros

Proteja-se contra quedas de rede e erros inesperados envolvendo o loop do stream em um try/except. O exemplo em TypeScript também reinicia um timeout a cada chunk.

Chamada de funções com streaming

Faça streaming das chamadas de ferramentas à medida que são geradas:

Exemplos de integração com a interface

Hook do React para streaming

Encapsule o estado do streaming em um hook para que os componentes recebam response e isStreaming sem precisar gerenciar o loop de eventos.
Server-Sent Events (navegador):

Otimização de desempenho

Buffer de chunks

Agrupar chunks pequenos antes de enviá-los à interface reduz os ciclos de renderização e suaviza a saída percebida.

Gerenciamento de memória

Em conclusões longas, limite o acúmulo para evitar crescimento ilimitado da memória.

Boas práticas

Gerenciamento de streams

  • Defina timeouts razoáveis (de 30 a 60 segundos).
  • Implemente limites de erro adequados.
  • Trate interrupções de rede de forma elegante.
  • Ofereça ao usuário opções de cancelamento.

Considerações de UI/UX

  • Exiba indicadores de digitação durante o streaming.
  • Permita que os usuários interrompam a geração.
  • Use buffer para chunks pequenos e obtenha uma exibição mais suave.
  • Trate atualizações rápidas com eficiência.

Exemplo de recuperação de erros

Solução de problemas

O stream é interrompido inesperadamente
  • Verifique a estabilidade da rede.
  • Confira as configurações de timeout.
  • Monitore se há limitação de taxa.
  • Verifique os limites específicos do modelo.
Desempenho lento do streaming
  • Otimize o processamento dos chunks.
  • Reduza a frequência de esvaziamento do buffer.
  • Verifique a latência da rede.
  • Reavalie a escolha do modelo.
400 em uma solicitação grande sem streaming Em solicitações para a Anthropic, uma solicitação sem streaming cujo max_tokens implique mais de 10 minutos de geração retorna 400 com type: "invalid_request_error". Defina stream: true para saídas longas ou reduza max_tokens. Problemas de memória
  • Implemente limites de tamanho de chunk.
  • Use parsers de streaming.
  • Descarte os chunks já processados.
  • Monitore o uso de memória.

Limitações

Uma solicitação de modelo com streaming é executada por até 30 minutos; um limits.max_execution_time explícito reduz esse limite. Os clientes SDK aplicam o próprio timeout de solicitação à chamada inteira, então aumente timeoutMs ou timeout_ms antes de iniciar um stream longo. Consulte Timeouts e retries. Um stream interrompido não pode ser retomado: nenhum dos endpoints oferece cursor de retomada ou replay de eventos. Reenvie a solicitação. Na Responses API, se o servidor concluiu a resposta antes da interrupção e ela ainda está armazenada, continue a partir dela com previous_response_id. Para trabalhos que precisam sobreviver a uma desconexão, use o modo em segundo plano e consulte o ID da resposta em vez de usar streaming.

Recursos avançados

Os exemplos desta seção usam o endpoint de Chat Completions. Os mesmos padrões se aplicam à Responses API: substitua chat.completions.create(...) por responses.create(...). Para cURL, use /v3/router/responses.

Streaming com outros recursos do Gateway

Recursos do AI Gateway como cache, timeouts e nomes de deployment se combinam diretamente com o streaming: adicione-os ao mesmo objeto da solicitação.

Streaming paralelo

Dispare vários streams simultaneamente usando Promise.all em TypeScript e asyncio.gather em Python para obter respostas independentes sem esperar que cada uma termine.