Découvrez notre approche pour automatiser la correction des erreurs de données grâce à l'IA et aux schémas JSON, améliorant ainsi la qualité et l'efficacité de nos systèmes.
Chez Swiftgum, la qualité des données est cruciale. Face à des flux de données complexes, les erreurs sont inévitables. Au lieu de rejeter les données incorrectes ou de passer des heures à les corriger manuellement, nous avons créé une approche innovante. Notre solution combine les schémas JSON et l'IA pour automatiser la correction des erreurs. Voici comment ça marche.
Avant de corriger, il faut définir ce qu'est une donnée "correcte". Un schéma décrit la structure attendue des données. Il précise les champs nécessaires, leur type (texte, nombre, etc.), et peut inclure des règles de validation plus poussées.
Les schémas sont essentiels pour plusieurs raisons :
Nous utilisons JSON Schema, un standard ouvert pour décrire la structure des données JSON. Voici un exemple adapté à notre domaine immobilier :
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "BailCommercial",
"description": "Données extraites d'un bail commercial",
"type": "object",
"properties": {
"preneur": {
"type": "string",
"description": "Nom de l'entreprise locataire"
},
"loyer_annuel": {
"type": "number",
"minimum": 0,
"description": "Loyer annuel en euros"
},
"date_effet": {
"type": "string",
"format": "date",
"description": "Date de prise d'effet du bail"
},
"duree": {
"type": "integer",
"minimum": 1,
"description": "Durée du bail en années"
}
},
"required": ["preneur", "loyer_annuel", "date_effet"]
}
Ce schéma indique qu'un bail commercial doit avoir un preneur
, un loyer_annuel
et une date_effet
. La duree
est optionnelle mais doit être un nombre entier positif.
Notre bibliothèque interne @swiftgum/schemas
, basée sur AJV, utilise ce standard pour définir et valider les données.
fixValueWithAI
Quand des données ne respectent pas le schéma, notre fonction fixValueWithAI
entre en jeu.
On commence par vérifier si les données respectent le schéma JSON.
// Version simplifiée de notre processus de validation
interface ValidationResult {
valid: boolean;
value?: unknown; // Valeur validée si succès
error?: AjvError; // Erreurs détaillées si échec
}
function safeValidate(schema: Schema, value: unknown): ValidationResult {
// Utilisation d'AJV pour la validation
const isValid = ajv.validate(schema, value);
if (isValid) {
return { valid: true, value: value };
} else {
return { valid: false, error: transformAjvErrors(ajv.errors) };
}
}
Pour que l'IA corrige efficacement, elle a besoin d'informations précises. On crée un message qui contient :
Le schéma JSON cible : la structure que les données devraient avoir
Les données originales avec erreurs : ce qu'on a reçu
Les erreurs détectées : pourquoi les données sont incorrectes. Par exemple :
[
{
"path": "/loyer_annuel",
"message": "doit être un nombre, mais trouvé : chaîne de caractères",
"value": "15000 euros"
},
{
"path": "/date_effet",
"message": "format de date invalide",
"value": "01/01/22"
}
]
Instructions claires : ce que l'IA doit faire
{"cannotFix": true}
Un point crucial que nous avons appris : quand nous envoyons le schéma à l'IA, nous utilisons une fonction stripInternalProperties
pour retirer toute information non essentielle. Cela rend le prompt plus léger et aide l'IA à se concentrer sur l'essentiel.
Nous utilisons un modèle d'OpenAI (actuellement gpt-4o-mini-2024-07-18
) via le SDK AI de Vercel.
Une fois la proposition de l'IA reçue :
On vérifie si l'IA a répondu {"cannotFix": true}
, ce qui signifie qu'elle ne peut pas corriger sans inventer des données
// Schéma Zod pour la "porte de sortie"
const EscapeHatchOutputSchema = z.object({
cannotFix: z.literal(true),
});
const escapeParseResult = EscapeHatchOutputSchema.safeParse(aiOutput);
if (escapeParseResult.success) {
// L'IA signale qu'elle ne peut pas corriger
throw new Error("L'IA ne peut pas corriger la valeur défectueuse.");
}
Si elle propose une correction, on vérifie à nouveau avec notre schéma JSON
La correction parfaite du premier coup est rare.
Cette approche récursive est particulièrement efficace. Par exemple, lors de la première passe, l'IA pourrait corriger le format d'une date mais manquer une autre erreur. La deuxième passe lui permet de corriger les erreurs restantes, avec un document déjà partiellement amélioré.
Si après toutes les tentatives les données restent invalides :
Prenons un cas réel de correction de données d'un bail commercial. Voici des données extraites par OCR avec des erreurs :
{
"preneur": "SCI Les Oliviers",
"loyer_annuel": "25 000€ HT/HC",
"date_effet": "premier janvier 2023",
"duree": "3+6+9"
}
L'IA identifie et corrige plusieurs problèmes :
La version corrigée devient :
{
"preneur": "SCI Les Oliviers",
"loyer_annuel": 25000,
"date_effet": "2023-01-01",
"duree": 3
}
Cette approche est également utilisée dans notre outil d'analyse de baux commerciaux et notre système d'extraction d'informations des baux.
Notre solution combine plusieurs outils performants :
@swiftgum/schemas
: pour gérer les schémas JSONCette méthode offre plusieurs bénéfices :
Ce projet nous a enseigné plusieurs leçons :
L'importance de la "porte de sortie" :
Permettre à l'IA de répondre {"cannotFix": true}
évite les corrections hasardeuses. Mieux vaut pas de correction qu'une mauvaise correction.
Les avantages de JSON Schema :
L'art de formuler les instructions : La clarté et la précision des instructions données à l'IA sont essentielles pour obtenir de bons résultats.
La complémentarité validation/IA : L'IA complète la validation par schéma, elle ne la remplace pas.
L'importance des essais multiples : Permettre plusieurs tentatives rend le système plus robuste.
Chez Swiftgum, nous innovons pour améliorer la qualité et la fiabilité. Notre système de correction par IA montre comment nous combinons rigueur technique et intelligence artificielle. Cette approche nous permet de construire des systèmes plus robustes, capables de gérer les défis de la donnée à grande échelle.
Si vous souhaitez voir ces concepts en action, essayez notre outil d'analyse de contrats de location ou consultez notre tutoriel sur l'extraction de données des baux commerciaux.
En partageant notre expérience, nous espérons inspirer d'autres équipes à améliorer leurs processus de gestion des données.
Rejoignez les professionnels de l'immobilier qui utilisent déjà Swiftgum pour gagner du temps et réduire les erreurs.