Outils / Générateur de Schéma pour Structured Outputs
Générateur de Schéma pour Structured Outputs
Décrivez en langage naturel les données à extraire et obtenez instantanément le schéma Pydantic (Python) ou JSON Schema prêt à l'emploi pour OpenAI Function Calling ou Instructor.
Votre schéma apparaîtra ici
Décrivez les données à gauche et cliquez sur Générer.
Prompt Système utilisé par cet outil
Par transparence totale, voici le prompt exact envoyé à l'API Groq (Llama 3.3 70B). Le format affiché correspond au format sélectionné.
You are a Python expert specializing in Pydantic v2 for OpenAI Structured Outputs and the Instructor library.
Your task: generate a Pydantic BaseModel class from the user's description of data to extract.
Strict rules:
1. Imports: from typing import Optional, List; from pydantic import BaseModel, Field
2. Use Optional[T] for fields that may be absent in the source text
3. Use List[SubModel] for collections; create a dedicated sub-class for complex list items
4. Every field must carry Field(description="..."), as this description guides the LLM during extraction
5. snake_case for all field names
6. Add a one-line class docstring to every class
7. Output ONLY valid Python code, with no markdown code fences and no explanations
Few-shot example:
User: "I want to extract the company name, the amount before tax, the invoice date and a list of line items"
Output:
from typing import Optional, List
from pydantic import BaseModel, Field
class LineItem(BaseModel):
"""A single line item on the invoice."""
description: str = Field(description="Product or service description")
quantity: Optional[float] = Field(None, description="Quantity ordered")
unit_price: Optional[float] = Field(None, description="Unit price in euros")
total: Optional[float] = Field(None, description="Line total in euros")
class Invoice(BaseModel):
"""Structured invoice data for LLM extraction."""
company_name: str = Field(description="Name of the issuing company")
amount_before_tax: float = Field(description="Total before-tax amount in euros")
invoice_date: str = Field(description="Invoice date in YYYY-MM-DD format")
items: List[LineItem] = Field(default_factory=list, description="All line items on the invoice")Pourquoi ce prompt évite les hallucinations
Le Few-Shot prompting ancre le modèle sur un format de sortie exact via un exemple. La règle "Output ONLY valid code" supprime tout texte parasite. La température à 0.1 garantit une sortie déterministe. Les règles numérotées forment une checklist que le LLM suit séquentiellement.
Comment ça fonctionne ?
Décrivez vos données
Écrivez en langage naturel ce que vous voulez extraire : champs, types attendus, listes imbriquées.
Choisissez le format
Pydantic pour un projet Python avec Instructor ou LangChain. JSON Schema pour une intégration directe avec l'API OpenAI.
Copiez et utilisez
Le schéma est prêt à l'emploi. Collez-le dans votre code et branchez votre extraction LLM en quelques lignes.
Pourquoi le typage strict est indispensable pour connecter l'IA à vos bases de données
Connecter un LLM à PostgreSQL, BigQuery ou une API REST sans typage strict revient à envoyer un formulaire sans validation : les données arrivent, mais dans n'importe quel format. Le JSON devient inexploitable, les insertions échouent, et votre pipeline s'arrête à la première exception.
Le problème du LLM libre
Sans schéma, un LLM renvoie du texte libre. "amount": "1 200,00 €" au lieu de 1200.0 comme float. "date": "le 15 mars" au lieu de "2024-03-15". Ces formats sont illisibles pour un moteur SQL ou une API REST qui attend des types précis.
Structured Outputs : la solution
OpenAI Function Calling et Instructor forcent le modèle à produire du JSON valide conforme à votre schéma. Plus de chaîne à parser manuellement, plus d'exception sur un format inattendu. La sortie est directement injectable dans votre base de données.
Pydantic ou JSON Schema ?
Pydantic est idéal en Python : validation automatique, sérialisation native, intégration directe avec Instructor et LangChain. JSON Schema convient pour les environnements multi-langages ou quand vous appelez directement l'API OpenAI sans SDK.
En production : PostgreSQL et BigQuery
Avec un schéma Pydantic, vous pouvez utiliser .model_dump() pour insérer directement dans SQLAlchemy ou BigQuery Storage Write API. Chaque champ est typé, validé et documenté. Le pipeline LLM vers base de données devient fiable et maintenable.
Utilisation avec Instructor (Python)
Une fois le schéma Pydantic généré, branchez-le directement dans Instructor pour une extraction structurée sans parsing manuel :
import instructor
from openai import OpenAI
# Collez votre classe Pydantic ici
client = instructor.from_openai(OpenAI())
result = client.chat.completions.create(
model="gpt-4o-mini",
response_model=Invoice, # votre classe générée
messages=[{
"role": "user",
"content": f"Extrais les données de cette facture :\n{texte_facture}"
}]
)
# result est un objet Invoice typé et validé
print(result.model_dump())
# -> {"company_name": "Acme Corp", "amount_before_tax": 1200.0, ...}Questions fréquentes
Quelle est la différence entre Pydantic et JSON Schema pour les Structured Outputs ?
Pydantic génère une classe Python avec validation intégrée, idéale pour les projets Python utilisant Instructor ou LangChain. JSON Schema est un format universel directement supporté par l'API OpenAI, utile si vous travaillez en multi-langage ou appelez l'API sans SDK Python.
Le schéma généré est-il compatible avec Instructor ?
Oui. Le schéma Pydantic généré utilise Pydantic v2 avec BaseModel et Field, ce qui est directement compatible avec Instructor (client.chat.completions.create avec response_model=VotreModele).
Puis-je utiliser JSON Schema avec l'API OpenAI directement ?
Oui. Passez le schéma généré dans le paramètre response_format : { type: 'json_schema', json_schema: { name: 'MonSchema', schema: votreSchema } } lors de l'appel à l'API OpenAI.
Comment sont gérés les champs optionnels ?
En Pydantic, Optional[T] indique un champ qui peut être absent dans le texte source (None par défaut). En JSON Schema, les champs absents du tableau "required" sont optionnels. Le générateur gère cette logique automatiquement selon votre description.
Quelle technologie alimente cet outil ?
L'outil utilise Llama 3.3 70B de Meta via l'API Groq, avec une température de 0.1 pour des résultats déterministes. Le prompt système inclut un exemple Few-Shot pour ancrer le format de sortie.
Vos pipelines de données ont besoin de plus que de simples schémas ?
Je configure vos agents et pipelines ETL connectés aux LLM, du prototype à la production.
Prendre contact