Chatbot intelligent qui répond à des questions en langage naturel sur des données financières via Text-to-SQL et LLM. Conçu pour l'analyse de fraude dans le contexte fintech ouest-africain.
Question : "Quel client a le plus de transactions frauduleuses ?"
Réponse : Aminata Traoré enregistre le plus grand nombre de transactions frauduleuses avec 56 fraudes détectées. Audit immédiat recommandé.
SQL généré automatiquement :
SELECT u.id, u.nom, COUNT(t.id) AS nombre_fraudes FROM users u JOIN comptes c ON u.id = c.user_id JOIN transactions t ON c.id = t.compte_id WHERE t.est_fraude = 1 GROUP BY u.id, u.nom ORDER BY nombre_fraudes DESC LIMIT 1;
Question utilisateur
↓
LangChain (orchestration)
↓
Claude Haiku — génère le SQL
↓
PostgreSQL — exécute la requête
↓
Claude Haiku — formule la réponse
↓
Streamlit Chat UI
| Outil | Rôle |
|---|---|
| LangChain | Orchestration LLM + outils |
| Claude Haiku via OpenRouter | Génération SQL + réponses naturelles |
| PostgreSQL | Base de données fintech |
| SQLAlchemy | Connexion et exécution SQL |
| Streamlit | Interface chat interactive |
- Text-to-SQL automatique — pose une question, le LLM génère le SQL
- Réponses en langage naturel professionnel en français
- Affichage du SQL généré pour la transparence
- Questions suggérées dans la sidebar pour démarrer rapidement
- Historique de conversation persistant dans la session
- Données brutes accessibles en un clic (tableau interactif)
- "Combien de transactions frauduleuses y a-t-il ?"
- "Quel est le montant total des fraudes ?"
- "Quels pays destination ont le plus de fraudes ?"
- "Quel est le taux de fraude par type de transaction ?"
- "Quelles heures sont les plus risquées ?"
- "Quel client a le solde le plus élevé ?"
Prérequis : Docker + clé API OpenRouter
# 1. Cloner le projet
git clone https://github.com/SeydinaBANE/rag-fintech.git
cd rag-fintech
# 2. Configurer les variables d'environnement
cp .env.example .env
# Renseigner OPENROUTER_API_KEY, DB_USER, DB_PASSWORD dans .env
# 3. Démarrer (app + PostgreSQL + données de test)
docker compose up --buildOuvre http://localhost:8502
La base de données est initialisée automatiquement avec le schéma et des données de test via
init.sql. Pour utiliser tes propres données, remplaceinit.sqlpar un exportpg_dumpde ta base.
⚠️ Les données fournies (8 utilisateurs, 15 transactions) sont synthétiques et servent uniquement à la démonstration — elles ne sont pas représentatives d'un volume ou d'un contexte de production réel.
Prérequis : Python 3.11+, uv, PostgreSQL sur le port 5433
git clone https://github.com/SeydinaBANE/rag-fintech.git
cd rag-fintech
cp .env.example .env
# Renseigner toutes les variables dans .env
make install # installe toutes les dépendances (prod + dev)
make db-up # démarre uniquement le conteneur PostgreSQL
make run # lance Streamlit sur :8502Ouvre http://localhost:8502
make test # lance pytest (aucune connexion DB ou LLM requise)
make coverage # pytest + rapport de couverture (seuil 70 %, rapport HTML dans htmlcov/)
make lint # ruff check
make format # ruff format
make check # lint + test (utilisé en CI)Les hooks pre-commit (lint + format) s'installent automatiquement avec make install et s'exécutent à chaque git commit.
Les dépendances sont mises à jour automatiquement par Dependabot chaque lundi (pip + GitHub Actions).
projet-rag-fintech/
├── .github/
│ ├── workflows/
│ │ ├── ci.yml # Lint + tests + coverage (seuil 70 %)
│ │ └── cd.yml # Build Docker → push GHCR → deploy Fly.io
│ ├── dependabot.yml # Mises à jour automatiques des dépendances
│ └── PULL_REQUEST_TEMPLATE.md # Template PR
├── scripts/
│ └── init_db.py # Init DB idempotent (release_command Fly.io)
├── rag/
│ └── engine.py # Moteur RAG — pipeline Text-to-SQL
├── dashboard/
│ └── app.py # Interface Streamlit Chat
├── tests/
│ └── test_engine.py # Tests unitaires (mocks, sans DB)
├── screenshot/ # Captures d'écran de l'interface
├── Dockerfile # Image Docker de l'application
├── docker-compose.yml # Orchestration app + PostgreSQL
├── init.sql # Schéma et données de test PostgreSQL
├── Makefile # Commandes de développement
├── .pre-commit-config.yaml # Hooks pre-commit (ruff)
├── .env.example # Modèle de variables d'environnement
├── pyproject.toml # Dépendances du projet
├── fly.toml # Configuration Fly.io (région, ressources, healthcheck)
└── README.md
Documentation technique complète :
docs/TECHNICAL.md
- flyctl installé
- Compte Fly.io (
fly auth login) - Secret
FLY_API_TOKENajouté dans GitHub → Settings → Secrets → Actions - Environnement
productioncréé dans GitHub → Settings → Environments
# 1. Créer l'application
fly apps create rag-fintech
# 2. Créer et attacher une base PostgreSQL
fly postgres create --name rag-fintech-db --region cdg
fly postgres attach rag-fintech-db
# 3. Définir les secrets applicatifs
fly secrets set \
OPENROUTER_API_KEY=<ta_clé> \
OPENROUTER_BASE_URL=https://openrouter.ai/api/v1
# 4. Déployer (le schéma + données de test sont initialisés automatiquement)
make fly-deployLe release_command dans fly.toml exécute scripts/init_db.py avant chaque déploiement — il crée les tables si elles n'existent pas et insère les données de test uniquement si la base est vide.
make fly-deploy # déployer la dernière image main
make fly-logs # streamer les logs en temps réel
make fly-ssh # ouvrir un shell dans le conteneurCe projet implémente le pattern Text-to-SQL avec LLM — une des compétences les plus recherchées en 2026. Au lieu d'écrire des requêtes SQL manuellement, le LLM comprend la question en langage naturel, génère le SQL approprié, exécute la requête et formule une réponse professionnelle. Applicable dans n'importe quel secteur : banque, télécommunications, retail, santé.
Seydina Mouhamet BANE


