Skip to content

Latest commit

 

History

History
389 lines (297 loc) · 13.1 KB

File metadata and controls

389 lines (297 loc) · 13.1 KB

Chatb'UTT 🚀

Un chatbot intelligent pour accompagner les étudiants de l'UTT dans leurs choix académiques

License Python Docker


📋 Table des matières


🎯 Contexte

Chatb'UTT est un chatbot développé par une équipe d'étudiants ingénieurs de l'Université de Technologie de Troyes (UTT). Ce projet vise à résoudre une problématique concrète : aider les étudiants à naviguer dans la complexité des choix académiques en leur fournissant des recommandations personnalisées sur les Unités d'Enseignement (UE).

Phase 1 (P24) ✅

Développement d'un chatbot de base capable de répondre aux questions courantes des étudiants sur les UE, les branches, les prérequis et les parcours académiques.

Phase 2 (P25) 🚀

Enrichissement du chatbot avec des capacités d'intelligence artificielle avancées :

  • Intégration de LangChain pour des conversations plus naturelles
  • Implémentation du RAG (Retrieval-Augmented Generation) pour des réponses contextualisées
  • Ajout de la reconnaissance vocale pour faciliter l'interaction
  • Support multilingue des requêtes

🎓 Objectifs

Pour les étudiants

  • 🎯 Obtenir des recommandations personnalisées d'UE basées sur leurs préférences, compétences et objectifs de carrière
  • 💬 Interagir de manière naturelle grâce à une IA conversationnelle avancée
  • 🌍 Poser des questions en plusieurs langues
  • 🎙️ Utiliser la reconnaissance vocale pour soumettre des questions à l'oral

Pour les administrateurs

  • 📊 Analyser les interactions via des tableaux de bord intelligents
  • 🔄 Améliorer continuellement le système grâce à des tests de régression manuels et automatisés
  • 📈 Assurer la scalabilité pour des évolutions futures

🏗️ Architecture du projet

Le projet suit une architecture microservices avec séparation claire entre le backend et le frontend, orchestrée par Docker Compose.

chatbutt/
│
├── backend/                      # API et logique métier
│   ├── documents/                # Documents sources (UE, branches, etc.)
│   ├── etl/                      # Pipeline ETL pour l'ingestion de données
│   │   ├── core/                 # Logique centrale d'extraction
│   │   ├── faiss/                # Indexation vectorielle avec FAISS
│   │   └── mongodb/              # Stockage dans MongoDB
│   ├── models/                   # Modèles de données (Pydantic)
│   │   └── chats.py              # Schéma des conversations
│   ├── pipeline/                 # Pipeline de traitement des requêtes
│   │   ├── chatbot_pipeline.py  # Orchestration du pipeline complet
│   │   ├── intention_detection.py # Détection d'intention (NLU)
│   │   ├── entity_extractor.py  # Extraction d'entités nommées
│   │   ├── source_router.py     # Routage vers la source de données appropriée
│   │   └── answer_generator.py  # Génération de réponses avec LLM
│   ├── retrieve/                 # Récupération de documents pertinents
│   │   ├── faiss_retriever. py   # Recherche vectorielle avec FAISS
│   │   └── mongo_retriever.py   # Recherche dans MongoDB
│   ├── routes/                   # Points d'entrée API (FastAPI)
│   │   └── chat_routes.py        # Endpoints pour le chat
│   ├── services/                 # Logique métier
│   │   └── chat_service.py       # Service de gestion des conversations
│   └── server. py                 # Point d'entrée de l'API (Uvicorn)
│
├── frontend/                     # Interface utilisateur
│   ├── . streamlit/               # Configuration Streamlit
│   ├── utils/                    # Utilitaires
│   │   └── auth.py               # Gestion de l'authentification
│   ├── views/                    # Pages de l'application
│   │   ├── login.py              # Page de connexion
│   │   ├── logout.py             # Page de déconnexion
│   │   ├── messagerie.py         # Interface de chat
│   │   └── settings.py           # Paramètres utilisateur
│   ├── config.yaml               # Configuration de l'application
│   └── main.py                   # Point d'entrée Streamlit
│
├── docker-compose.yml            # Orchestration des services
├── requirements.txt              # Dépendances Python
├── . dockerignore                 # Fichiers ignorés par Docker
├── . gitignore                    # Fichiers ignorés par Git
└── README.md                     # Documentation du projet

🔄 Flux de traitement des requêtes (Pipeline)

Question utilisateur
    ↓
[1] Intention Detection (NLU)
    ↓
[2] Entity Extraction (NER)
    ↓
[3] Source Router (FAISS vs MongoDB)
    ↓
[4] Document Retrieval (RAG)
    ↓
[5] Answer Generation (LLM)
    ↓
Réponse contextualisée

Composants clés du pipeline :

  1. Intention Detection : Identifie l'intention de l'utilisateur (demande d'info sur une UE, conseil d'orientation, comparaison, etc.)
  2. Entity Extraction : Extrait les entités nommées (noms d'UE, branches, semestres, métiers, etc.)
  3. Source Router : Détermine la source de données optimale (recherche vectorielle FAISS ou requête structurée MongoDB)
  4. Document Retrieval : Récupère les documents pertinents via RAG
  5. Answer Generation : Génère une réponse naturelle et contextualisée avec un LLM

✨ Fonctionnalités

Pour les étudiants 🎓

Fonctionnalité Description Exemple
📚 Recommandations personnalisées Suggestions d'UE basées sur le profil et les objectifs "Quelles UE choisir pour devenir data engineer ?"
💬 IA conversationnelle Dialogue naturel avec LangChain "C'est quoi l'UE LO17 ?"
🌍 Support multilingue Requêtes en plusieurs langues Français, Anglais
🎙️ Reconnaissance vocale Soumission de questions à l'oral Questions audio
🔍 Recherche avancée Information sur les UE, branches, prérequis "Quels sont les prérequis pour LO12 ?"
⚖️ Comparaison d'UE Analyse comparative de plusieurs UE "Différence entre IF08 et IF10 ?"

🖥️ Technologies utilisées

Backend

  • 🐍 Python 3.8+ - Langage principal
  • ⚡ FastAPI - Framework web moderne et performant
  • 🧠 LangChain - Framework pour applications LLM
  • 🤖 OpenAI API - Modèles de langage (GPT-4, GPT-3.5)
  • 🔎 RAG (Retrieval-Augmented Generation) - Génération augmentée par récupération
  • 📚 FAISS - Recherche vectorielle haute performance
  • 🗄️ MongoDB - Base de données NoSQL
  • 🗣️ Spacy / NLTK - Traitement du langage naturel (NLU/NER)
  • 🎤 SpeechRecognition - Reconnaissance vocale

Frontend

  • 🎨 Streamlit - Framework de création d'applications web Python
  • 📊 Streamlit Components - Composants personnalisés

DevOps

  • 🐳 Docker - Conteneurisation
  • 🔧 Docker Compose - Orchestration multi-conteneurs
  • ✅ Pytest - Tests unitaires et d'intégration

🚀 Installation

Prérequis

  • Python 3.8+
  • Docker & Docker Compose (optionnel)
  • Compte OpenAI avec clé API

Option 1 : Installation avec Docker (Recommandé) 🐳

  1. Cloner le repository
git clone https://github.com/FredWantou/chatbutt.git
cd chatbutt
  1. Configurer les variables d'environnement
cp .env.example .env
# Éditer . env et ajouter votre clé API OpenAI
  1. Lancer l'application
docker-compose up --build
  1. Accéder à l'application

Option 2 : Installation manuelle 🛠️

Backend

  1. Créer un environnement virtuel
python -m venv . venv
  1. Activer l'environnement virtuel
# Windows
.venv\Scripts\activate

# macOS/Linux
source .venv/bin/activate
  1. Installer les dépendances
pip install -r requirements.txt
  1. Configurer les variables d'environnement
cp .env.example .env
# Éditer . env et ajouter votre clé API OpenAI
  1. Lancer le backend
uvicorn backend.server:app --host 0.0.0.0 --port 8000 --reload

Frontend

  1. Ouvrir un nouveau terminal et activer l'environnement virtuel
# Windows
.venv\Scripts\activate

# macOS/Linux
source .venv/bin/activate
  1. Lancer le frontend
streamlit run frontend/main.py

📖 Utilisation

Démarrage rapide

Pour lancer le backend :

Pour lancer le frontend :

Exemples de questions

Informations sur une UE

  • "C'est quoi l'UE LO17 ?"
  • "Quels sont les objectifs de MT15 ?"
  • "Qui est responsable de l'UE GL03 ?"

Liste des UE

  • "Quelles UE sont proposées en branche ISI ?"
  • "Quelles UE puis-je choisir au semestre 3 ?"

Comparaison d'UE

  • "Quelle est la différence entre IF08 et IF10 ?"

Conseil d'orientation

  • "Quelles UE choisir pour devenir data engineer ?"
  • "Je veux travailler dans l'IA, que me conseillez-vous ?"

Prérequis et parcours

  • "Quels sont les prérequis pour suivre LO12 ?"
  • "Quel parcours pour accéder à la branche GM ?"

Informations générales

  • "Combien de crédits faut-il pour passer en branche ?"
  • "Comment fonctionne le tronc commun ?"
  • "Quelle est la différence entre FISE et FISA ?"

Langues et certifications

  • "Quel niveau d'anglais est requis pour valider le diplôme ?"
  • "Quelles certifications sont acceptées ?"

👥 L'équipe

Ce projet est développé par une équipe d'étudiants ingénieurs passionnés de l'UTT :

Mohamed Amine Jabote
Mohamed Amine Jabote

Backend & NLP Engineer
Freddy Durel Pouna Wantou
Freddy Durel Pouna Wantou

Full Stack Developer & AI Engineer
Youssef Sidqui
Youssef Sidqui

Data Engineer & DevOps

Encadrement : Nada Matta (Enseignante-chercheuse à l'UTT)


🧪 Tests

Le chatbot est testé de manière rigoureuse pour garantir sa fiabilité :

  • Tests unitaires : Validation de chaque composant individuellement
  • Tests d'intégration : Vérification du fonctionnement du pipeline complet
  • Tests de régression : Assurance de la non-régression lors des évolutions
  • Tests manuels : Validation par des cas d'usage réels
# Lancer les tests
pytest tests/

📚 Ressources

Documentation MongoDB Vector Search

Documentation LangChain


❓ Support

🇬🇧 English

If you encounter any issues, please create an issue on the GitHub repository.

🇫🇷 Français

Si vous rencontrez des problèmes, veuillez créer un ticket sur le dépôt GitHub.


📜 Licence

Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.


🙏 Remerciements

  • Nada Matta pour son encadrement et ses conseils précieux
  • L'UTT pour le soutien institutionnel
  • La communauté OpenAI pour les modèles de langage
  • La communauté LangChain pour le framework conversationnel

Fait avec ❤️ par l'équipe Chatb'UTT

⭐ Si ce projet vous plaît, n'hésitez pas à lui donner une étoile sur GitHub !