Les ChatBots - Partie 1 : présentation - utilité - installation

MarieKisSlaJoue

Pour réagir au contenu de cet article, un espace de dialogue vous est proposé sur le forum. Commentez

- Titre : Les ChatBots - Partie 1 : présentation - utilité - installation

- Auteur : MarieKisSlaJoue

- Parution : 6 mai 2019

- Licence : Le contenu de cet article est rédigé par MarieKisSlaJoue et est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 non transposé. Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright ® 2013 Developpez.com.

Sommaire

- I. Qu'est-ce qu'un ChatBot ?

- II. Pourquoi en parle-t-on maintenant ?

- III. À quoi ça sert ?

- IV. De quoi ça se compose ?

- V. Comment ça s'installe ?

- VI. Comment ça s'utilise sans s'installer

- VII. Le code généré pour faire un Hello World

- VIII. Conclusion

- IX. Note de la rédaction de Developpez.com

I - Qu'est-ce qu'un ChatBot ?

Un ChatBot, aussi appelé agent conversationnel est un programme avec qui on peut discuter. Ce type de programme est en réalité très ancien, depuis que le test de Turing existe (c'est-à-dire depuis 1950, c'est dire si c'est vieux), on a toujours essayé de simuler une conversation humaine par un programme.

Les ChatBots ont donc servi au cours des années de Quiz interactifs sur IRC, mais aussi d'opérateurs sur certains serveurs vocaux ou sites de e-commerce.

En bref, un ChatBot est un programme informatique avec qui vous allez interagir en dialoguant par écrit ou à l'oral. Il doit comprendre au mieux des phrases naturelles qu'on utilise tous les jours. Il va ensuite aider l'utilisateur à accomplir une tâche, résoudre un problème ou bien se divertir.

II - Pourquoi en parle-t-on maintenant ?

Si les ChatBots sont anciens (1950), on peut alors se demander pourquoi on en parle autant maintenant. C'est en réalité la combinaison de plusieurs facteurs qui ont fait exploser les ChatBots.

En premier lieu, les avancées dans le Machine Learning et l'Intelligence Artificielle. Les progrès dans ces domaines ont permis de doter des ChatBots idiots qui se résumaient à des If, Equals et Contains (ce qui est quelque part toujours un peu le cas) à une simili-intelligence grâce à ce qu'on appelle des PNL pour Programmation Neuro-Linguistique (ou NLP en anglais pour Neuro-Linguistic Programming).

Deuxième facteur de l'émergence des ChatBots, les applications de messagerie. En effet, les applications les plus utilisées à ce jour sont les applications comme Skype, WhatsApp ou Messenger. Les ChatBots sont compatibles avec quasiment toutes les applications de messagerie, SMS compris, et cela ouvre donc une nouvelle voie pour interagir avec l'utilisateur.

Enfin, le dernier facteur est l'impulsion donnée par les GAFAM pour promouvoir l'IA et les ChatBots. En effet, les géants du Web comme Microsoft, Google ou IBM mettent tous à disposition des outils de PNL pour y accéder en mode as a Service, prêts à l'emploi. De plus, des Frameworks pour construire et gérer facilement son ChatBot sont aussi apparus, de quoi pousser de plus en plus de développeurs sur le chemin des ChatBots.

III - À quoi ça sert ?

Les ChatBots sont des programmes informatiques, ils peuvent donc servir comme tout programme informatique à beaucoup de choses : automatiser des process métiers, informer ou divertir un utilisateur, enseigner, remplacer certains métiers, gérer de l’Internet des Objets (IoT), etc. Un ChatBot est en fait un nouveau moyen de consommer un service. Des sites web sont venus se substituer à des applications de bureau, des applications mobiles sont venues se substituer à des sites web, les ChatBots remplaceront assurément des services proposés aujourd'hui par des applications mobiles. Comme toutes petites révolutions dans le monde de l'informatique, cette nouvelle façon d'interagir avec l'utilisateur, qui a commencé avec les assistants virtuels comme Cortana, Siri et Google Now, apporte ses avantages et ses inconvénients.

IV - De quoi ça se compose ?

Maintenant que nous avons vu le côté un peu fonctionnel des ChatBots, on va pouvoir s'intéresser à leurs composants techniques.

Un ChatBot est avant tout un Framework qui repose généralement sur une technologie web, une API web même (C’est le cas du Bot Framework vu ici). Autrement dit, c'est un site web qui va vous envoyer des informations (les réponses de votre ChatBot) au format JSON.

Personnellement, j'aime bien diviser les ChatBots en trois voire quatre parties distinctes qui sont un peu les mêmes que les applications d'aujourd'hui.

La première partie est l'interface utilisateur, dans le cadre des ChatBots l'interface utilisateur n'est rien d'autre qu'une fenêtre de Chat pour dialoguer par écrit ou bien même seulement la voix. On appelle ce type d'interface des CUI pour Conversational User Interface. L'utilisateur se servira du ChatBot (et donc du service hébergé par ce ChatBot) uniquement à l'aide de phrases et de mots. En utilisant des termes plus communs, cette partie est tout simplement le Front de votre application.

La seconde partie est le moteur du ChatBot, votre Web API, ce qui va contenir votre logique métier et permettre l'interaction avec l'utilisateur. Les ChatBots tournent simplement sur des serveurs web (IIS, Apache, NGINX, etc.) On peut appeler cette partie-là le Back de votre application.

La troisième partie d'un ChatBot, optionnelle, est le moteur PNL. Ce moteur permettra de transformer les phrases de votre utilisateur en intentions et en entités permettant à votre ChatBot de comprendre un utilisateur qui parle comme s'il parlait à un autre humain. Cette brique, bien que plus longue à mettre en place, peut apporter une vraie valeur ajoutée à votre ChatBot. À ne pas négliger donc.

La dernière partie est comme pour toute application la persistance des données. Un ChatBot qui ne contient pas de données risque de ne pas intéresser beaucoup vos utilisateurs. Ces données peuvent provenir de votre propre base, d'API de votre propre système d'information ou bien de l’extérieur.

V - Comment ça s'installe ?

Pour commencer à pouvoir développer son ChatBot, il y a certains prérequis à avoir sur sa machine de développement :

- Visual studio 2017 est conseillé par la documentation, mais la version 2015 fonctionne aussi ;

- le Bot reposant sur des technologies Web, il est nécessaire de pouvoir faire tourner une application Web à un moment donné, donc IIS Express minimum est requis ;

- le Template Bot Application, qui permet de créer un projet Bot dans Visual Studio sans partir de zéro ;

- les packages Nuget qui contiennent le Framework ;

- le Bot-Emulator, afin de pouvoir discuter avec votre ChatBot.

La première étape consiste à installer Visual Studio si vous ne l'avez pas déjà. La version Community, disponible gratuitement, est suffisante pour développer votre ChatBot.

Ensuite, vous devez également télécharger le Template Bot Application qui est un zip qu’il faudra ensuite décompresser. Ce Template n'est pas le Bot Framework, c'est un exemple de fichiers et d'architecture pour démarrer le développement de votre ChatBot plus rapidement.

Cela veut dire que vous pouvez très bien créer un projet web vide et installer les packages Nuget pour créer votre ChatBot de zéro si vous le souhaitez.

Une fois le Template Bot Application téléchargé, vous pouvez le décompresser et le mettre par défaut dans le chemin suivant :

%userprofile%\Documents\Visual Studio 2017\Templates\ProjectTemplates\Visual C#

Maintenant, vous pouvez lancer Visual Studio. Quand vous créerez un nouveau projet, vous pourrez voir les projets Bot Application apparaître dans la section Visual C#.

Si jamais vous n'avez pas de IIS sur votre machine, une erreur apparaît si vous tentez de créer un projet. Pour éviter cette erreur, vous pouvez télécharger IIS Express gratuitement.

Maintenant que tous les prérequis techniques sont installés, vous pouvez créer votre premier projet Bot Application.

Des erreurs peuvent survenir dans le projet à cause de références non à jour. Votre volet références dans le projet ressemblera alors à quelque chose comme cela :

Pour corriger cela, ouvrez Nuget et faites restore pour télécharger les dernières versions des assemblies. Pour en savoir plus sur le package Nuget de Bot Framework, vous pouvez vous référer à la documentation Microsoft.Bot.Builder sur Nuget.org.

Une fois effectuée, vous pouvez exécuter la solution, une page localhost s'ouvre en vous donnant plusieurs informations très utiles.

La première étant le nom actuel de votre projet et donc de votre ChatBot. La seconde est le lien vers le site Bot Framework qui permettra d'enregistrer votre ChatBot pour ensuite l'ajouter à des applications de messagerie. Nous verrons cela plus tard.

Cette page est évidemment modifiable et peut vous servir à héberger par exemple une iFrame pour discuter avec votre ChatBot sans passer par un client de messagerie, ou des conseils à destination de vos utilisateurs pour utiliser votre ChatBot.

Mais avant de voir un peu plus en détail ce qui a été généré automatiquement, continuons notre chemin pour parler à notre ChatBot.

Maintenant que le ChatBot est en ligne, il est nécessaire de pouvoir lui envoyer des messages et recevoir ces réponses. Pour cela, il suffit de télécharger le Bot-Emulator : ce programme vous fournit une interface pour interagir avec votre ChatBot.

Une fois l'émulateur de conversation installé, mettez dans le EndPoint l'adresse de votre bot indiquée sur la page Web ouverte, donc, http://localhost:3979/api/messages et faites connectez.

Si la fenêtre de log indique POST 200, vous êtes bien connecté à votre bot et vous pouvez commencer à lui envoyer un message :

Par défaut, le comportement de votre ChatBot sera de vous répondre le mot que vous avez dit et son nombre de caractères. Félicitations, c'était votre premier Hello World avec un Bot :

Il ne vous reste plus qu'à personnaliser votre bot pour maintenant créer vos propres dialogues.

VI - Comment ça s'utilise sans s'installer

Nous avons vu que la configuration pour avoir un ChatBot en localhost n'est pas insurmontable, mais nécessite quand même quelques prérequis parfois plus ou moins durs à trouver.

Il existe un moyen encore plus simple d'avoir un ChatBot prêt à l'emploi. Pour cela, direction Azure !

Faire son ChatBot sur Azure à plusieurs avantages comme :

- la création de votre ChatBot est très rapide et est aidée par des templates proposés de base dont un directement avec LUIS, le NLP de Microsoft ;

- pas de gestion de l'infrastructure (on est en mode PaaS pour les connaisseurs) ;

- vous n'avez pas de problèmes liés à la charge d'utilisation de votre ChatBot.

Les inconvénients de Azure étant :

- vous avez besoin d'une souscription et donc vous payez .

En tout cas, si vous voulez faire votre ChatBot sur Azure, vous avez simplement à chercher sur Azure « Bot Service » ainsi que lui trouver un nom encore disponible.

L'interface de votre ChatBot sur Azure ressemble à ça :

Il a un peu plus de fichiers et de lignes de code, mais le fonctionnement vu précédemment ne change pas. Ici, j'ai décidé de générer un ChatBot basé sur un formulaire.

Pour parler à mon Chatbot, il suffit de cliquer en haut à droite sur « Test » en bleu. Une fenêtre de Chat apparaît alors et vous permet de commencer à discuter avec votre ChatBot :

Nous n'irons pas plus loin sur la démonstration Azure, car nous irions déjà trop loin par rapport à ceux qui commencent en local. Mais comme vous pouvez le constater, Azure permet vraiment de commencer plus vite.

VII - Le code généré pour faire un Hello World

On va maintenant passer un peu plus au crible ce qui a été généré dans notre Bot Application. En regardant le nom des fichiers comme WebApiConfig ou MessagesController, on peut constater deux choses. Notre ChatBot est bien une Web API. Par défaut, le template qui nous est proposé se décompose selon le pattern MVC. Nous avons notre contrôleur, l'équivalent des vues avec ce que l'on appelle un IDialog, et bien sûr il ne tient qu’à nous de faire nos modèles.

La première classe est WebApiConfig. Cette classe gère, entre autres, le EndPoint de votre ChatBot pour y accéder.

Vous avez ensuite le MessagesController. C'est cette classe qui va s'occuper de recevoir les messages envoyés à votre ChatBot. En réalité, votre ChatBot peut recevoir bien plus que des messages. Il reçoit des activités qui peuvent être :

- des messages, comme quand on envoie « Hello World » dans l'émulateur de conversation ;

- l'événement comme quoi un utilisateur a été supprimé (à tester) ;

- la mise à jour d'une conversation, par l'ajout ou la suppression d'un membre à celle-ci ;

- la mise à jour d'une relation, par l'ajout ou la suppression d'un membre de la liste de contacts ;

- l'événement comme quoi quelqu'un est en train de taper au clavier pour envoyer un message ;

- le ping d'un utilisateur.

Comme vous pouvez le constater, toutes les actions sont récupérées par la méthode Post. Par défaut, si une activité de type message est détectée, donc qu'un utilisateur a envoyé un message, une conversation commence, cette conversation est composée d'un dialogue qui par défaut se nomme RootDialog.

D'ailleurs RootDialog est un peu l'équivalent de votre fenêtre Main dans une application bureau, il implémente l'interface IDialog et est Serializable, beaucoup d'informations que l'on verra plus tard. Pour l'instant, il est important de se concentrer sur le fait que quand RootDialog commence, il appelle votre fonction MessageReceivedAsync grâce à la ligne context.Wait(MessageReceivedAsync);.

La fonction MessageReceivedAsync va se charger de traiter une Activity donnée à votre RootDialog. Cette Activity contient une propriété Text qui est tout simplement le texte écrit par l'utilisateur dans la fenêtre de Chat.

Ici la fonction va récupérer la longueur de ce texte puis renvoyer la réponse que l'on a vue dans notre Hello Word. Ce qui permet à notre ChatBot de répondre n'est autre que la ligne suivante :

await context.PostAsync( $"You sent {activity.Text} which was {length} characters" );

Actuellement, nous sommes toujours dans notre RootDialog et nous ne voulons pas en sortir, la prochaine fois qu'un utilisateur nous parlera on souhaitera donc directement continuer avec notre fonction MessageReceivedAsync. Pour cela notre dernière ligne sera context.Wait(MessageReceivedAsync);.

Nous reviendrons plus tard sur context.Wait et ces autres commandes quand nous construirons plusieurs IDialog.

Le reste du projet est classique des projets Web, vous trouverez la page par défaut de votre site, celle qui affiche le nom de votre ChatBot et son URL dans le fichier default.htm.

Évidemment , vous avez aussi un Web.config, qui a trois clés intéressantes : BotId, MicrosoftAppId et MicrosoftAppPassword, mais là aussi inutile de s'y attarder pour le moment.

VIII - Conclusion

Voilà, la base du ChatBot n'a normalement plus de secret pour vous. Vous devriez maintenant être en mesure d'installer votre environnement pour commencer à développer et à écrire votre premier ChatBot en récupérant les messages de votre utilisateur et en formulant une réponse.

Vous avez sans doute compris que la prochaine étape est de publier votre ChatBot pour le rendre accessible au plus grand nombre ainsi que de créer vos propres dialogues.

IX - Note de la rédaction de Developpez.com

Nous tenons à remercier François DORIN et Hinault Romaric pour la relecture technique, et f-leb pour la relecture orthographique.