07/03/2022
Utilisation de Dialogueflow de Google pour créer un chatbot basé sur l'IA
Le Dialogueflow de Google offre une alternative à Amazon Alexa pour ceux qui souhaitent créer des assistants basé sur l'IA. Ceux-ci ne nécessitent pas d'interaction vocale et peuvent être intégrés dans Slack, Facebook Messenger et plus encore. Découvrez dans cet article comment créer un agent Dialogueflow capable de demander les données de l'API météo de Meteomatics.
Il y a plusieurs mois, j'ai écrit un article sur la façon dont nous avons créé une compétence vocale pour les appareils compatibles avec Alexa. Les assistants vocaux ont gagné en popularité au cours de la dernière décennie, principalement grâce aux progrès de l'intelligence artificielle. Plus précisément, dans le domaine du traitement automatique des langues (plus couramment appelé NLP – de l'anglais : natural language processing) - une discipline hybride de l'informatique et de la linguistique - l'avènement des réseaux de neurones a rendu beaucoup plus facile l'entraînement d'une IA pour interpréter, traiter et répondre à la parole humaine. Dans l'article d'aujourd'hui, je vais parler de mon travail avec le service équivalent de Google et le logiciel qui l'alimente - Dialogueflow - et expliquer pourquoi cet outil est très différent du service fourni par Amazon. Mais tout d'abord, un peu de contexte...
Une brève histoire de la NLP
Bien que la conversion de la parole d'un utilisateur en texte enregistré sur un ordinateur, et la réponse texte-parole subséquente de l'ordinateur à l'utilisateur soient des réalisations technologiques à part entière, c'est le traitement du texte entre les deux qui a été historiquement le plus difficile des problèmes impliqués.
Nous pouvons considérer les premières tentatives de NLP comme des organigrammes compliqués. Étant donné un sujet de conversation, on suppose qu'il n'y a qu'un certain nombre de questions qui peuvent être posées, et qu'il n'y a qu'un certain nombre de réponses à chacune d'entre elles. Il s'agit toutefois d'une simplification grossière. Bien que les humains soient tout à fait capables de sélectionner la meilleure option de réponse en fonction de leur intention, cette interaction est hautement robotique et n'est pas du tout "naturelle". En outre, penser à toutes les réponses possibles à une question est une tâche incroyablement difficile. Bien souvent, ces approches sont loin d'y parvenir - pensez à votre dernière "conversation" avec un menu de banque par téléphone, par exemple.
Considérez à quel point votre conversation moyenne est "prévisible" : même si vous avez une bonne idée du sens général de la prochaine phrase de votre partenaire, essayez de deviner chaque mot qu'il prononce dans l'ordre avant qu'il ne sorte de sa bouche. Il est clair que cela n'est pas faisable, et l'approche a donc été abandonnée à la fin du 20e siècle, après quoi la NLP s'est concentrée sur la compréhension statistique d'un corpus. Les algorithmes d'apprentissage automatique (1) pourraient ingérer un grand nombre d'exemples antérieurs de conversations et déterminer certaines combinaisons probables de mots clés qui correspondent à une intention.
Cette approche, qui s'appuie fortement sur une interprétation de ce qu'est le langage et de son fonctionnement selon Chomsky, est encore largement utilisée aujourd'hui. La principale évolution de ces dix dernières années a été l'application des réseaux neuronaux au problème. Les réseaux neuronaux sont un sous-ensemble d'algorithmes d'apprentissage automatique, mais sont essentiellement des boîtes noires pour les non-initiés (2). Cependant, les résultats sont impressionnants : alors qu'un algorithme d'apprentissage automatique classique peut nécessiter un corpus de milliers de livres (3), un réseau neuronal peut obtenir des résultats similaires avec seulement une poignée de phrases.
En fait, les assistants vocaux et les IA NLP sont encore loin d'émuler complètement l'interaction humaine - imaginez, par exemple, que vous posiez deux questions à la fois à votre appareil (et que vous attendiez une réponse à chacune d'entre elles). Mais l'idée que le langage est appris par l'expérience, plutôt que par un modèle, et la capacité de traduire cette idée en code informatique, signifie que nous pouvons au moins approximer une conversation avec nos téléphones aujourd'hui.
En quoi Dialogueflow est-il différent ?
Ce qui ressort clairement de l'historique ci-dessus, c'est que la NLP est la garniture du sandwich de l'assistant vocal. Ce que les lecteurs de mon précédent article peuvent se demander, c'est : "pourquoi vous refaites cela ? L'article sur Alexa couvre certainement ce que nous devons savoir..."
La réponse est que, en raison de la manière dont les compétences d'Alexa sont développées, il est beaucoup moins facile de déconstruire le sandwich au cas où vous auriez une intolérance à la synthèse vocale et que vous voudriez mettre la garniture entre les tranches de la messagerie pop-up à la place. Comme Google a développé Dialogueflow de manière totalement indépendante de leur logiciel de reconnaissance vocale, l'IA qui gère les conversations peut être intégrée dans des logiciels tiers. Bien sûr, vous pouvez l'utiliser avec d'autres produits téléphoniques, tels que Genesys et Twilio, mais vous pouvez également l'utiliser pour créer un chatbot entièrement basé sur le texte avec Facebook Messenger et Slack, entre autres, ou créer un bot Twitter, le tout en utilisant le même logiciel.
Comment cela fonctionne-t-il ?
À l'exception de quelques changements de nomenclature, la recette globale d'un "agent" Dialogueflow (4) est très similaire à celle d'Alexa : un "utilisateur final" émet une "expression" (énoncé), qui correspond à une "intention", qui peut ou non avoir des "paramètres" (slots) de "types d'entités (slots)" donnés. Ici, j'ai mis la nomenclature utilisée par Alexa entre parenthèses après chaque terme nommé différemment - je renvoie à nouveau les lecteurs intéressés à mon article, ou simplement à la documentation de Dialogueflow, qui est facile à suivre (du moins en ce qui concerne l'accomplissement - voir ci-dessous).
Il y a plusieurs choses que j'ai particulièrement appréciées dans le fait de travailler avec Dialogueflow plutôt qu'avec Alexa. Tout d'abord, les quickstarts sont présentés dans un ordre logique et sont, pour la plupart, facilement compréhensibles. J'apprécie également la distinction supplémentaire "intention de suivi", qui permet au concepteur d'autoriser l'accès à certaines intentions uniquement lorsqu'une intention précédente a déjà été déclenchée, ce qui facilite grandement l'organisation des intentions sans qu'elles ne se chevauchent. J'apprécie également l'interface simple de Dialogueflow pour se souvenir des paramètres fournis par l'utilisateur, ce qui était difficile à réaliser avec Alexa.
Fulfilment
La principale différence - et pour moi le plus grand défi de Dialogueflow - apparaît au moment où nous avons besoin d'interagir avec une source d'information externe (dans ce cas l'API de Meteomatics). Dans le cas d'Alexa, tout ce que nous avions à faire était d'écrire du code Python dans l'onglet Code de la console de développement Alexa. Dans Dialogueflow, les choses sont un peu plus compliquées. Au lieu d'appeler l'API directement, nous devons le faire via un "webhook".
"Qu'est-ce qu'un webhook ?", m'écrierez-vous. C'est une bonne question. Si je comprends bien, un webhook est essentiellement une application laissée à l'écoute d'une URL donnée. Elle peut donc être contactée via Internet et agit comme un intermédiaire entre l'utilisateur (Dialogueflow) et une tierce partie (dans notre cas, l'API Meteomatics). Personne ne sait pourquoi vous voudriez faire cela, mais c'est la façon dont Dialogueflow accède à une API externe, et qui suis-je pour remettre en question la sagesse essentielle de Google ?
Heureusement pour vous, webplebs, j'ai inclus un exemple de code sur la façon dont j'ai créé un webhook en Python pour récupérer des données météorologiques à partir de l'API Meteomatics. Je me suis limité à cet exemple trivial car vous voudrez sans doute vous amuser à créer le vôtre, mais contactez-moi pour obtenir d'autres exemples, ou consultez le Meteomatics GitHub, où j'en mettrai bientôt en ligne.
from flask import Flask from markupsafe import escape import meteomatics.api as api import datetime as dt username = 'XXXXXXX' password = 'XXXXXXX' app = Flask(__name__) @app.route("/api-call/variable:<variable>", methods=["POST"]) def api_call(variable): lookup = { 'temperature': 't_2m:C' } var = lookup[variable] df = api.query_time_series([(47.43, 9.4)], dt.datetime.now() - dt.timedelta(hours=24), dt.datetime.now(), dt.timedelta(hours=1), [var], username, password) t = df['t_2m:C'].iloc[-1] return f"It's {t} degrees Celsius"
J'ai écrit ceci après avoir suivi le quickstart dans la documentation de flask (le package Python utilisé pour créer des applications web). Je vous recommande de lire cette documentation, car l'exécution réussie d'un webhook ne se résume pas à l'écriture d'un script Python ; en particulier, vous devez exécuter l'application à partir d'un terminal.
Une fois que nous avons configuré le webhook pour récupérer les données de l'API et les traiter en fonction de notre demande, tout ce que nous avons à faire est de cliquer pour basculer Webhook sur "Enabled" dans l'onglet Fulfilment de notre Agent Dialogueflow et de le diriger vers l'URL du webhook que nous avons créé. Pour les besoins de l'expérience, j'ai exécuté mon application flask sur le LocalHost de mon ordinateur - ce qui signifie qu'elle est invisible pour les ordinateurs situés en dehors de mon réseau.
C'est donc plus ou moins tout ce qu'il y a à faire ! Les deux points que je n'ai pas abordés dans le billet d'aujourd'hui sont l'hébergement du webhook sur un serveur visible par le public et l'intégration de l'application terminée dans un outil tiers. Gardez l'œil ouvert pour ces développements, qui pourraient être abordés dans de prochains articles de blog. En attendant, amusez-vous bien avec Dialogueflow, et n'hésitez pas à me contacter sur [email protected] pour poser vos questions ou partager vos succès avec l'outil.
Parlez à un expert
Trouvons la solution parfaite pour votre problème. Parlez à un expert.