Retour aux projets

Projet · 2026

NL to SQL

Interroger une base de données RH en langage naturel, avec une évaluation rigoureuse de la fiabilité.

92.3%

accuracy finale

26

questions de test

4

itérations

Le problème

Interroger une base de données relationnelle demande de connaître SQL. Peut-on permettre à un utilisateur de poser sa question en français et obtenir un résultat fiable — et surtout, comment mesurer cette fiabilité ?

L'approche

Plutôt qu'un fine-tuning coûteux, le système repose sur un LLM généraliste guidé par prompt engineering. Le schéma est extrait dynamiquement et enrichi de valeurs réelles avant d'être envoyé au modèle.

01

Extraction du schéma

Tables, colonnes et clés étrangères extraites dynamiquement depuis SQLite.

02

Enrichissement

Les colonnes catégorielles sont complétées avec des valeurs réelles (ex: status : ['Approuvé', 'En attente', 'Refusé']).

03

Génération

Le LLM reçoit le schéma, quelques exemples et la question, puis produit le SQL.

04

Exécution

La requête est exécutée sur la vraie base — pas de comparaison textuelle.

L'évaluation

26 questions de complexité croissante, évaluées par execution accuracy : on compare le résultat réel de la requête générée à celui de la référence.

ItérationChangementAccuracy
V1Comparaison stricte57.7%
V2Tolérance aux colonnesMéthode d'évaluation corrigée65.4%
V3Schéma enrichi de valeurs réellesCorrige les erreurs de format80.8%
V4Comparaison symétriqueComparaison bidirectionnelle92.3%

Enseignement clé : la qualité de l'évaluation compte autant que la qualité du modèle. Les deux premières itérations ont amélioré la mesure, pas le système.

Les 3 cas restants

  • 01 Équivalence sémantique non détectée (nom fusionné vs séparé).
  • 02 Égalité statistique probable (LIMIT 1 sans ordre secondaire).
  • 03 Question intrinsèquement ambiguë (moyenne globale vs groupée).

Limites assumées

  • LLM généraliste, pas un modèle spécialisé Text-to-SQL — pas de garantie sur des requêtes très complexes.
  • L'évaluation automatique a ses limites : équivalences sémantiques non détectées, documentées et assumées.
  • Base synthétique de 150 employés — la robustesse sur un schéma réel reste à valider.
  • Pas de protection contre les requêtes destructrices — acceptable en lecture seule, à sécuriser en production.

Stack

PythonLLMGroq (gpt-oss-20b)Prompt EngineeringFastAPISQLiteRender