Sorties structurées (Structured Outputs)
La technique de guidage qui garantit à 100 % qu'un modèle de langage respecte une grammaire formelle, un schéma JSON ou une syntaxe de programmation.
En une phrase
Section intitulée « En une phrase »Les sorties structurées sont une méthode d’inférence contrainte qui force mathématiquement le modèle à respecter une syntaxe stricte (comme un format JSON ou un tableau de base de données), rendant les erreurs de format totalement impossibles.
L’analogie
Section intitulée « L’analogie »Imagine que tu doives remplir un formulaire administratif papier très strict pour obtenir une carte d’identité.
Dans la première situation, le fonctionnaire te donne une feuille blanche vierge et te dit : « Écris ton nom, ton prénom et ta date de naissance au format Jour-Mois-Année en séparant par des tirets, et n’oublie rien ! ». Si tu es pressé, fatigué ou distrait, tu risques d’écrire la date en lettres, d’inverser le jour et le mois, ou d’ajouter une petite phrase de politesse inutile en bas de page. C’est l’approche naïve du prompt ordinaire : on espère que l’IA va bien se tenir, mais elle dérape de temps en temps.
Dans la seconde situation, le fonctionnaire te tend une tablette tactile munie de cases pré-formatées. Pour le jour, le clavier n’affiche que les chiffres de 0 à 31 ; pour le mois, uniquement de 01 à 12 ; et pour l’année, quatre chiffres obligatoires. Toutes les autres touches du clavier sont physiquement éteintes et verrouillées. Même si tu essayais d’appuyer sur la lettre « Z », rien ne s’écrirait. Tu ne peux physiquement pas rendre un formulaire mal rempli.
C’est exactement ainsi que fonctionnent les sorties structurées : elles éteignent à la volée tous les tokens du modèle qui violeraient la structure demandée.
Comment ça marche
Section intitulée « Comment ça marche »Lorsqu’un développeur souhaite intégrer un grand modèle dans une application informatique (pour alimenter une base de données, déclencher un paiement bancaire ou envoyer un courriel automatique), le modèle ne doit pas parler comme un poète bavard. Il doit renvoyer une structure de données machine parfaite, le plus souvent un objet JSON (JavaScript Object Notation).
Pendant longtemps, les ingénieurs ajoutaient des supplications dans leur prompt : « Réponds uniquement en JSON valide, sans texte d’introduction, sans balises Markdown et sans excuses ». Pourtant, sur des millions de requêtes, le modèle finissait toujours par commettre une erreur fatale dans 1 % à 10 % des cas :
- Une virgule oubliée entre deux éléments ;
- Une accolade manquante à la fin de la réponse ;
- Une clé orthographiée avec une coquille ;
- Une formule de politesse en préambule (« Bien sûr, voici votre JSON : ») qui faisait planter instantanément le programme informatique destinataire.
Le masquage des logits (Logit Masking)
Section intitulée « Le masquage des logits (Logit Masking) »Pour régler définitivement ce problème, des chercheurs (notamment Rémi Louf et Brandon Willard avec la bibliothèque open source Outlines en 2023) ont déplacé le contrôle du prompt vers le moteur d’échantillonnage lui-même.
À chaque étape où le modèle s’apprête à générer un nouveau mot, le mécanisme procède en trois temps :
- L’analyse de la grammaire (Automate fini) : Un parseur logique (qui connaît le schéma JSON attendu ou la grammaire formelle BNF) inspecte ce qui a déjà été écrit. Il calcule l’ensemble exact des tokens autorisés pour l’étape suivante. Par exemple, si le modèle vient d’écrire
{"nom": ", le parseur sait que le prochain caractère doit obligatoirement être une chaîne de texte terminée par un guillemet fermant, et jamais un chiffre ou une accolade ouvrante. - Le masquage mathématique : Dans le vecteur de logits du modèle (qui attribue un score à chacun des 32 000 ou 128 000 mots possibles du dictionnaire), tous les tokens interdits par la grammaire voient leur score arbitrairement fixé à moins l’infini ($-\infty$).
- L’échantillonnage Softmax : Lorsque la fonction Softmax transforme ces scores en pourcentages de probabilité, la probabilité d’un mot valant $-\infty$ devient mathématiquement égale à zéro absolu.
Le modèle conserve l’intégralité de son intelligence et de sa liberté pour choisir le mot le plus pertinent parmi les options valides, mais il lui est algorithmiquement impossible de violer la syntaxe.
Des grammaires flexibles : BNF et GBNF
Section intitulée « Des grammaires flexibles : BNF et GBNF »Cette technique ne se limite pas au format JSON. Grâce aux grammaires formelles en forme de Backus-Naur (BNF), particulièrement popularisées dans l’écosystème open source par le format GBNF de llama.cpp, on peut contraindre le modèle à produire :
- Des requêtes de base de données SQL garanties sans erreur de syntaxe ;
- Des formules logiques ou des expressions régulières valides ;
- Uniquement l’un des trois mots « Vrai », « Faux » ou « Incertain » pour une tâche de classification binaire stricte.
Comme les automates grammaticaux sont compilés et indexés sur les tokens du modèle avant même le lancement de la génération, le masquage ne ralentit pas le temps de calcul : le surcoût temporel est inférieur à un dixième de milliseconde par token.
Dans la vraie vie
Section intitulée « Dans la vraie vie »Les sorties structurées sont devenues la norme industrielle pour toutes les applications professionnelles de l’IA :
- L’appel d’outils et les agents autonomes : Pour qu’un agent déclenche une fonction logicielle (comme envoyer un SMS, réserver un billet de train ou lancer une recherche web), ses paramètres d’appel doivent être parfaitement typés. Les sorties structurées garantissent que l’agent ne passera jamais un texte là où le logiciel attend un nombre entier.
- L’extraction d’informations massives : Pour transformer des milliers de factures PDF numérisées ou de contrats juridiques en tableaux Excel propres, les entreprises utilisent des schémas JSON stricts : chaque montant, chaque date d’échéance et chaque raison sociale est automatiquement rangée dans la bonne colonne sans intervention humaine.
- Les interfaces utilisateurs dynamiques : Les applications web modernes demandent aux modèles de générer des arborescences de composants graphiques prêtes à être rendues à l’écran, sans aucun risque qu’une balise HTML cassée ne déforme la page.
Idées reçues
Section intitulée « Idées reçues »- « Forcer une structure stricte bride l’imagination du modèle et réduit la qualité de ses réponses. » C’est faux : la contrainte ne porte que sur le contenant syntaxique (les guillemets et les virgules), absolument pas sur le fond sémantique. Le modèle dispose de tout son espace latent pour exprimer des idées riches à l’intérieur des champs demandés.
- « Il suffit de dire “Réponds en JSON” dans le prompt pour que le système soit fiable. » C’est une illusion de sécurité. Même le modèle le plus sophistiqué du monde finit tôt ou tard par générer un JSON corrompu si l’on ne verrouille pas l’inférence par masquage de logits.
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Générer des données structurées avec les grands modèles de langage — Inria, 2024 (FR) : Une synthèse technique sur le guidage formel et les grammaires d’inférence contrainte.
- Efficient Guided Generation for Large Language Models — Brandon T. Willard et Rémi Louf (.txt / Outlines), 2023 (EN) : L’article scientifique fondateur sur l’indexation des automates finis sur les dictionnaires de tokens.
- GBNF Grammar Specification — Georgi Gerganov, llama.cpp, 2023-2024 (EN) : La documentation officielle et le guide syntaxique des grammaires formelles pour l’inférence locale.
Voir aussi
Section intitulée « Voir aussi »Voir aussi
- ÉcosystèmeAppel d'outilsLe mécanisme qui permet à un modèle de langage d'émettre des requêtes structurées pour faire exécuter du code, interroger des bases de données ou consulter des API externes.
- ÉcosystèmeAgent (IA)Un LLM à qui on laisse choisir la suite : il observe, décide d'une action, l'exécute avec un outil, lit le résultat, et recommence jusqu'à ce qu'il juge la tâche finie.
- ÉcosystèmeMCP (Model Context Protocol)Le protocole ouvert qui standardise le branchement entre une application d'IA et le monde extérieur : outils, fichiers, bases de données, API.
- FondamentauxInférenceLe moment où le modèle tourne pour de vrai : la boucle qui écrit le texte, un token à la fois, par opposition à l'entraînement où il apprend.