Streaming et conversations multi-tours
- Diffuser les réponses token par token pour que les utilisateurs voient la sortie immédiatement
- Comprendre pourquoi l'API est sans état et comment porter vous-même l'historique de conversation
- Poursuivre une conversation multi-tours en renvoyant tout l'échange précédent
- Empêcher les longues conversations de faire exploser la fenêtre de contexte et le coût
Construire des expériences de type chat sur l'API se résume à deux réalités pratiques : streamer pour que les utilisateurs voient la sortie immédiatement, et gérer l'historique vous-même parce que l'API est sans état. Maîtrisez les deux et votre UX de chat semblera rapide et se souviendra de tout.
Streaming
Sans streaming, l'utilisateur attend toute la réponse. Avec le streaming, les tokens arrivent au fur et à mesure de leur génération — une vitesse perçue bien meilleure.
- Utilisez l'assistant de streaming du SDK plutôt que d'analyser les événements bruts à la main — il gère pour vous le cycle de vie des événements.
- 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-tours : c'est vous qui portez l'historique
L'API n'a aucune mémoire entre les appels (pourquoi). Pour poursuivre une conversation, renvoyez tout l'échange précédent à chaque fois.
Guided walkthrough1 of 4
- Envoyez le premier message utilisateur dans la liste messages.
- Lisez le texte de la réponse de l'assistant dans le résultat.
- Ajoutez la réponse de l'assistant et le message utilisateur suivant à la même liste messages.
- Renvoyez la liste messages complète — c'est ainsi que Claude « se souvient » de l'échange.
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
Les longues conversations remplissent la fenêtre
À mesure que l'historique grandit, il consomme la fenêtre de contexte et le coût augmente. Stratégies pour le maîtriser :
- Résumez/compactez les tours plus anciens en un court récapitulatif que vous reportez.
- Élaguez les tours antérieurs non pertinents.
- Combinez avec la mise en cache des prompts pour éviter de repayer un préfixe stable.
- Chaque appel renvoie tout l'historique — les longues conversations coûtent plus cher et peuvent finir par dépasser la fenêtre de contexte si vous ne compactez ni n'élaguez jamais.
- Streamez les tokens pour une vitesse perçue rapide ; l'assistant du SDK gère le cycle de vie des événements.
- L'API est sans état — elle n'a aucune mémoire entre les appels.
- Poursuivez une conversation en ajoutant chaque tour et en renvoyant la liste messages complète.
- Compactez, élaguez et mettez en cache pour contrôler le coût et la taille des longues conversations.