"stream": true para transmitir incrementalmente a resposta usando server-sent events (SSE).
Streaming com SDKs
Nossos SDKs de Python e TypeScript oferecem múltiplas formas de streaming. O SDK Python permite streams síncronos e assíncronos. Consulte a documentação em cada SDK para detalhes.Tipos de eventos
Cada server-sent event inclui um tipo de evento nomeado e dados JSON associados. Cada evento usará um nome de evento SSE (por exemplo,event: message_stop), e incluirá o type de evento correspondente em seus dados.
Cada stream usa o seguinte fluxo de eventos:
message_start: contém um objetoMessagecomcontentvazio.- Uma série de blocos de conteúdo, cada um dos quais tem um
content_block_start, um ou mais eventoscontent_block_delta, e um eventocontent_block_stop. Cada bloco de conteúdo terá umindexque corresponde ao seu índice no arraycontentda Mensagem final. - Um ou mais eventos
message_delta, indicando mudanças de nível superior no objetoMessagefinal. - Um evento final
message_stop.
As contagens de tokens mostradas no campo
usage do evento message_delta são cumulativas.Eventos ping
Streams de eventos também podem incluir qualquer número de eventosping.
Eventos de erro
Ocasionalmente podemos enviar erros no stream de eventos. Por exemplo, durante períodos de alto uso, você pode receber umoverloaded_error, que normalmente corresponderia a um HTTP 529 em um contexto não-streaming:
Example error
Outros eventos
De acordo com nossa política de versionamento, podemos adicionar novos tipos de eventos, e seu código deve lidar com tipos de eventos desconhecidos de forma elegante.Tipos de delta de bloco de conteúdo
Cada eventocontent_block_delta contém um delta de um tipo que atualiza o bloco content em um determinado index.
Delta de texto
Um delta de bloco de conteúdotext se parece com:
Text delta
Delta de JSON de entrada
Os deltas para blocos de conteúdotool_use correspondem a atualizações para o campo input do bloco. Para suportar granularidade máxima, os deltas são strings JSON parciais, enquanto o tool_use.input final é sempre um objeto.
Você pode acumular os deltas de string e analisar o JSON uma vez que receber um evento content_block_stop, usando uma biblioteca como Pydantic para fazer análise JSON parcial, ou usando nossos SDKs, que fornecem auxiliares para acessar valores incrementais analisados.
Um delta de bloco de conteúdo tool_use se parece com:
Input JSON delta
input por vez. Como tal, ao usar ferramentas, pode haver atrasos entre eventos de streaming enquanto o modelo está trabalhando. Uma vez que uma chave e valor de input são acumulados, nós os emitimos como múltiplos eventos content_block_delta com json parcial fragmentado para que o formato possa automaticamente suportar granularidade mais fina em modelos futuros.
Delta de pensamento
Ao usar pensamento estendido com streaming habilitado, você receberá conteúdo de pensamento via eventosthinking_delta. Esses deltas correspondem ao campo thinking dos blocos de conteúdo thinking.
Para conteúdo de pensamento, um evento especial signature_delta é enviado logo antes do evento content_block_stop. Esta assinatura é usada para verificar a integridade do bloco de pensamento.
Um delta de pensamento típico se parece com:
Thinking delta
Signature delta
Resposta completa de Stream HTTP
Recomendamos fortemente que você use nossos SDKs cliente ao usar o modo streaming. No entanto, se você estiver construindo uma integração direta com a API, precisará lidar com esses eventos você mesmo. Uma resposta de stream é composta por:- Um evento
message_start - Potencialmente múltiplos blocos de conteúdo, cada um dos quais contém:
- Um evento
content_block_start - Potencialmente múltiplos eventos
content_block_delta - Um evento
content_block_stop
- Um evento
- Um evento
message_delta - Um evento
message_stop
ping dispersos ao longo da resposta também. Veja Tipos de eventos para mais detalhes sobre o formato.
Requisição básica de streaming
Response
Requisição de streaming com uso de ferramenta
O uso de ferramentas agora suporta streaming de granularidade fina para valores de parâmetros como um recurso beta. Para mais detalhes, veja Streaming de ferramenta de granularidade fina.
Response
Requisição de streaming com pensamento estendido
Nesta requisição, habilitamos o pensamento estendido com streaming para ver o raciocínio passo a passo do Claude.Response
Requisição de streaming com uso de ferramenta de busca na web
Nesta requisição, pedimos ao Claude para buscar na web informações atuais sobre o clima.Response
Recuperação de erro
Quando uma requisição de streaming é interrompida devido a problemas de rede, timeouts ou outros erros, você pode recuperar retomando de onde o stream foi interrompido. Esta abordagem economiza você de reprocessar toda a resposta. A estratégia básica de recuperação envolve:- Capturar a resposta parcial: Salvar todo o conteúdo que foi recebido com sucesso antes do erro ocorrer
- Construir uma requisição de continuação: Criar uma nova requisição de API que inclui a resposta parcial do assistente como o início de uma nova mensagem do assistente
- Retomar streaming: Continuar recebendo o resto da resposta de onde foi interrompida
Melhores práticas de recuperação de erro
- Usar recursos do SDK: Aproveitar os recursos integrados do SDK de acumulação de mensagens e tratamento de erros
- Lidar com tipos de conteúdo: Estar ciente de que mensagens podem conter múltiplos blocos de conteúdo (
text,tool_use,thinking). Blocos de uso de ferramenta e pensamento estendido não podem ser parcialmente recuperados. Você pode retomar o streaming do bloco de texto mais recente.