Un chatbot basé sur RAG (Retrieval-Augmented Generation) qui répond aux questions en se basant sur vos documents PDF. Construit avec FastAPI, React, et intégration OpenAI/Claude.
- ✅ Upload de PDFs avec drag & drop
- ✅ Extraction intelligente du contenu des documents
- ✅ Recherche vectorielle ultra-rapide avec FAISS
- ✅ Réponses générées par IA (OpenAI GPT-4 ou Claude Sonnet)
- ✅ Interface moderne et responsive
- ✅ Citations des sources pour chaque réponse
- ✅ Support multi-documents
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Frontend │ ────> │ Backend │ ────> │ Vector DB │
│ (React) │ <──── │ (FastAPI) │ <──── │ (FAISS) │
└─────────────┘ └──────────────┘ └─────────────┘
│
▼
┌──────────────┐
│ OpenAI/ │
│ Claude API │
└──────────────┘
Backend:
- FastAPI (API REST)
- PyPDF2 (extraction de texte)
- Sentence-Transformers (embeddings)
- FAISS (recherche vectorielle)
- OpenAI API ou Anthropic Claude
Frontend:
- React 18
- Axios (requêtes HTTP)
- CSS moderne avec animations
- Python 3.10+
- Node.js 18+
- npm ou yarn
- Clé API OpenAI OU Anthropic (voir ci-dessous)
# Cloner le repo
git clone https://github.com/votre-username/rag-chatbot.git
cd rag-chatbot
# Créer environnement virtuel
cd backend
python -m venv venv
# Activer l'environnement
# Windows:
venv\Scripts\activate
# Mac/Linux:
source venv/bin/activate
# Installer les dépendances
pip install -r requirements.txt
# Configurer les variables d'environnement
cp .env.example .env
# Éditez .env et ajoutez votre clé APIObtenir une clé API:
Option A - OpenAI:
- Aller sur https://platform.openai.com/api-keys
- Créer une clé API
- Ajouter dans
.env:OPENAI_API_KEY=sk-...
Option B - Anthropic Claude:
- Aller sur https://console.anthropic.com/settings/keys
- Créer une clé API
- Ajouter dans
.env:ANTHROPIC_API_KEY=sk-ant-...
# Lancer le serveur (choisir une option)
# Avec OpenAI:
uvicorn main_openai:app --reload
# Avec Claude:
uvicorn main_claude:app --reload
# Le backend est disponible sur http://localhost:8000# Dans un nouveau terminal
cd frontend
# Installer les dépendances
npm install
# Lancer l'application
npm start
# L'app est disponible sur http://localhost:3000- Uploader un PDF: Allez dans l'onglet "Documents" et uploadez votre PDF
- Attendre le traitement: Le backend découpe et indexe le document (~quelques secondes)
- Poser des questions: Retournez à l'onglet "Chat" et posez vos questions!
💬 "Quelles sont les étapes pour déposer une réclamation?"
💬 "Quel est le délai de traitement mentionné?"
💬 "Résume-moi la section sur les garanties"
Interface moderne avec support des sources et citations.
Drag & drop facile avec barre de progression.
Dans pdf_processor.py:
chunks = chunk_text(text,
chunk_size=500, # Augmenter pour plus de contexte
overlap=50 # Augmenter pour éviter de couper les phrases
)Dans embeddings.py:
# Modèles disponibles:
# - 'all-MiniLM-L6-v2' (rapide, 384 dimensions)
# - 'all-mpnet-base-v2' (plus précis, 768 dimensions)
# - 'multi-qa-mpnet-base-dot-v1' (optimisé pour Q&A)
self.model = SentenceTransformer('all-mpnet-base-v2')Dans main.py (ligne ~100):
results = vector_store.search(question_embedding, k=5) # k=5 au lieu de 3| Endpoint | Méthode | Description |
|---|---|---|
/ |
GET | Informations de l'API |
/upload-pdf |
POST | Upload un PDF |
/ask |
POST | Poser une question |
/stats |
GET | Statistiques du système |
/docs |
GET | Documentation Swagger |
# Upload PDF
curl -X POST "http://localhost:8000/upload-pdf" \
-F "[email protected]"
# Poser une question
curl -X POST "http://localhost:8000/ask" \
-H "Content-Type: application/json" \
-d '{"question": "Quelle est la procédure?", "use_ai": true}'# Backend
cd backend
pytest tests/
# Frontend
cd frontend
npm testLes contributions sont les bienvenues!
- Fork le projet
- Créer une branche (
git checkout -b feature/AmazingFeature) - Commit (
git commit -m 'Add AmazingFeature') - Push (
git push origin feature/AmazingFeature) - Ouvrir une Pull Request
- Support de multiples formats (Word, Excel, TXT)
- Historique des conversations
- Authentification utilisateur
- Base de données PostgreSQL
- Support multilingue
- Export des conversations en PDF
- Mode vocal (speech-to-text)
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
Créé avec ❤️ pour le challenge de développement
⭐ Si ce projet vous plaît, n'hésitez pas à lui donner une étoile!