Streaming e conversazioni multi-turno
- Eseguire lo streaming delle risposte token per token così gli utenti vedono subito l'output
- Capire perché l'API è stateless e come gestire tu stesso la cronologia della conversazione
- Continuare una conversazione multi-turno rinviando l'intero scambio precedente
- Evitare che le conversazioni lunghe facciano esplodere la finestra di contesto e i costi
Costruire esperienze tipo chat sull'API si riduce a due realtà pratiche: usa lo streaming così gli utenti vedono subito l'output, e gestisci tu stesso la cronologia perché l'API è stateless. Padroneggia entrambe e la tua UX di chat risulterà veloce e ricorderà tutto.
Streaming
Senza streaming, l'utente attende l'intera risposta. Con lo streaming, i token arrivano man mano che vengono generati — una velocità percepita molto migliore.
- Usa l'helper di streaming dell'SDK invece di analizzare gli eventi grezzi a mano — gestisce per te il ciclo di vita degli eventi.
- Python
- TypeScript
with client.messages.stream(
model="claude-sonnet-5", max_tokens=1024,
messages=[{"role": "user", "content": "Explain RAG in two sentences."}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
const stream = client.messages.stream({
model: "claude-sonnet-5", max_tokens: 1024,
messages: [{ role: "user", content: "Explain RAG in two sentences." }],
});
for await (const event of stream) {
if (event.type === "content_block_delta") process.stdout.write(event.delta.text ?? "");
}
Multi-turno: la cronologia la tieni tu
L'API non ha memoria tra le chiamate (perché). Per continuare una conversazione, rinvia ogni volta l'intero scambio precedente.
Guided walkthrough1 of 4
- Invia il primo messaggio dell'utente nella lista messages.
- Leggi il testo della risposta dell'assistente dal risultato.
- Aggiungi la risposta dell'assistente e il messaggio successivo dell'utente alla stessa lista messages.
- Invia di nuovo la lista messages completa — è così che Claude 'ricorda' lo scambio.
messages = [{"role": "user", "content": "Hi, I'm planning a trip."}]
# ... get assistant reply, then append both turns:
messages.append({"role": "assistant", "content": assistant_text})
messages.append({"role": "user", "content": "Make it 3 days."})
# send the full `messages` list again
Le conversazioni lunghe riempiono la finestra
Man mano che la cronologia cresce, consuma la finestra di contesto e il costo aumenta. Strategie per tenerla sotto controllo:
- Riassumi/compatta i turni più vecchi in un breve riepilogo che porti avanti.
- Sfoltisci i turni precedenti non rilevanti.
- Abbina al prompt caching per evitare di ripagare un prefisso stabile.
- Ogni chiamata rinvia l'intera cronologia — le conversazioni lunghe costano di più e, se non compatti o sfoltisci mai, possono finire per superare la finestra di contesto.
- Esegui lo streaming dei token per una velocità percepita elevata; l'helper dell'SDK gestisce il ciclo di vita degli eventi.
- L'API è stateless — non ha memoria tra le chiamate.
- Continua una conversazione aggiungendo ogni turno e rinviando la lista messages completa.
- Compatta, sfoltisci e usa la cache per controllare il costo e la dimensione delle conversazioni lunghe.