Un chatbot pour le contrôle des actifs

Oct 29 2020
Dans cet article, je mets en place un chatbot pour Asset Control comme un petit projet amusant. Pourquoi? Parce que je voulais implémenter un chatbot depuis un certain temps - ne serait-ce que pour comprendre comment le faire - et le faire dans le domaine AC semble tout simplement naturel.

Dans cet article, je mets en place un chatbot pour Asset Control comme un petit projet amusant. Pourquoi? Parce que je voulais implémenter un chatbot depuis un certain temps - ne serait-ce que pour comprendre comment le faire - et le faire dans le domaine AC semble tout simplement naturel. Je vais également l'intégrer à Slack pour voir comment cela pourrait s'intégrer à mes outils et flux de travail déjà existants.

Un chatbot pour faire quoi?

Vous aurez déjà rencontré des chatbots à plusieurs endroits. Ils peuvent se trouver sur les sites Web de l'entreprise et vous aider à obtenir des réponses aux questions fréquemment posées, vous permettre de faire des réservations, etc.

Dans ce cas, je souhaite implémenter un prototype de chatbot à intégrer à Slack qui me permette de communiquer avec Asset Control. Je pourrais vouloir lui demander des informations sur l'état de mon env AC ou demander des données.

Pour guider l'implémentation, j'ai utilisé les questions suivantes auxquelles le bot devrait pouvoir répondre:

  • Quel est le dernier prix pour XYZ?
  • Quel était ce mois haut pour XYZ?
  • Combien de suspects aujourd'hui?
  • La réplication est-elle à jour?

Alors, implémentons-nous le bot à partir de zéro? Bien sûr que non. Il existe un certain nombre de solutions et j'ai rapidement opté pour Google Dialogflow. Voyons comment cela fonctionne.

Construire le bot dans Dialogflow

Pour créer notre bot dans Google Dialogflow, nous devons comprendre quelques concepts:

  • Intentions
  • Entités
  • Accomplissement

Un intent regroupe tout ce qui appartient à un certain sujet étroitement défini que le bot doit gérer. Dans notre cas, il s'agit de la récupération du dernier prix disponible d'un stock de notre système. Nous utiliserons Dialogflow pour entraîner le bot à comprendre quand la conversation porte sur une telle intention en lui donnant des phrases d'entraînement. Nous verrons cela dans une minute.

Ensuite, les entités sont des blocs de construction qui composent notre conversation et sont d'un intérêt particulier pour que nous voulions les capturer comme paramètres. Maintenant, dans notre cas, ce serait le symbole boursier AAPL lorsque nous posons la question "Quel est le dernier prix pour AAPL?"

Enfin, le concept de réalisation nous permet d'accéder à des services situés à l'arrière du chatbot via des webhooks. C'est là que nous communiquerons avec Asset Control pour rechercher le stock donné et récupérer le dernier prix disponible.

Maintenant, construisons notre bot.

Étape 1: Configurez votre bot.

Se diriger vers https://dialogflow.cloud.google.com/#/login et connectez-vous. Créez ensuite un Agent AcChatBot:

Étape 2: créer une entité Stock

Dans le menu de gauche, cliquez sur Plus à côté d'entités, appelez-le Stock et entrez [A-Z][A-Z0-9]{1,6}comme une expression régulière. Bien que ce ne soit pas entièrement une correspondance pour les symboles boursiers, cela suffit pour notre exemple et fonctionne avec les vérifications sur les expressions régulières effectuées par Dialogflow lui-même (par exemple pas trop large, etc.). Puis enregistrez-le.

Étape 3: créer l'intention du dernier prix

Il est temps pour notre intention de dernier prix. Encore une fois, dans le menu de gauche, sélectionnez le Plus à côté des intentions, appelez-le Last priceet cliquez sur AJOUTER DES PHRASES DE FORMATION:

Entrez What is the last price for AAPL?. Ensuite, mettez AAPLen surbrillance avec votre souris. Cela fera apparaître un pop-up. Recherchez Stock, puis sélectionnez l'option présentée:

Si c'est bien fait, le résultat ressemblera à ceci pour garantir que Dialogflow capture correctement l'entité Stock:

IMPORTANT! Ensuite, faites défiler vers le bas, ouvrez la section Fulfillment, cliquez sur Enable Fulfillment, puis basculez pour Enable webhook call for this intentaimer ainsi:

Cela nous permet d'appeler notre propre fonction backend et de communiquer avec Asset Control.

Assurez-vous de sauvegarder l'intention avant de continuer.

Étape 4: implémenter un service REST pour récupérer les données Asset Control

Encore une fois, il existe de nombreuses façons de procéder. Nous utiliserons Spring Boot car il fait tout le travail lourd pour nous et nous restons en Java et pouvons donc utiliser immédiatement la même API Java Asset Control qu'Adetta utilise.

Si vous ne le savez pas encore, Adetta est notre logiciel d'automatisation de test pour Asset Control. Assurez-vous de jeter un œil à l' Introduction d'Adetta ici .

Le bit intéressant est une classe AcBotControlleret sa handleIntentméthode comme indiqué ci-dessous:

Vous pouvez voir que le webhook pour l'exécution de Dialogflow gère une requête POST. Son entrée et sa sortie sont JSON. Et nous utilisons des GoogleCloudDialogflowV2Webhook*classes pour gérer à la fois la requête et la réponse JSON pour nous.

La gestion réelle de l'intention est transmise à un AcBotIntentHandler que nous obtenons en appelant AcBotIntents.getHandlerFor(request). Regardons cette classe:

Nous construisons un mappage des intentions aux gestionnaires (vous vous souvenez de notre Last priceintention?) Et implémentons une méthode pour récupérer un gestionnaire approprié étant donné l'intention codée dans l'objet de requête. Nous définissons également un gestionnaire par défaut au cas où nous ne pourrions pas trouver un gestionnaire réel:

Maintenant, pour obtenir notre dernier prix pour une action donnée, regardons AcBotLastPriceIntentHandler:

Vous voyez comment nous récupérons notre paramètre d'entité Stock à partir de l'objet de requête en utilisant request.getQueryResult().getParameters().getOrDefault("Stock", ""), puis appelons getLastPriceMessageForStockcomme indiqué ici:

Nous nous protégeons contre une valeur manquante pour le stock. Sinon, nous parcourons notre système de contrôle des actifs pour les actions avec le ticker donné. Dans le cas où nous n'avons pas un tel ADO, nous affichons le message correspondant. Sinon, nous continuons à récupérer les données de tarification pour chaque ADO que nous avons trouvé (alors que cela ne devrait être qu'un seul ADO, l'implémentation renverrait simplement plusieurs messages si nécessaire.)

Voici comment nous trouvons le dernier prix:

Nous chargeons la série temporelle de l'ADO, récupérons le dernier enregistrement et, s'il est présent, créons un message qui se lira comme The last price for AAPL (C0.EQY.100101) is from 2020-06-12 at $338.00. Et encore une fois, nous nous protégeons contre les cas où nous ne pouvons pas trouver de prix.

En utilisant Spring Boot, nous pouvons le déclencher et faire fonctionner notre service REST sur localhost: 8080 / ac-bot. Et ensuite?

Eh bien, nous trichons évidemment un peu car nous ne déployons ce service nulle part, donc afin de le rendre disponible de l'extérieur, nous utiliserons ngrok pour mettre en place un tunnel pour nous:

Étape 5: Configurer notre propre webhook d'exécution

Ensuite, nous devons indiquer à Dialogflow où se trouve notre service REST, alors retournez-y et cliquez sur Exécution dans le menu de gauche:

Entrez ensuite l' https://...adresse fournie par ngrok et assurez-vous d'ajouter le /ac-botà la fin.

Ok, le moment de vérité. Dans le coin supérieur droit où il est dit Try it now, nous pouvons taper What is the last price for AAPL?et si tout fonctionne bien, nous devrions obtenir la réponse suivante:

C'est excitant!

Étape 6: Intégrez notre chatbot à Slack

Maintenant, nous n'allons pas continuer à utiliser la console Dialogflow pour jouer avec notre bot. Nous allons plutôt l'intégrer à Slack. Alors, choisissez Intégrations dans le menu de gauche, trouvez Slack et démarrez un bot de test:

Ensuite, rendez-vous sur Slack et commencez à discuter avec le bot:

Ensuite, nous pouvons répéter le cycle pour mettre en œuvre les autres questions / intentions décrites au début de l'article.

Mots de clôture

J'ai pensé que c'était amusant à faire. Et plus facile que je ne le pensais. Bien sûr, j'ai pris un certain nombre de raccourcis:

  • Exécuter uniquement le service localement.
  • Aucune considération pour la sécurité, le contrôle d'accès et le choix de l'environnement de contrôle des actifs.
  • Utilisation très limitée du bot.

J'espère que vous avez apprécié cet article. Contactez-nous pour partager vos réflexions, poser des questions, etc. Nous sommes là pour vous aider.