Skip to content

Commit edf0b1a

Browse files
Amélioration du gestionnaire de mémoire, du moteur de recherche et de l’interface du chatbot : intégration Groq LLM, nouveau design, scripts et structure HTML optimisés
1 parent eb97c39 commit edf0b1a

12 files changed

Lines changed: 1499 additions & 312 deletions

File tree

README.md

Lines changed: 285 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,285 @@
1+
# 🤖 Chatbot RAG avec LLM
2+
3+
Un chatbot intelligent construit avec **FastAPI**, utilisant la technique **RAG (Retrieval-Augmented Generation)** combinant la recherche sémantique et la génération de texte par LLM (Large Language Model).
4+
5+
## ✨ Fonctionnalités
6+
7+
- 🔍 **Retrieval Engine** : Recherche sémantique dans la FAQ avec SentenceTransformers
8+
- 🧠 **LLM Generation** : Génération de réponses naturelles avec Groq LLM (gratuit)
9+
- 💾 **Memory Management** : Gestion de l'historique de conversation par utilisateur
10+
- 🌐 **Interface Web** : Interface web moderne et conviviale
11+
- 📊 **Hybrid Matching** : Combinaison de recherche dans les questions et réponses
12+
-**Caching** : Cache des embeddings pour optimiser les performances
13+
- 🔄 **FAQ Dynamique** : Sauvegarde automatique des nouvelles questions et gestion
14+
- 🎯 **Confidence Scoring** : Évaluation de la fiabilité des réponses
15+
16+
## 🏗️ Architecture
17+
18+
```
19+
┌─────────────┐
20+
│ Client │ (Interface Web)
21+
└──────┬──────┘
22+
23+
24+
┌─────────────┐
25+
│ FastAPI │ (main.py)
26+
└──────┬──────┘
27+
28+
├──► RetrievalEngine ──► SentenceTransformer ──► Base de données FAQ
29+
30+
├──► MemoryManager ──► Historique de conversation
31+
32+
└──► LLMManager ──► API Groq
33+
```
34+
35+
## 📋 Prérequis
36+
37+
- Python 3.8+
38+
- pip
39+
- Clé API depuis [Groq Console](https://console.groq.com) (gratuit)
40+
41+
## 🚀 Installation
42+
43+
### 1. Cloner le repository
44+
45+
```bash
46+
git clone <repository-url>
47+
cd ChatBot
48+
```
49+
50+
### 2. Créer un environnement virtuel
51+
52+
```bash
53+
# Windows
54+
python -m venv venv
55+
venv\Scripts\activate
56+
57+
# Linux/Mac
58+
python3 -m venv venv
59+
source venv/bin/activate
60+
```
61+
62+
### 3. Installer les dépendances
63+
64+
```bash
65+
pip install -r requirements.txt
66+
```
67+
68+
### 4. Configurer la clé API
69+
70+
Créer un fichier `.env` à la racine :
71+
72+
```bash
73+
# Copier depuis .env.example
74+
cp .env.example .env
75+
```
76+
77+
Ou créer manuellement et ajouter :
78+
79+
```env
80+
GROQ_API_KEY=votre_clé_api_ici
81+
```
82+
83+
**Obtenir une clé API :**
84+
1. S'inscrire sur [Groq Console](https://console.groq.com)
85+
2. Aller dans **API Keys** dans le tableau de bord
86+
3. Copier la clé et la coller dans le fichier `.env`
87+
88+
### 5. Lancer l'application
89+
90+
```bash
91+
python main.py
92+
```
93+
94+
Ou utiliser uvicorn directement :
95+
96+
```bash
97+
uvicorn main:app --reload --host 127.0.0.1 --port 8000
98+
```
99+
100+
Accéder à : http://127.0.0.1:8000
101+
102+
## 📁 Structure du projet
103+
104+
```
105+
ChatBot/
106+
├── main.py # Application FastAPI principale
107+
├── llm_manager.py # Gestion des providers LLM (Groq)
108+
├── retrieval_engine.py # Moteur de recherche sémantique
109+
├── memory_manager.py # Gestion de l'historique de conversation
110+
├── requirements.txt # Dépendances Python
111+
├── .env.example # Modèle pour les variables d'environnement
112+
├── README.md # Ce fichier
113+
114+
├── data/
115+
│ ├── faq.json # Base de données FAQ
116+
│ └── new_questions.json # Questions nouvelles non encore ajoutées à la FAQ
117+
118+
├── templates/
119+
│ └── index.html # Interface web
120+
121+
├── static/
122+
│ ├── css/
123+
│ │ ├── chatbot.css # Styles pour le chatbot
124+
│ │ └── theme.css # Thème général
125+
│ └── js/
126+
│ └── chatbot.js # JavaScript pour le frontend
127+
128+
└── test/
129+
└── test_retrieval.py # Tests unitaires
130+
```
131+
132+
## 🔧 Configuration
133+
134+
### Changer le modèle d'embedding
135+
136+
Dans `main.py`, vous pouvez changer le modèle SentenceTransformer :
137+
138+
```python
139+
retriever = RetrievalEngine(
140+
faq_path="data/faq.json",
141+
model_name="sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2"
142+
)
143+
```
144+
145+
Modèles populaires :
146+
- `paraphrase-multilingual-MiniLM-L12-v2` (multilingue, rapide)
147+
- `all-MiniLM-L6-v2` (anglais, très rapide)
148+
- `paraphrase-multilingual-mpnet-base-v2` (multilingue, plus précis mais plus lent)
149+
150+
### Changer le provider LLM
151+
152+
Par défaut utilise Groq. Pour changer dans `main.py` :
153+
154+
```python
155+
llm_manager = LLMManager(preferred_provider="groq")
156+
```
157+
158+
### Ajuster le seuil (Threshold)
159+
160+
Dans `retrieval_engine.py`, la fonction `get_best_match()` a un paramètre `threshold` (par défaut 0.45) :
161+
- **Plus élevé** (0.6+) : Retourne uniquement les résultats très certains, plus de questions utiliseront le LLM
162+
- **Plus bas** (0.3-) : Retourne plus de résultats, moins d'utilisation du LLM
163+
164+
## 📡 Points d'accès API
165+
166+
### Endpoints Chat
167+
168+
- `POST /chat` - Envoyer un message et recevoir une réponse
169+
```json
170+
{
171+
"message": "Comment créer un compte ?",
172+
"user_id": "user123",
173+
"use_llm": true
174+
}
175+
```
176+
177+
- `GET /` - Interface web
178+
179+
### Endpoints LLM
180+
181+
- `GET /llm/status` - Vérifier le statut des providers LLM
182+
- `POST /llm/switch/{provider}` - Changer de provider LLM
183+
184+
### Endpoints Admin
185+
186+
- `GET /admin/new-questions` - Voir les nouvelles questions
187+
- `POST /admin/add-to-faq/{question_index}` - Ajouter une question à la FAQ
188+
189+
### Endpoints Système
190+
191+
- `GET /health` - Vérification de santé
192+
- `GET /metrics` - Statistiques du système
193+
194+
## 🧪 Tests
195+
196+
Lancer les tests :
197+
198+
```bash
199+
pytest test/test_retrieval.py -v
200+
```
201+
202+
## 🎯 Fonctionnement
203+
204+
1. **Phase Retrieval** :
205+
- L'utilisateur envoie une question
206+
- Le système recherche dans la FAQ par similarité sémantique
207+
- Calcul du score de confiance
208+
209+
2. **Phase Generation** :
210+
- Si confidence < 0.45 : Utiliser le LLM pour répondre à une nouvelle question
211+
- Si confidence >= 0.45 : Utiliser le LLM pour améliorer la réponse de la FAQ (si activé)
212+
- Si pas de LLM : Retourner la réponse directement de la FAQ
213+
214+
3. **Mémoire** :
215+
- Sauvegarder l'historique de conversation par user_id
216+
- Conserver un maximum de 5 messages récents (configurable)
217+
218+
## 📊 Métriques et Monitoring
219+
220+
Accéder à `/metrics` pour voir :
221+
- Nombre de requêtes traitées
222+
- Distribution des scores de confiance
223+
- Taux de réussite du cache
224+
- Nombre d'utilisateurs actifs
225+
- Statut des providers LLM
226+
227+
## 🔒 Sécurité
228+
229+
- ✅ Les clés API sont stockées dans `.env` (pas commitées dans git)
230+
- ✅ CORS configuré (peut être restreint aux origines en production)
231+
- ✅ Validation des entrées avec Pydantic
232+
- ⚠️ **Production** : Devrait ajouter authentication/authorization
233+
234+
## 🚀 Déploiement
235+
236+
### Avec Docker (à venir)
237+
238+
```bash
239+
docker build -t chatbot-rag .
240+
docker run -p 8000:8000 --env-file .env chatbot-rag
241+
```
242+
243+
### Avec Gunicorn
244+
245+
```bash
246+
pip install gunicorn
247+
gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000
248+
```
249+
250+
## 🤝 Contribution
251+
252+
1. Fork le projet
253+
2. Créer une branche feature (`git checkout -b feature/AmazingFeature`)
254+
3. Committer les changements (`git commit -m 'Add some AmazingFeature'`)
255+
4. Pousser vers la branche (`git push origin feature/AmazingFeature`)
256+
5. Ouvrir une Pull Request
257+
258+
## 📝 Licence
259+
260+
Ce projet est publié sous licence MIT.
261+
262+
## 🙏 Remerciements
263+
264+
- [FastAPI](https://fastapi.tiangolo.com/)
265+
- [SentenceTransformers](https://www.sbert.net/)
266+
- [Groq](https://groq.com/) - API LLM gratuite
267+
- [Uvicorn](https://www.uvicorn.org/)
268+
269+
## 📞 Support
270+
271+
Si vous rencontrez un problème :
272+
1. Vérifier que le fichier `.env` contient `GROQ_API_KEY` correctement
273+
2. Vérifier les logs dans la console
274+
3. Lancer le health check : `GET /health`
275+
4. Vérifier le statut LLM : `GET /llm/status`
276+
277+
## 🎓 Pour en savoir plus
278+
279+
- [Pattern RAG](https://www.promptingguide.ai/techniques/rag)
280+
- [Sentence Transformers](https://www.sbert.net/docs/usage/semantic_textual_similarity.html)
281+
- [Documentation FastAPI](https://fastapi.tiangolo.com/)
282+
283+
---
284+
285+
Fait avec ❤️ en utilisant Python & FastAPI

data/new_questions.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
[
2+
{
3+
"question": "Comment commander un colis ?",
4+
"answer": "Pour commander un colis, vous pouvez généralement suivre ces étapes :\n\n1. Sélectionnez le produit ou l'article que vous souhaitez commander sur le site web du vendeur ou via une plateforme de commerce électronique.\n2. Vérifiez les informations de livraison, notamment l'adresse de livraison, les délais de livraison et les frais de port.\n3. Confirmez votre commande en cliquant sur le bouton d'achat ou en suivant les instructions de paiement.\n\nSi vous avez des questions ou des difficultés pour commander un colis, je peux vous aider à contacter le support du vendeur ou vous fournir des informations supplémentaires. Qu'est-ce que je peux faire pour vous ?",
5+
"confidence": 0.38771833330392835,
6+
"timestamp": "2025-10-31T20:59:18.763533",
7+
"added_to_faq": false
8+
},
9+
{
10+
"question": "J'ai perdu ma carte bleue",
11+
"answer": "Désolé à entendre que vous avez perdu votre carte bleue. Pour vous aider à résoudre ce problème, vous pouvez essayer de contacter votre banque ou votre établissement de crédit pour reporter les opérations et bloquer votre carte. Vous pouvez également contacter leur service client pour demander des instructions sur la procédure à suivre.",
12+
"confidence": 0.4047389671206474,
13+
"timestamp": "2025-10-31T20:59:46.349285",
14+
"added_to_faq": false
15+
}
16+
]

0 commit comments

Comments
 (0)