ESIEE PARIS projet DEVOPS de E4 fillière DSIA
- Owen BRAUX
- Elliot CAMBIER
Année 2025
Attention pour faire tourner ce projet dans des conditions optimale il est nécessaire d'avoir :
- Un processeur multicoeur ou une carte graphique avec 4 Gb de VRAM.
- Au moins 8 Gb de RAM (12 si CPU)
(si c'est insuffisant il faut utiliser llama3.2:1b)
Une application web permettant d'accéder à un assistant (CHATBOT) utilisant un modèle LLM (Large Language Model) de votre choix, avec le modèle llama3.2 utilisé par défaut. Cette application offre des fonctionnalités d'interaction en langage naturel via texte ou microphone, ainsi que la possibilité de sauvegarder et télécharger l'historique des conversations.
Ce projet utilise GitHub Actions pour l'intégration continue (CI) et le déploiement continu (CD), garantissant ainsi l'exécution automatique des tests, la construction et le déploiement de l'application.
- Prérequis
- Installation
- Exécution
- Déploiement avec Docker
- Déploiement avec Kubernetes
- Fonctionnalités
- Pipelines et tests
-
Setup up Docker : Docker Desktop
-
Setup up minikube (avec Kubernetes) : Kubernetes Minikube
-
Cloud
- L'application peut être deployée sur une plateforme cloud (AWS/Azure/etc...) grâce à Docker ou Kubernetes.
- Installez Ollama pour accéder aux modèles LLM.
- Documentation Python pour Ollama : ollama-python.
- Nécessaire pour cloner le projet depuis le dépôt GitHub.
- Pour créer nos bases de données qui vont être accéder par le chatbot
- FFmpeg [NON NECESSAIRE (SAUF SI L'AUDIO EST SOUHAITE)]
- Permet de lire et de traiter les fichiers audio.
- Vous pouvez utiliser ce dépôt pour obtenir une version précompilée : FFmpeg Builds.
- Ajoutez ffmpeg.exe à votre
PATH
pour un accès global.
Clonez le projet et installez les dépendances :
git clone https://github.com/Brauxo/PROJET-CHATBOT
cd PROJET-CHATBOT
pip install -r requirements.txt
- Assurez-vous que les modèles LLM nécessaires sont téléchargés via Ollama et que Ollama soit lancé :
ollama start
Nous conseillons llama3.2 ou llama3.2:1b . En alternative : Le modèle DeepSeek-R1:1.5B, récemment lancé, est particulièrement intéressant car il nécessite très peu de puissance et offre des performances correctes.
ollama run llama3.2
- Setup de la base de données.
Lancer une base de données sur MongoDB Compass
Pour créer une base de données avec celle fournie (le json)
python load_json.py
De plus dans le fichier config.py il faut remplacer MONGO_URL par l'adresse locale de mongoDB :
MONGO_URL = "mongodb://localhost:27017/"
- Exécutez l'application Streamlit (obligatoire !) :
streamlit run App.py
- Accédez à l'interface via votre navigateur à l'adresse : http://localhost:8501
Pour exécuter le projet sur Docker, il suffit de rentrer les deux commandes suivante !!! IMPORTANT : L'initialisation du docker prend du temps (environ 10 minutes sur mon pc)
docker build -t chatbot-app .
docker compose up -d
L'app est désormais accessible sur ce lien.
C'est car le modèle est en train d'être téléchargé. Il faut donc attendre un petit peu.
Pour le déploiement avec Kubernetes, nous utilisons minikube.
- Démarrer Kubernetes et miniuke
kubectl cluster-info
minikube start
- Déployer MongoDB, Ollama et l'application
Premièrement entrer cette commande :
kubectl apply -f mongo.yaml -f ollama.yaml
Attendre une minute et lancer l'application
kubectl apply-f chatbot.yaml
- Vérifier que tout est en cours d'exécution
kubectl get pods
- Pour acceder à L'app :
Il faut ecrire cette commande
minikube service chatbot --url
puis copier coller l'adresse dans un navigateur
L'application offre les fonctionnalités suivantes :
-
Discussion avec Albert, un Chatbot qui aide les élèves :
- Dans l'onglet CHATBOT, vous avez accès à un terminal de discussion avec le modèle.
-
Effacement des données :
- Réinitialisez facilement l'historique des conversations à tout moment.
-
Gestion de l'historique des conversations :
- L'historique complet de la conversation est affiché ou réduit à la dernière réponse du bot.
- Téléchargez l'historique en format texte pour une sauvegarde locale.
-
Ajout/Supression de cours directement dans l'appli :
- Dans l'onglet Gestion de cours, nous pouvez ajouter des cours dans la BDD au format texte.
-
Fonctionalité /search pour avoir un résumé du cours :
- Le chatbot va analyser le cours et résumé les points clés de celui-ci.
-
Interaction via texte ou voix [DESACTIVE SUR DOCKER]:
- Entrez vos messages via le clavier ou utilisez le microphone pour une interaction vocale.
-
Conversion texte-parole [DESACTIVE PAR DEFAULT] :
- Les réponses du chatbot peuvent être lues à haute voix via un moteur de synthèse vocale.
- reactivable mais demande une compréhension du code.
Ce projet contient plusieurs pipelines afin de veiller au bon fonctionement de l'application lors des pulls requests sur GitHub, voici une expliquation rapide des tests :
ci-cd.yml : Ce pipeline définit les tâches de base du CI, telles que l'extraction du code, l'installation des dépendances et l'exécution des tests. docker-image.yml : Ce pipeline vérifie la création de l'image Docker chatbot app et qu'elle peut être déployée. python-app.yml : Cette pipeline vérfie le lancement de l'application python sous streamlit et son fonctionnement.
Au final, nous avons décidé de combiner ces pipelines en un unique "grand test" afin d'éviter de trop utiliser les serveurs de github, ce fichier est test.yml !
Normalement si tout se passe comme prévu, nous devons obtenir ce résultat :
test.yml s'occuppe egalement d'envoyer/mettre à jour l'image sur docker en utilisant GitHub actions et les identifants secrets du repo qui sont ceux de mon compte.
le lien vers l'image docker est le suivant : brauxo/chatbot-app
Afin de tester la communication dans la partie backend du projet avec MongoDB et ollama, nous avons créer un fichier test_utils.py présent dans src, ce test utilise pytest pour s'assurer du bon fonctionenment de le la partie backend de l'application (Mongo/Ollama).
On peut l'excuter avec cette commande :
pytest src/test_utils.py
Si tout se passe corectement, on doit avoir ce résultat :
Nous avons choisis de lancer le test sur Python 3.13 pour montrer la nécessité d'utiliser la version 3.9 qui évite plusieurs warning sur la partie audio du projet.