Streaming SSE des réponses
IA / LLM 🟡 MidDéfinition
Avec stream: true, l'API renvoie la réponse en Server-Sent Events au fil de la génération : message_start, content_block_start, content_block_delta (fragments de texte, de JSON d'outil ou de réflexion), content_block_stop, message_delta, message_stop. Le SDK Anthropic expose stream() et finalMessage() ; côté navigateur on relaie souvent ces événements via une route SSE ou un ReadableStream.
Analogie
Le sous-titrage en direct : les mots apparaissent au fur et à mesure au lieu d'attendre la fin du discours.
Exemple de code
// Route Next.js/Node qui relaie le flux au navigateur
export async function POST(req: Request) {
const { prompt } = await req.json();
const stream = client.messages.stream({
model: 'claude-sonnet-5', max_tokens: 1024,
messages: [{ role: 'user', content: prompt }],
});
const body = new ReadableStream({
async start(ctrl) {
for await (const ev of stream) {
if (ev.type === 'content_block_delta' && ev.delta.type === 'text_delta')
ctrl.enqueue(`data: ${JSON.stringify(ev.delta.text)}\n\n`);
}
ctrl.enqueue('data: [DONE]\n\n'); ctrl.close();
},
});
return new Response(body, { headers: { 'content-type': 'text/event-stream' } });
}
Cas d'usage
Toute interface conversationnelle ; obligatoire pour les grosses sorties (128 k tokens) afin d'éviter les timeouts HTTP.
Anti-pattern
Oublier le message_stop et l'usage final : on perd la facturation réelle et la raison d'arrêt.
Termes liés
Fiche mise à jour le 2026-09-27