Structured outputs (sortie JSON contrainte)

IA / LLM 🟡 Mid

Définition

Mécanisme qui force la réponse à respecter un JSON Schema, sans regex ni retries. Anthropic : output_config.format de type json_schema, et strict: true sur les outils pour garantir les arguments. OpenAI : text.format json_schema avec strict: true dans la Responses API. Limites Anthropic : pas de schémas récursifs ni de contraintes numériques (minimum, maximum).

Analogie

Un formulaire à cases au lieu d'une lettre libre : impossible de rendre une réponse hors format.

Exemple de code

import { z } from 'zod';
import { zodToJsonSchema } from 'zod-to-json-schema';

const Ticket = z.object({
  categorie: z.enum(['auth', 'paiement', 'design', 'autre']),
  urgence: z.enum(['basse', 'moyenne', 'haute']),
  resume: z.string(),
}).strict();

const msg = await client.messages.create({
  model: 'claude-sonnet-5', max_tokens: 300,
  output_config: { format: { type: 'json_schema', schema: zodToJsonSchema(Ticket) } },
  messages: [{ role: 'user', content: 'Ticket : le paiement CB échoue depuis hier' }],
});
const ticket = Ticket.parse(JSON.parse(msg.content[0].text)); // toujours valide

Cas d'usage

Extraction vers une base, classification, génération de configuration : tout ce qu'un programme doit parser.

Anti-pattern

Demander « réponds en JSON » dans le prompt puis parser à l'aveugle : un jour la réponse commence par « Voici le JSON : ».
#ia#api#typescript#interview

En entretien

  1. Explique-moi ce qu'est un structured output.

    C'est un mécanisme qui force la réponse du modèle à respecter un JSON Schema donné, sans avoir besoin de regex ni de retries. Chez Anthropic ça passe par output_config.format en json_schema, avec strict: true sur les outils pour garantir les arguments.

  2. Quelle différence avec juste demander « réponds en JSON » dans le prompt ?

    Demander « réponds en JSON » dans le prompt puis parser à l'aveugle finit par casser le jour où la réponse commence par « Voici le JSON : ». Le structured output garantit le format au niveau de l'API, comme un formulaire à cases plutôt qu'une lettre libre.

  3. Quelle est une limite connue des structured outputs chez Anthropic ?

    Ils ne supportent pas les schémas récursifs ni les contraintes numériques comme minimum ou maximum. Il faut en tenir compte en concevant le schéma.

Fiche mise à jour le 2026-09-27

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