Extraction d'entités et classification
Les cas d’usage fondamentaux
Les sorties structurées brillent dans deux catégories de tâches : l’extraction d’informations depuis du texte non structuré, et la classification de contenu. Ces deux cas d’usage sont au coeur de la plupart des applications d’IA en entreprise.
Extraction d’entités nommées
L’extraction d’entités consiste à identifier et catégoriser les éléments clés dans un texte : personnes, entreprises, lieux, dates, montants, etc.
from pydantic import BaseModel
from typing import Literal
class Entite(BaseModel):
texte: str
type: Literal[
"personne", "entreprise", "lieu",
"date", "montant", "produit"
]
contexte: str
class ExtractionEntites(BaseModel):
entites: list[Entite]
nombre_total: int
langue_detectee: str
response, parsed = client.chat.parse(
model="grok-4.20-reasoning",
messages=[{
"role": "user",
"content": """Extrais toutes les entités de ce texte :
Le 15 mars 2026, Mistral AI a levé 600 millions d'euros
auprès de General Catalyst. Arthur Mensch, le CEO basé à
Paris, prévoit de lancer Mistral Large 3 d'ici juin."""
}],
response_format=ExtractionEntites
)
for e in parsed.entites:
print(f"[{e.type}] {e.texte} — {e.contexte}")
Classification de contenu
La classification attribue des catégories prédéfinies à un contenu. Les structured outputs garantissent que le modèle ne retourne que des catégories valides.
class ClassificationEmail(BaseModel):
categorie: Literal[
"commercial", "support", "facturation",
"partenariat", "candidature", "spam", "autre"
]
sous_categorie: str
priorite: Literal["basse", "moyenne", "haute", "urgente"]
sentiment: Literal["positif", "neutre", "negatif"]
action_requise: bool
resume: str
response, parsed = client.chat.parse(
model="grok-4.20-reasoning",
messages=[{
"role": "user",
"content": """Classifie cet email :
Objet : Problème de facturation urgent
Bonjour, notre dernière facture #2847 contient une erreur.
Le montant affiché est de 3500 EUR au lieu des 2800 EUR
convenus. Merci de corriger rapidement."""
}],
response_format=ClassificationEmail
)
print(f"Catégorie : {parsed.categorie}") # "facturation"
print(f"Priorité : {parsed.priorite}") # "haute"
print(f"Action requise : {parsed.action_requise}") # True
Classification multi-label
Quand un contenu peut appartenir à plusieurs catégories :
class ClassificationArticle(BaseModel):
titre: str
themes: list[str]
audience_cible: list[Literal[
"developpeurs", "managers", "data_scientists",
"designers", "dirigeants", "grand_public"
]]
niveau_technique: Literal["debutant", "intermediaire", "avance"]
mots_cles_seo: list[str]
temps_lecture_minutes: int
Extraction de données tabulaires
Transformer du texte en données structurées exploitables :
class LigneCommande(BaseModel):
reference: str
designation: str
quantite: int
prix_unitaire: float
montant_total: float
class BonCommande(BaseModel):
numero: str
date: str
fournisseur: str
lignes: list[LigneCommande]
montant_ht: float
tva: float
montant_ttc: float
response, parsed = client.chat.parse(
model="grok-4.20-reasoning",
messages=[{
"role": "user",
"content": """Extrais les données de ce bon de commande :
BC-2026-0847 du 28/03/2026 — Fournisseur : TechParts SAS
REF-001 | Câble USB-C 2m | x50 | 3.20 EUR
REF-002 | Adaptateur HDMI | x20 | 12.50 EUR
REF-003 | Hub USB 4 ports | x10 | 24.90 EUR"""
}],
response_format=BonCommande
)
Analyse de sentiment granulaire
Au-delà du simple positif/négatif, structurez une analyse complète :
class AspectSentiment(BaseModel):
aspect: str
sentiment: Literal["tres_positif", "positif", "neutre", "negatif", "tres_negatif"]
mention: str
class AnalyseAvis(BaseModel):
note_globale: float
sentiment_global: str
aspects: list[AspectSentiment]
points_forts: list[str]
points_faibles: list[str]
recommande: bool
Points clés à retenir
- L’extraction d’entités identifie personnes, lieux, dates, montants dans du texte libre
- La classification force des catégories prédéfinies grâce à
Literaletenum - La classification multi-label utilise des listes de
Literal - L’extraction tabulaire transforme du texte non structuré en données exploitables
- L’analyse de sentiment peut être granulaire avec des aspects individuels
- Tous ces patterns fonctionnent avec
parse()ouresponse_format