Batch API (traitement asynchrone)

IA / LLM 🟡 Mid

Définition

Endpoint qui accepte un lot de requêtes traitées en différé avec 50 % de remise sur entrée et sortie. Anthropic : jusqu'à 100 000 requêtes par lot, la plupart terminés en moins d'une heure, résultats dans n'importe quel ordre (clé custom_id). OpenAI : fichier JSONL, 50 000 requêtes et 200 Mo max, fenêtre de 24 h. Pas de streaming, pas de fast mode.

Analogie

Le tarif de nuit de l'électricité : moitié prix si l'on accepte d'attendre.

Exemple de code

const batch = await client.messages.batches.create({
  requests: articles.map(a => ({
    custom_id: `article-${a.id}`,          // clé de rapprochement
    params: {
      model: 'claude-haiku-4-5', max_tokens: 200,
      messages: [{ role: 'user', content: `Résume en 2 phrases : ${a.body}` }],
    },
  })),
});
let status = batch;
while (status.processing_status !== 'ended') {
  await new Promise(r => setTimeout(r, 30_000));
  status = await client.messages.batches.retrieve(batch.id);
}
for await (const r of await client.messages.batches.results(batch.id))
  if (r.result.type === 'succeeded') save(r.custom_id, r.result.message);

Cas d'usage

Résumés, classification, embeddings ou évaluations en masse ; jobs nocturnes sans exigence de latence.

Anti-pattern

Rapprocher les résultats par position au lieu de custom_id : l'ordre de retour n'est pas garanti.
#ia#cout#api

Fiche mise à jour le 2026-09-27

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