Streaming et conversations multi-tours
Deux réalités pratiques lorsqu'on construit des expériences de type conversation sur l'API : diffuser en streaming pour que les utilisateurs voient la sortie immédiatement, et gérer l'historique vous-même car l'API est sans état.
Streaming
Sans streaming, l'utilisateur attend la réponse entière. 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 :
- Python
- TypeScript
with client.messages.stream(
model="claude-sonnet-4-6", 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-4-6", 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 détenez 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 :
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 grossit, il consomme la fenêtre de contexte et le coût augmente. Stratégies :
- Résumer/compacter les tours plus anciens en un bref récapitulatif que vous reportez.
- Élaguer les tours antérieurs non pertinents.
- Associer à la mise en cache des prompts pour éviter de repayer un préfixe stable.