Ce projet implémente un assistant virtuel basé sur le modèle Mistral, utilisant la technique de Retrieval-Augmented Generation (RAG) pour fournir des réponses précises et contextuelles à partir d'une base de connaissances personnalisée.
- 🔍 Recherche sémantique avec FAISS pour trouver les documents pertinents
- 🧠 Classification des requêtes pour déterminer si une recherche RAG est nécessaire
- 🤖 Génération de réponses avec les modèles Mistral (Small ou Large)
- 📊 Visualisation des feedbacks avec graphiques et statistiques
- ⚙️ Paramètres personnalisables (modèle, nombre de documents, score minimum)
- Python 3.9+
- Clé API Mistral (obtenue sur console.mistral.ai)
- Cloner le dépôt
git clone <url-du-repo>
cd <nom-du-repo>
- Créer un environnement virtuel
# Création de l'environnement virtuel
python -m venv venv
# Activation de l'environnement virtuel
# Sur Windows
venv\Scripts\activate
# Sur macOS/Linux
source venv/bin/activate
- Installer les dépendances
pip install -r requirements.txt
- Configurer la clé API
Créez un fichier .env
à la racine du projet avec le contenu suivant :
MISTRAL_API_KEY=votre_clé_api_mistral
.
├── MistralChat.py # Application Streamlit principale
├── indexer.py # Script pour indexer les documents
├── inputs/ # Dossier pour les documents sources
├── vector_db/ # Dossier pour l'index FAISS et les chunks
├── database/ # Base de données SQLite pour les interactions
├── utils/ # Modules utilitaires
│ ├── config.py # Configuration de l'application
│ ├── database.py # Gestion de la base de données
│ ├── query_classifier.py # Classification des requêtes
│ └── vector_store.py # Gestion de l'index vectoriel
└── pages/ # Pages Streamlit supplémentaires
└── 1_Feedback_Viewer.py # Visualisation des feedbacks
Placez vos documents dans le dossier inputs/
. Les formats supportés sont :
- TXT
- DOCX
- CSV
- JSON
Vous pouvez organiser vos documents dans des sous-dossiers pour une meilleure organisation.
Exécutez le script d'indexation pour traiter les documents et créer l'index FAISS :
python indexer.py
Ce script va :
- Charger les documents depuis le dossier
inputs/
- Découper les documents en chunks
- Générer des embeddings avec Mistral
- Créer un index FAISS pour la recherche sémantique
- Sauvegarder l'index et les chunks dans le dossier
vector_db/
streamlit run MistralChat.py
L'application sera accessible à l'adresse http://localhost:8501 dans votre navigateur.
L'application détermine automatiquement si une question nécessite une recherche RAG ou si une réponse directe du modèle Mistral est suffisante. Cela permet d'optimiser les performances et la pertinence des réponses.
Dans la barre latérale, vous pouvez ajuster :
- Le modèle Mistral (Small ou Large)
- Le nombre de documents à récupérer (1-20)
- Le score minimum de similarité (0-100%)
L'application enregistre les interactions et les feedbacks des utilisateurs. Vous pouvez visualiser les statistiques dans la page "Feedback Viewer".
Gère l'index vectoriel FAISS et la recherche sémantique :
- Chargement et découpage des documents
- Génération des embeddings avec Mistral
- Création et interrogation de l'index FAISS
Détermine si une requête nécessite une recherche RAG :
- Analyse des mots-clés
- Classification avec le modèle Mistral
- Détection des questions spécifiques vs générales
Gère la base de données SQLite pour les interactions :
- Enregistrement des questions et réponses
- Stockage des feedbacks utilisateurs
- Récupération des statistiques
Vous pouvez personnaliser l'application en modifiant les paramètres dans utils/config.py
:
- Modèles Mistral utilisés
- Taille des chunks et chevauchement
- Nombre de documents par défaut
- Nom de la commune ou organisation