"stream": true per trasmettere incrementalmente la risposta utilizzando eventi server-sent (SSE).
Streaming con SDK
I nostri SDK Python e TypeScript offrono diversi modi di streaming. L’SDK Python consente sia stream sincroni che asincroni. Consulta la documentazione in ogni SDK per i dettagli.Tipi di eventi
Ogni evento server-sent include un tipo di evento denominato e dati JSON associati. Ogni evento utilizzerà un nome evento SSE (ad es.event: message_stop), e includerà il type di evento corrispondente nei suoi dati.
Ogni stream utilizza il seguente flusso di eventi:
message_start: contiene un oggettoMessageconcontentvuoto.- Una serie di blocchi di contenuto, ognuno dei quali ha un
content_block_start, uno o più eventicontent_block_delta, e un eventocontent_block_stop. Ogni blocco di contenuto avrà unindexche corrisponde al suo indice nell’arraycontentdel Messaggio finale. - Uno o più eventi
message_delta, che indicano modifiche di alto livello all’oggettoMessagefinale. - Un evento finale
message_stop.
I conteggi dei token mostrati nel campo
usage dell’evento message_delta sono cumulativi.Eventi ping
I flussi di eventi possono anche includere qualsiasi numero di eventiping.
Eventi di errore
Occasionalmente potremmo inviare errori nel flusso di eventi. Ad esempio, durante periodi di utilizzo elevato, potresti ricevere unoverloaded_error, che normalmente corrisponderebbe a un HTTP 529 in un contesto non-streaming:
Esempio di errore
Altri eventi
In conformità con la nostra politica di versioning, potremmo aggiungere nuovi tipi di eventi, e il tuo codice dovrebbe gestire i tipi di eventi sconosciuti con grazia.Tipi di delta dei blocchi di contenuto
Ogni eventocontent_block_delta contiene un delta di un tipo che aggiorna il blocco content a un dato index.
Delta di testo
Un delta del blocco di contenutotext appare così:
Delta di testo
Delta JSON di input
I delta per i blocchi di contenutotool_use corrispondono agli aggiornamenti per il campo input del blocco. Per supportare la massima granularità, i delta sono stringhe JSON parziali, mentre il tool_use.input finale è sempre un oggetto.
Puoi accumulare i delta delle stringhe e analizzare il JSON una volta che ricevi un evento content_block_stop, utilizzando una libreria come Pydantic per fare il parsing JSON parziale, o utilizzando i nostri SDK, che forniscono helper per accedere ai valori incrementali analizzati.
Un delta del blocco di contenuto tool_use appare così:
Delta JSON di input
input alla volta. Pertanto, quando si utilizzano strumenti, potrebbero esserci ritardi tra gli eventi di streaming mentre il modello sta lavorando. Una volta che una chiave e valore input sono accumulati, li emettiamo come eventi multipli content_block_delta con json parziale frammentato in modo che il formato possa supportare automaticamente una granularità più fine nei modelli futuri.
Delta di pensiero
Quando si utilizza pensiero esteso con streaming abilitato, riceverai contenuto di pensiero tramite eventithinking_delta. Questi delta corrispondono al campo thinking dei blocchi di contenuto thinking.
Per il contenuto di pensiero, un evento speciale signature_delta viene inviato proprio prima dell’evento content_block_stop. Questa firma viene utilizzata per verificare l’integrità del blocco di pensiero.
Un tipico delta di pensiero appare così:
Delta di pensiero
Delta della firma
Risposta completa del flusso HTTP
Raccomandiamo vivamente di utilizzare i nostri SDK client quando si utilizza la modalità streaming. Tuttavia, se stai costruendo un’integrazione API diretta, dovrai gestire questi eventi da solo. Una risposta stream è composta da:- Un evento
message_start - Potenzialmente multipli blocchi di contenuto, ognuno dei quali contiene:
- Un evento
content_block_start - Potenzialmente multipli eventi
content_block_delta - Un evento
content_block_stop
- Un evento
- Un evento
message_delta - Un evento
message_stop
ping dispersi in tutta la risposta. Vedi Tipi di eventi per maggiori dettagli sul formato.
Richiesta di streaming di base
Risposta
Richiesta di streaming con uso di strumenti
L’uso di strumenti ora supporta lo streaming a grana fine per i valori dei parametri come funzionalità beta. Per maggiori dettagli, vedi Streaming di strumenti a grana fine.
Risposta
Richiesta di streaming con pensiero esteso
In questa richiesta, abilitiamo il pensiero esteso con streaming per vedere il ragionamento passo dopo passo di Claude.Risposta
Richiesta di streaming con uso dello strumento di ricerca web
In questa richiesta, chiediamo a Claude di cercare sul web informazioni meteorologiche attuali.Risposta
Recupero degli errori
Quando una richiesta di streaming viene interrotta a causa di problemi di rete, timeout o altri errori, puoi recuperare riprendendo da dove il flusso è stato interrotto. Questo approccio ti fa risparmiare dal dover rielaborare l’intera risposta. La strategia di recupero di base prevede:- Catturare la risposta parziale: Salva tutto il contenuto che è stato ricevuto con successo prima che si verificasse l’errore
- Costruire una richiesta di continuazione: Crea una nuova richiesta API che includa la risposta parziale dell’assistente come inizio di un nuovo messaggio dell’assistente
- Riprendere lo streaming: Continua a ricevere il resto della risposta da dove è stata interrotta
Migliori pratiche per il recupero degli errori
- Utilizza le funzionalità dell’SDK: Sfrutta le capacità integrate dell’SDK per l’accumulo dei messaggi e la gestione degli errori
- Gestisci i tipi di contenuto: Sii consapevole che i messaggi possono contenere più blocchi di contenuto (
text,tool_use,thinking). I blocchi di uso strumenti e pensiero esteso non possono essere parzialmente recuperati. Puoi riprendere lo streaming dal blocco di testo più recente.