Ce dépôt fournit un service FastAPI qui convertit des requêtes en langage naturel en SQL via un pipeline LLM (LlamaIndex + Azure OpenAI), exécute les requêtes sur PostgreSQL et renvoie les résultats de façon conversationnelle. Le service embarque une interface Swagger et un Dockerfile pour un déploiement simplifié.
├── app.py # Construction du pipeline et fonctions utilitaires
├── main.py # Application FastAPI
├── requirements.txt # Dépendances Python
├── bdnb.sql # Dump SQL non fourni (disponible sur le site de la BDNB)
├── Dockerfile # Définition du conteneur
├── tests/ # Tests automatisés
├── documentation/ # Explication du fonctionnement du code
├── images/ # Images utilisées dans la documentation
├── legacy/ # Le code du test préliminaire (non utilisé ici)
├── .env_template # Modèle de fichier d'environnement
├── .gitignore # Fichiers à ignorer par Git
└── README.md # Ce document
- Docker (et Docker Compose en option)
- Python 3.10+
- Service PostgreSQL
- Identifiants Azure OpenAI
Nous utilisons un dump SQL appelé bdnb.sql contenant le schéma complet et les données de démonstration. Pour le restaurer :
-
Installer PostgreSQL (Ubuntu) :
sudo apt update sudo apt install postgresql postgresql-contrib
-
Démarrer le service :
sudo systemctl start postgresql sudo systemctl enable postgresql
-
Restaurer le dump :
sudo -u postgres psql -f bdnb.sql
Cette commande créera la base de données, les utilisateurs, les schémas, les tables et insérera les données telles que définies dans bdnb.sql
.
Créez un fichier .env
à la racine du projet avec :
# Azure OpenAI
AZURE_OPENAI_ENDPOINT=https://<votre-ressource>.openai.azure.com/
AZURE_OPENAI_API_KEY=<votre-clé>
OPENAI_API_VERSION=<version>
AZURE_OPENAI_ENGINE=<nom-du-deploiement>
# PostgreSQL
DB_USER=
DB_PASSWORD=
DB_HOST=
DB_PORT=
DB_NAME=bdnb
DB_SCHEMA=bdnb_2024_10_a_open_data
-
Créer un environnement virtuel :
python3.10 -m venv .venv source .venv/bin/activate
-
Installer les dépendances :
pip install --upgrade pip pip install -r requirements.txt
-
Lancer l’application :
uvicorn main:app --reload --host 0.0.0.0 --port 8000
-
Accéder à Swagger UI : ouvrez http://localhost:8000/docs
-
Construire l’image :
docker build -t nl-sql-demo .
-
Lancer le conteneur :
docker run -p 80:80 --env-file .env nl-sql-demo
-
Vérifier : rendez-vous sur http://localhost/docs
Envoyez une requête POST à /query
avec un corps JSON :
{
"query": "Quelle est la surface moyenne des logements de l'Hérault non chauffés au gaz et construits avant 1975 ?"
}
Exemple de réponse :
{
"query": "Quelle est la surface moyenne des logements de l'Hérault non chauffés au gaz et construits avant 1975 ?",
"answer": "La surface moyenne des logements de l'Hérault non chauffés au gaz et construits avant 1975 est de 80.5 m²."
}
# Depuis la racine du projet, avec votre environnement activé
pytest -q
Construire l’image et exécuter les tests :
docker build -t nl-sql-demo .
docker run --rm nl-sql-demo pytest -q