Busque em todas as páginas da documentação
9 exemplos para você começar com Respostas de Streaming - 6 básicos e 3 intermediários.
pip install anthropic.export ANTHROPIC_API_KEY=sk-ant-....client = anthropic.Anthropic(), que lê a chave do ambiente automaticamente.A chamada de streaming mais simples possível: abra um stream e imprima cada fragmento de texto conforme ele chega.
import anthropic
client = anthropic.Anthropic()
with client.messages.stream(
model="claude-sonnet-5",
max_tokens=512,
messages=[{"role": "user", "content": "Escreva um haicai sobre rios."}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
print()client.messages.stream(...) retorna um gerenciador de contexto, não um objeto de resposta.stream.text_stream é um iterador de conveniência que produz apenas os fragmentos de texto, ignorando outros tipos de evento.flush=True é importante aqui - sem ele, o Python pode armazenar a saída em buffer e frustrar o propósito do streaming.Relacionado: Como os Eventos Enviados do Servidor Potencializam as Respostas de Streaming do Claude - o que está acontecendo sob este loop.
Desça de text_stream para o iterador de eventos brutos para ver cada tipo de evento conforme ele chega.
import anthropic
client = anthropic.Anthropic()
with client.messages.stream(
model="claude-sonnet-5",
max_tokens=256,
messages=[{"role": "user", "content": "Nomeie três números primos."}],
) as
stream diretamente (em vez de stream.text_stream) produz cada evento SSE: message_start, content_block_start, content_block_delta, content_block_stop, message_delta, message_stop.stream.text_stream é construído sobre este mesmo iterador, filtrando eventos text_delta.Após o streaming, recupere o objeto Message completo exatamente como uma chamada não-streaming retornaria.
import anthropic
client = anthropic.Anthropic()
with client.messages.stream(
model="claude-sonnet-5",
max_tokens=256,
messages=[{"role": "user", "content": "Resuma a fotossíntese em uma frase."}],
) as
get_final_message() deve ser chamado após o stream ter sido totalmente consumido (dentro ou após o término da iteração do bloco with).Message que você obteria de client.messages.create(...) sem streaming - útil quando você deseja renderização ao vivo e o objeto final para registro.final_message.usage fornece as contagens de tokens que só se tornam finais quando a geração para.Filtre explicitamente por event.type em vez de depender de text_stream, que é o padrão que você estenderá para uso de ferramentas e raciocínio.
import anthropic
client = anthropic.Anthropic()
with client.messages.stream(
model="claude-sonnet-5",
max_tokens=256,
messages=[{"role": "user", "content": "Qual é o ponto de ebulição da água ao nível do mar?"}],
) as
content_block_delta é um invólucro genérico - sempre verifique event.delta.type também, pois pode ser text_delta, input_json_delta ou thinking_delta.message_stop é um local confiável para executar a lógica de limpeza de "stream finalizado" (fechar um spinner de UI, descarregar um buffer).O streaming funciona com a mesma forma de solicitação de uma chamada normal - prompts do sistema e histórico de várias voltas incluídos.
import anthropic
client = anthropic.Anthropic()
with client.messages.stream(
model="claude-sonnet-5",
max_tokens=300,
system="Você é um escritor técnico conciso. Responda em duas frases ou menos.",
messages=[
{"role": "user",
system e messages são passados exatamente como em uma chamada client.messages.create(...) não-streaming - o streaming muda a entrega, não a forma da solicitação.user/assistant na lista messages, como sempre.max_tokens razoável para uma demonstração de streaming - um limite menor significa uma saída ao vivo mais curta e fácil de ler.Envolva o stream em um try/except para que um erro de API no meio do stream não trave o processo inteiro silenciosamente.
import anthropic
client = anthropic.Anthropic()
try:
with client.messages.stream(
model="claude-sonnet-5",
max_tokens=200,
messages=[{"role": "user", "content": "Explique o rate limiting brevemente."}],
anthropic.APIStatusError (e suas subclasses como RateLimitError) podem surgir em qualquer ponto durante a iteração, não apenas quando a solicitação é enviada inicialmente.with, não apenas a chamada inicial, é o que captura erros levantados no meio do stream.Combine text_stream com uma contagem de caracteres em execução para acionar um indicador de progresso simples.
import anthropic
client = anthropic.Anthropic()
def stream_with_progress(prompt: str) -> str:
chars = 0
chunks = []
with client.messages.stream(
model="claude-sonnet-5",
max_tokens=500,
\r permite que o contador de progresso se atualize no local em um terminal.print.message_deltaLeia o uso de tokens que só fica disponível quando o modelo termina de gerar.
import anthropic
client = anthropic.Anthropic()
with client.messages.stream(
model="claude-sonnet-5",
max_tokens=300,
messages=[{"role": "user", "content": "Liste três benefícios de APIs de streaming."}],
) as
message_delta carregam stop_reason e usage cumulativo - campos que não são conhecidos até que a geração esteja terminando.message_start); contagens de tokens de saída finalizam em message_delta.get_final_message(), permite rastrear o custo em tempo quase real para streams de longa duração.asyncioUse o cliente assíncrono para executar dois streams independentes ao mesmo tempo, em vez de um após o outro.
import asyncio
import anthropic
async_client = anthropic.AsyncAnthropic()
async def stream_one(prompt: str, label: str) -> None:
async with async_client.messages.stream(
model="claude-sonnet-5",
max_tokens=200,
anthropic.AsyncAnthropic() espelha a API do cliente síncrono, mas cada método de stream é aguardado com async with / async for.asyncio.gather executa ambos os streams concorrentemente em conexões separadas, o que é mais rápido do que chamadas síncronas sequenciais quando você tem vários prompts independentes.Relacionado: Escolhendo Entre Anthropic e AsyncAnthropic em Código de Produção - quando usar o cliente assíncrono.
Versões da Pilha: Escrito contra a linha de modelos Claude atual em aproximadamente junho de 2026 - Claude Fable 5, Claude Opus 4.8, Claude Sonnet 5 (o padrão) e Claude Haiku 4.5 - e o SDK oficial
anthropicpara Python (última versão 0.x). Nomes de modelos, versões de SDK e preços mudam rapidamente - verifique os detalhes atuais em platform.claude.com/docs antes de confiar neles.