Instructor aide à demander à un modèle une sortie conforme à un modèle Pydantic. Pydantic convertit et valide ensuite les types. Cette combinaison réduit le parsing artisanal, mais un objet valide peut toujours contenir un fait faux ou une décision non autorisée.
Concevoir le modèle Pydantic
Donnez des noms métier, descriptions claires, champs obligatoires et contraintes utiles. Employez enums pour un ensemble fermé, bornes pour nombres et validateurs pour les règles locales. Évitez un modèle géant rempli de valeurs facultatives : divisez la tâche en objets plus petits et observables.
Appeler et valider
Instructor adapte l’appel selon le fournisseur et la méthode structurée disponible. Épinglez versions du client, d’Instructor et de Pydantic, car les capacités diffèrent. Après validation syntaxique, appliquez les règles métier et vérifiez références, permissions ou données externes dans votre application.
Retries contrôlés
Une erreur de validation peut être renvoyée au modèle pour correction. Fixez un maximum de tentatives, un timeout et un budget. Ne rejouez jamais automatiquement une opération ayant déjà produit un effet. Conservez le type d’erreur et la réponse brute dans une trace protégée.
Tester
Ajoutez champs absents, mauvais types, enums inconnus, refus, sortie tronquée, listes énormes et Unicode. Testez aussi des objets formellement valides mais métier faux. Versionnez le modèle Pydantic lorsqu’il traverse une API ou est persisté.
FAQ
Pydantic corrige-t-il automatiquement les faits ?
Non. Il valide et convertit la structure.
Instructor fonctionne-t-il avec tous les modèles ?
Le niveau de fiabilité dépend des capacités structurées du fournisseur et du modèle.
Faut-il accepter la coercition des types ?
Seulement si elle est souhaitée ; utilisez des types stricts pour les champs sensibles.
Exemple Instructor avec validation Pydantic
~~~python import instructor from openai import OpenAI from pydantic import BaseModel, Field
class Product(BaseModel): name: str = Field(min_length=1, max_length=120) price_eur: float = Field(gt=0) confidence: float = Field(ge=0, le=1)
client = instructor.from_openai(OpenAI()) product = client.chat.completions.create( model="gpt-4.1-mini", response_model=Product, max_retries=2, messages=[{ "role": "user", "content": "Extrais : Clavier compact, 89,90 EUR.", }], ) print(product.model_dump()) ~~~
Les retries réinjectent l’erreur de validation ; fixez une limite faible et un délai global. Pydantic valide la forme, pas la vérité : contrôlez devise, catalogue, permissions et règles métier après extraction. Testez champs manquants, nombres ambigus, texte malveillant et refus du modèle.