Le problème
Les LLM sont excellents pour générer du texte, mais les applications nécessitent souvent des données structurées — objets JSON, tableaux, valeurs typées. Obtenir une sortie structurée fiable nécessite des techniques spécifiques.
Approche 1 : Ingénierie de prompts
Demandez au modèle de répondre au format JSON :
- Spécifiez le schéma exact dans la demande.
- Inclure un exemple de paire entrée/sortie.
- Ajouter « Répondre uniquement avec un JSON valide. Aucune explication. »
Approche 2 : Appel de fonction / Utilisation de l’outil
La plupart des API majeures prennent désormais en charge l’appel de fonctions :
- Définir un schéma JSON pour la sortie attendue.
- Le modèle est contraint à la sortie correspondant au schéma.
- Fonctionne avec OpenAI, Anthropic, Google et la plupart des fournisseurs.
Approche 3 : Décodage contraint
Des bibliothèques comme Outlines et LMQL obligent le modèle à produire une sortie valide :
- Définir un modèle pydantique ou un schéma JSON.
- Le processus de décodage fait respecter le schéma token par token.
- Garantie à 100 % d’une structure de sortie valide.
Approche 4 : Bibliothèque Instructor
La bibliothèque Instructor enveloppe toute API LLM avec une validation Pydantic :
- Définir votre modèle de données avec Pydantic.
- La bibliothèque Instructor gère automatiquement les nouvelles tentatives et les validations.
- Fonctionne avec OpenAI, Anthropic, Gemini et des modèles locaux.
Meilleures pratiques
- Toujours valider la sortie par rapport à un schéma.
- Utiliser les types d’enum pour les champs aux options limitées.
- Inclure la logique de réessai pour les réponses malformées.
- Garder les schémas simples — les structures imbriquées augmentent les taux d’erreur.
- Tester avec 50+ exemples pour mesurer la fiabilité.