AI Deploy - Tutoriel - Déployer un chatbot Rasa avec une simple application Flask
Découvrez comment déployer de manière simple un chatbot avec AI Deploy
AI Deploy est couvert par les Conditions particulières OVHcloud Public Cloud.
Objectif
Dans un précédent tutoriel, nous avons créé et entraîné un chatbot Rasa avec AI Notebooks : Comment créer et entraîner un chatbot sur OVHcloud. L’objectif de ce tutoriel est à présent de déployer un chatbot avec les outils AI d’OVHcloud. Nous entraînons également notre chatbot avec AI Training.
Nous avons utilisé le célèbre framework open source Rasa pour créer le chatbot. Pour déployer notre chatbot, nous utiliserons le framework Flask afin de créer une application web.
Les objectifs de ce tutoriel sont les suivants :
- Sécuriser l’application Flask.
- Déployer le modèle Rasa avec AI Deploy.
- Déployer l’application Flask et converser avec le chatbot.
Voici un schéma expliquant le fonctionnement :
Prérequis
- Un projet Public Cloud créé
- L’interface CLI ovhai installée sur votre système (plus d’informations ici)
- Docker installé sur votre ordinateur local
- Un compte Docker Hub
- Des connaissances sur la création d’images avec un Dockerfile
En pratique
Nous allons créer deux apps AI pour déployer le modèle Rasa. Pour commencer, vous devrez créer deux variables d’environnement pour l’application Flask.
Cloner notre dépôt d’exemple
Assurez-vous d’avoir cloné le dépôt GitHub. Vous pouvez le trouver ici.
Créer les variables d’environnement
Le frontend et le backend (le chatbot) doivent communiquer de manière sûre et sécurisée. Nous allons générer des clés de sécurité à cet effet.
La première variable sera la clé secrète pour la signature du Json web token permettant d’accéder à votre chatbot Rasa. Pour générer cette clé, nous utilisons Python. Si vous avez Python 2.6+ installé sur votre machine, vous pouvez lancer Python dans un terminal puis :
La seconde sera l’algorithme utilisé pour le Json web token. L’algorithme utilisé sera H256.
Vous avez maintenant vos deux variables d’environnement. Il est temps de les enregistrer ! Créez un fichier .env dans le dossier flask_app. Votre .env devrait ressembler à ceci :
Vos variables d’environnement sont enregistrées. Il reste une dernière chose à faire : ajouter la valeur JWT_SECRET_KEY dans le fichier docker-compose.yml de l’image Rasa. Cette valeur doit être identique à celle du fichier .env. Sinon, votre modèle ne pourra pas fonctionner. Passons maintenant au test en local de notre application, ou déployons directement notre chatbot !
Si vous avez déjà entraîné un modèle Rasa avec OVHcloud, vous devriez déjà disposer d’un conteneur Object Storage contenant vos modèles entraînés. Si ce n’est pas le cas, poursuivez ce tutoriel pour en créer un. Sinon, vous pouvez aller directement ici.
Ajouter un espace de stockage d’objets
Le conteneur que nous allons créer contiendra au moins un modèle. Ce modèle sera servi sur une plateforme avec AI Deploy.
Nous pouvons spécifier lors de la création si nous les voulons en lecture seule, en lecture-écriture, etc. Séparer les données d’entrée et les données de sortie est une bonne pratique, qui permet un développement plus rapide et évite les risques de suppression de données.
L’objectif évident de l’utilisation d’Object Storage plutôt que du stockage local de l’AI Notebook est de dissocier le calcul du stockage, ce qui permet d’arrêter ou de supprimer le notebook tout en conservant les données en toute sécurité.
Si vous souhaitez en savoir plus sur le concept de stockage de données, consultez ce guide : Créer un conteneur d’objets.
Pour le déploiement du chatbot, nous allons créer un bucket Object Storage. Il contiendra un modèle pré-entraîné. Si vous avez déjà entraîné un modèle auparavant avec d’autres tutoriels, ne créez pas de nouveau conteneur.
Pour créer le volume à GRA (centre de données de Gravelines) en lecture seule, rendez-vous dans le dossier ai-training-examples/apps/flask/conversational-rasa-chatbot/back-end/models. Ensuite, il vous suffira de saisir :
Le modèle 20221220-094914-yellow-foley.tar.gz sera ajouté dans votre conteneur <model-output-container>. Voilà, vous pouvez maintenant déployer votre chatbot.
Tester en local (optionnel)
Une bonne pratique consiste à tester votre travail en local avant de passer en production.
Ouvrez un terminal, déplacez-vous dans le dossier du projet (ai-training-examples/apps/flask/conversational-rasa-chatbot) puis utilisez cette commande :
Cette commande créera 2 containers : un pour le backend du modèle Rasa et un pour le serveur frontend géré par Flask. Une fois les deux containers lancés (cela prendra 5 minutes maximum), vous pouvez accéder directement à http://localhost:5000 sur le port 5000, celui de votre application frontend.
Pour arrêter les containers, lancez cette commande :
Déployer le modèle Rasa dans le Cloud
Pour plus de simplicité, nous utiliserons la CLI ovhai. Avec une seule ligne de commande, votre modèle sera opérationnel et sécurisé en TLS !
Nous devrons créer un container afin de déployer le chatbot. Vous n’avez pas besoin de créer le Dockerfile puisqu’un exemple est disponible dans notre dépôt GitHub. Ce Dockerfile se trouve ici et ressemble à ceci :
Construire l’image Docker depuis le Dockerfile
Depuis le répertoire contenant votre Dockerfile (/apps/flask/conversational-rasa-chatbot/back-end/), exécutez l’une des commandes suivantes pour construire l’image de votre application :
-
La première commande construit l’image en utilisant l’architecture par défaut de votre système. Cela peut fonctionner si votre machine utilise déjà l’architecture
linux/amd64, requise pour exécuter des containers avec nos produits AI. Cependant, sur des systèmes avec une architecture différente (par exempleARM64surApple Silicon), l’image résultante ne sera pas compatible et ne pourra pas être déployée. -
La seconde commande cible explicitement l’architecture
linux/amd64afin de garantir la compatibilité avec nos services AI. Elle nécessitebuildx, qui n’est pas installé par défaut. Si vous n’avez jamais utilisébuildx, vous pouvez l’installer en exécutant :docker buildx install
L’argument point . indique que votre contexte de build (emplacement du Dockerfile et des autres fichiers nécessaires) est le répertoire courant.
L’argument -t vous permet de choisir l’identifiant à donner à votre image. Généralement, les identifiants d’image sont composés d’un nom et d’un tag de version <name>:<version>. Pour cet exemple, nous avons choisi <yourdockerhubId>/rasa-chatbot-backend:latest.
Envoyer l’image
Exécutez la commande suivante :
Déployer l’app
Maintenant que votre container est créé, lançons notre application et déployons notre modèle !
Explication de chaque ligne :
- Lance une app dans AI Deploy nommée « rasa-back ».
- Précise que notre URL n’est pas sécurisée par OVHcloud. Le modèle sera en réalité sécurisé par un Json web token. La seule personne qui accédera à votre modèle sera l’application frontend Flask. C’est aussi pour cette raison que vous avez créé des variables d’environnement précédemment. Pour en savoir plus sur les Json web tokens, référez-vous à https://jwt.io/.
- Le port du modèle rasa est 5005.
- 4 CPU suffisent pour déployer le modèle.
- Nous allons ajouter un volume pour récupérer le fichier du modèle.
- Dans l’argument
-e, placez la clé secrète jwt que vous avez générée, présente dans votre fichier.env. - Sur la dernière ligne, vous précisez l’image Docker à charger ainsi que la commande bash à exécuter à l’intérieur du container Docker.
Explication de la commande bash lançant le chatbot (vous pouvez la retrouver dans le Dockerfile) :
rasa run: lance un modèle spécifique à utiliser avec d’autres applications.-m trained-models: précise le chemin vers les modèles entraînés précédemment.--cors "*": active tous les cors, notre application frontend doit avoir accès au modèle.--debug: affiche tous les logs pour chaque utilisateur connecté et déconnecté.--connector socketio: précise ce connecteur afin de permettre une connexion pour créer un nouveau site web.--credentials "crendentials.yml": précise ici le chemin du fichier d’identifiants.--endpoints "endpoints.yml": précise le chemin du fichierendpoints.yml.rasa run actions: les actions personnalisées que vous avez créées précédemment, pour les lancer et les utiliser.
Maintenant, vous pouvez attendre que votre app démarre, puis accéder à l’URL. Rien de particulier ne se passera, à part un petit message hello from Rasa 3.2.10 !
Pour de meilleures interactions, nous allons maintenant déployer le frontend Flask. Pour simplifier, tout se trouve dans le dépôt GitHub cloné.
Déployer l’app frontend
- Créer le Dockerfile
Nous allons d’abord devoir créer le Dockerfile. Comme précédemment, ce Dockerfile a déjà été créé et se trouve dans le dossier front-end. Le fichier est ici et ressemble à ceci :
Lançons maintenant l’app sur AI Deploy ! Pour cela, vous devrez créer une image Docker. Rendez-vous dans le dossier front-end (ai-training-examples/apps/flask/conversational-rasa-chatbot/front-end) et exécutez l’une des commandes suivantes :
Puis envoyez votre image :
- Déployer l’image Docker
Une fois l’image construite, lançons l’application frontend avec la CLI ovhai.
Mais d’abord, récupérez l’URL de votre app backend du chatbot Rasa. Elle ressemblera à ceci : https://259b36ff-fc61-46a5-9a25-8d9a7b9f8ff6.app.gra.ai.cloud.ovh.net/. Vous pouvez l’obtenir avec la CLI en listant toutes vos apps et en repérant celle que vous souhaitez.
Vous pouvez maintenant exécuter cette commande :
Voilà ! Sur l’URL de cette app, vous pouvez discuter avec votre chatbot. Essayez d’avoir une conversation simple ! Si vous rechargez la page, vous remarquerez que le chatbot repart de zéro. Chaque utilisateur est donc différent sur chaque machine.
Voici un exemple de discussion avec le chatbot :
Aller plus loin
Si vous souhaitez voir comment le modèle est créé et entraîné avec AI Notebooks, suivez ce tutoriel.
Comment créer et entraîner un chatbot rasa
Si vous souhaitez entraîner un chatbot Rasa avec l’outil AI Training, référez-vous à ce tutoriel.
Comment entraîner un chatbot avec Docker et AI Training
Si vous souhaitez utiliser davantage de fonctionnalités de Rasa, suivez ce lien. Nous utilisons Rasa Open Source et non Rasa X.
Si vous souhaitez en savoir plus sur le framework Flask, rendez-vous sur ce lien.
Votre avis nous intéresse !
N’hésitez pas à nous faire part de vos questions, retours et suggestions pour améliorer le service :
- Sur le serveur Discord OVHcloud
Pour une formation ou une assistance technique sur la mise en œuvre de nos solutions, contactez votre commercial ou consultez la page Professional Services pour obtenir un devis et faire analyser votre projet par nos experts.