Skip to content

Repository files navigation

🤖 Assistant IA RAG — Fintech Afrique de l'Ouest

CI CD Coverage Python LangChain Streamlit PostgreSQL Claude Haiku Docker License

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.


📸 Screenshots


💡 Démonstration

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;

🏗️ Architecture

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

🛠️ Stack technique

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

✨ Fonctionnalités

  • 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)

💬 Exemples de questions

  • "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é ?"

🚀 Lancer le projet

⚡ Avec Docker (recommandé)

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 --build

Ouvre 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, remplace init.sql par un export pg_dump de 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.


🛠️ En local (sans Docker)

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 :8502

Ouvre http://localhost:8502


🧪 Développement

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).


📁 Structure du projet

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


☁️ Déploiement Fly.io

Prérequis

  • flyctl installé
  • Compte Fly.io (fly auth login)
  • Secret FLY_API_TOKEN ajouté dans GitHub → Settings → Secrets → Actions
  • Environnement production créé dans GitHub → Settings → Environments

Première mise en production

# 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-deploy

Le 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.

Commandes utiles

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 conteneur

🌍 Ce qui rend ce projet unique

Ce 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é.


👤 Auteur

Seydina Mouhamet BANE

LinkedIn GitHub

About

Chatbot IA Text-to-SQL pour l'analyse de fraude fintech en Afrique de l'Ouest — LangChain + Claude Haiku + PostgreSQL + Streamlit

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages