Streaming SSE des réponses

IA / LLM 🟡 Mid

Dé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.
#ia#api#streaming#interview

Fiche mise à jour le 2026-09-27

← → au clavier pour passer d'une fiche à l'autre