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.
import anthropicclient = anthropic.Anthropic()with client.messages.stream( max_tokens=1024, messages=[{"role":"user","content":"Hello"}], model="claude-opus-4-1-20250805",)as stream:for text in stream.text_stream:print(text, end="", flush=True)
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 objeto Message com content vazio.
Uma série de blocos de conteúdo, cada um dos quais tem um content_block_start, um ou mais eventos content_block_delta, e um evento content_block_stop. Cada bloco de conteúdo terá um index que corresponde ao seu índice no array content da Mensagem final.
Um ou mais eventos message_delta, indicando mudanças de nível superior no objeto Message final.
Um evento final message_stop.
As contagens de tokens mostradas no campo usage do evento message_delta são cumulativas.
Ocasionalmente podemos enviar erros no stream de eventos. Por exemplo, durante períodos de alto uso, você pode receber um overloaded_error, que normalmente corresponderia a um HTTP 529 em um contexto não-streaming:
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.
Os deltas para blocos de conteúdo tool_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:
Nota: Nossos modelos atuais suportam apenas emitir uma propriedade de chave e valor completa do 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.
Ao usar pensamento estendido com streaming habilitado, você receberá conteúdo de pensamento via eventos thinking_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
event: content_block_deltadata:{"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":"Let me solve this step by step:\n\n1. First break down 27 * 453"}}
Recomendamos fortemente que você use nossos SDKs cliente ao usar 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:
O uso de ferramentas agora suporta streaming de granularidade fina para valores de parâmetros como um recurso beta. Para mais detalhes, consulte Streaming de ferramenta de granularidade fina.
Nesta requisição, pedimos ao Claude para usar uma ferramenta para nos dizer o clima.
curl https://api.anthropic.com/v1/messages \-H"content-type: application/json"\-H"x-api-key: $ANTHROPIC_API_KEY"\-H"anthropic-version: 2023-06-01"\-d '{"model":"claude-opus-4-1-20250805","max_tokens":1024,"tools":[{"name":"get_weather","description":"Get the current weather in a given location","input_schema":{"type":"object","properties":{"location":{"type":"string","description":"The city and state, e.g. San Francisco, CA"}},"required":["location"]}}],"tool_choice":{"type":"any"},"messages":[{"role":"user","content":"What is the weather like in San Francisco?"}],"stream":true}'
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.
curl https://api.anthropic.com/v1/messages \--header"x-api-key: $ANTHROPIC_API_KEY"\--header"anthropic-version: 2023-06-01"\--header"content-type: application/json"\--data\'{"model":"claude-opus-4-1-20250805","max_tokens":1024,"stream": true,"tools":[{"type":"web_search_20250305","name":"web_search","max_uses":5}],"messages":[{"role":"user","content":"What is the weather like in New York City today?"}]}'
Response
event: message_startdata:{"type":"message_start","message":{"id":"msg_01G...","type":"message","role":"assistant","model":"claude-opus-4-1-20250805","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":2679,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":3}}}event: content_block_startdata:{"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}event: content_block_deltadata:{"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"I'll check"}}event: content_block_deltadata:{"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" the current weather in New York City for you"}}event: pingdata:{"type":"ping"}event: content_block_deltadata:{"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"."}}event: content_block_stopdata:{"type":"content_block_stop","index":0}event: content_block_startdata:{"type":"content_block_start","index":1,"content_block":{"type":"server_tool_use","id":"srvtoolu_014hJH82Qum7Td6UV8gDXThB","name":"web_search","input":{}}}event: content_block_deltadata:{"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":""}}event: content_block_deltadata:{"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"{\"query"}}event: content_block_deltadata:{"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"\":"}}event: content_block_deltadata:{"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":" \"weather"}}event: content_block_deltadata:{"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":" NY"}}event: content_block_deltadata:{"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"C to"}}event: content_block_deltadata:{"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"day\"}"}}event: content_block_stopdata:{"type":"content_block_stop","index":1}event: content_block_startdata:{"type":"content_block_start","index":2,"content_block":{"type":"web_search_tool_result","tool_use_id":"srvtoolu_014hJH82Qum7Td6UV8gDXThB","content":[{"type":"web_search_result","title":"Weather in New York City in May 2025 (New York) - detailed Weather Forecast for a month","url":"https://world-weather.info/forecast/usa/new_york/may-2025/","encrypted_content":"Ev0DCioIAxgCIiQ3NmU4ZmI4OC1k...","page_age":null},...]}}event: content_block_stopdata:{"type":"content_block_stop","index":2}event: content_block_startdata:{"type":"content_block_start","index":3,"content_block":{"type":"text","text":""}}event: content_block_deltadata:{"type":"content_block_delta","index":3,"delta":{"type":"text_delta","text":"Here's the current weather information for New York"}}event: content_block_deltadata:{"type":"content_block_delta","index":3,"delta":{"type":"text_delta","text":" City:\n\n# Weather"}}event: content_block_deltadata:{"type":"content_block_delta","index":3,"delta":{"type":"text_delta","text":" in New York City"}}event: content_block_deltadata:{"type":"content_block_delta","index":3,"delta":{"type":"text_delta","text":"\n\n"}}...event: content_block_stopdata:{"type":"content_block_stop","index":17}event: message_deltadata:{"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":10682,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":510,"server_tool_use":{"web_search_requests":1}}}event: message_stopdata:{"type":"message_stop"}
Quando uma requisição de streaming é interrompida devido a problemas de rede, timeouts ou outros erros, você pode se recuperar retomando de onde o stream foi interrompido. Esta abordagem economiza o reprocessamento de 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
Usar recursos do SDK: Aproveitar os recursos integrados de acumulação de mensagens e tratamento de erros do SDK
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.