Vai al contenuto principale
Per impostazione predefinita, l’Agent SDK restituisce oggetti AssistantMessage completi dopo che Claude ha terminato di generare ogni risposta. Per ricevere aggiornamenti incrementali mentre il testo e le chiamate di strumenti vengono generati, abilita lo streaming di messaggi parziali impostando include_partial_messages (Python) o includePartialMessages (TypeScript) su true nelle tue opzioni.
Questa pagina copre lo streaming di output (ricezione di token in tempo reale). Per le modalità di input (come invii messaggi), vedi Inviare messaggi agli agenti. Puoi anche trasmettere risposte utilizzando l’Agent SDK tramite la CLI.

Abilita lo streaming di output

Per abilitare lo streaming, imposta include_partial_messages (Python) o includePartialMessages (TypeScript) su true nelle tue opzioni. Questo fa sì che l’SDK restituisca messaggi StreamEvent contenenti eventi API grezzi mentre arrivano, oltre ai soliti AssistantMessage e ResultMessage. Il tuo codice deve quindi:
  1. Controllare il tipo di ogni messaggio per distinguere StreamEvent da altri tipi di messaggio
  2. Per StreamEvent, estrarre il campo event e controllare il suo type
  3. Cercare eventi content_block_delta dove delta.type è text_delta, che contengono i veri frammenti di testo
L’esempio seguente abilita lo streaming e stampa i frammenti di testo mentre arrivano. Nota i controlli di tipo annidati: prima per StreamEvent, poi per content_block_delta, poi per text_delta:

Riferimento StreamEvent

Quando i messaggi parziali sono abilitati, ricevi eventi di streaming API Claude grezzi avvolti in un oggetto. Il tipo ha nomi diversi in ogni SDK:
  • Python: StreamEvent (importa da claude_agent_sdk.types)
  • TypeScript: SDKPartialAssistantMessage con type: 'stream_event'
Entrambi contengono eventi API Claude grezzi, non testo accumulato. Devi estrarre e accumulare i delta di testo da solo. Ecco la struttura di ogni tipo:
Il campo parent_tool_use_id è sempre None in Python e null in TypeScript. Gli eventi di streaming vengono emessi solo per la sessione principale; i delta a livello di token dai subagent non vengono inoltrati. Per attribuire l’output a un subagent, utilizza messaggi completi, che contengono parent_tool_use_id. Vedi Rilevare l’invocazione di subagent. Il campo event contiene l’evento di streaming grezzo dall’API Claude. I tipi di evento comuni includono:

Flusso di messaggi

Con i messaggi parziali abilitati, ricevi messaggi in questo ordine:
Senza i messaggi parziali abilitati (include_partial_messages in Python, includePartialMessages in TypeScript), ricevi tutti i tipi di messaggio tranne StreamEvent. I tipi comuni includono SystemMessage (inizializzazione della sessione), AssistantMessage (risposte complete), ResultMessage (risultato finale) e un messaggio di confine compatto che indica quando la cronologia della conversazione è stata compattata (SDKCompactBoundaryMessage in TypeScript; SystemMessage con sottotipo "compact_boundary" in Python).

Trasmettere risposte di testo

Per visualizzare il testo mentre viene generato, cerca eventi content_block_delta dove delta.type è text_delta. Questi contengono i frammenti di testo incrementali. L’esempio seguente stampa ogni frammento mentre arriva:

Trasmettere chiamate di strumenti

Le chiamate di strumenti vengono trasmesse anche in modo incrementale. Puoi tracciare quando gli strumenti iniziano, ricevere il loro input mentre viene generato e vedere quando si completano. L’esempio seguente traccia lo strumento attualmente chiamato e accumula l’input JSON mentre viene trasmesso. Utilizza tre tipi di evento:
  • content_block_start: lo strumento inizia
  • content_block_delta con input_json_delta: i frammenti di input arrivano
  • content_block_stop: la chiamata dello strumento è completa

Costruire un’interfaccia utente di streaming

Questo esempio combina il testo e lo streaming di strumenti in un’interfaccia utente coerente. Traccia se l’agente sta attualmente eseguendo uno strumento (utilizzando un flag in_tool) per mostrare indicatori di stato come [Using Read...] mentre gli strumenti vengono eseguiti. Il testo viene trasmesso normalmente quando non è in uno strumento e il completamento dello strumento attiva un messaggio “done”. Questo modello è utile per le interfacce di chat che devono mostrare lo stato di avanzamento durante attività di agenti multi-step.

Limitazioni note

  • Structured output: il risultato JSON appare solo nel ResultMessage.structured_output finale, non come delta di streaming. Vedi structured outputs per i dettagli.

Passaggi successivi

Ora che puoi trasmettere testo e chiamate di strumenti in tempo reale, esplora questi argomenti correlati: