Transmissão de Mensagens
Ao criar uma Mensagem, você pode definir "stream": true
para transmitir incrementalmente a resposta usando eventos enviados pelo servidor (SSE).
Transmissão com SDKs
Nossos SDKs de Python e TypeScript oferecem múltiplas formas de transmissão. O SDK Python permite transmissões síncronas e assíncronas. Veja a documentação em cada SDK para detalhes.
Tipos de eventos
Cada evento enviado pelo servidor 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 transmissão usa o seguinte fluxo de eventos:
message_start
: contém um objetoMessage
comcontent
vazio.- Uma série de blocos de conteúdo, cada um com um
content_block_start
, um ou mais eventoscontent_block_delta
, e um eventocontent_block_stop
. Cada bloco de conteúdo terá umindex
que corresponde ao seu índice no array final decontent
da Mensagem. - Um ou mais eventos
message_delta
, indicando mudanças de nível superior no objetoMessage
final. - Um evento final
message_stop
.
Eventos de ping
As transmissões de eventos também podem incluir qualquer número de eventos ping
.
Eventos de erro
Ocasionalmente, podemos enviar erros na transmissão 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 sem transmissão:
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 adequada.
Tipos de delta
Cada evento content_block_delta
contém um delta
de um tipo que atualiza o bloco de content
em um determinado index
.
Delta de texto
Um delta de bloco de conteúdo text
se parece com:
Delta de JSON de entrada
Os deltas para blocos de conteúdo tool_use
correspondem a atualizações para o campo input
do bloco. Para suportar máxima granularidade, os deltas são strings JSON parciais, enquanto o tool_use.input
final é sempre um objeto.
Você pode acumular as strings delta e analisar o JSON assim 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 só suportam a emissão de uma propriedade completa de chave e valor do input
por vez. Assim, ao usar ferramentas, pode haver atrasos entre eventos de transmissão 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 em chunks para que o formato possa automaticamente suportar granularidade mais fina em modelos futuros.
Resposta de transmissão HTTP bruta
Recomendamos fortemente que use nossos SDKs cliente ao usar o modo de transmissão. No entanto, se você estiver construindo uma integração direta com a API, precisará lidar com esses eventos você mesmo.
Uma resposta de transmissão é composta por:
- Um evento
message_start
- Potencialmente múltiplos blocos de conteúdo, cada um contendo:
a. Um evento
content_block_start
b. Potencialmente múltiplos eventoscontent_block_delta
c. Um eventocontent_block_stop
- Um evento
message_delta
- Um evento
message_stop
Pode haver eventos ping
dispersos por toda a resposta também. Veja Tipos de eventos para mais detalhes sobre o formato.
Requisição básica de transmissão
Requisição de transmissão com uso de ferramenta
Nesta requisição, pedimos ao Claude para usar uma ferramenta para nos dizer o clima.