Un chatbot per il controllo delle risorse

Oct 29 2020
In questo articolo, sto mettendo insieme un chatbot per Asset Control come un piccolo progetto divertente. Perché? Perché volevo implementare un chatbot per un po ', se non altro per capire come farlo, e farlo nel dominio AC mi sembra naturale.

In questo articolo, sto mettendo insieme un chatbot per Asset Control come un piccolo progetto divertente. Perché? Perché volevo implementare un chatbot per un po ', se non altro per capire come farlo, e farlo nel dominio AC mi sembra naturale. Lo integrerò anche con Slack per vedere come potrebbe adattarsi ai miei strumenti e flusso di lavoro già esistenti.

Un chatbot per fare cosa?

Ormai ti sarai imbattuto in chatbot in più posti. Potrebbero trovarsi sui siti Web dell'azienda e aiutarti a ottenere risposte alle domande più frequenti, consentirti di effettuare prenotazioni ecc.

In questo caso, voglio implementare un prototipo di chatbot da integrare con Slack che mi permetta di comunicare con Asset Control. Potrei chiedergli informazioni sullo stato del mio ambiente AC o richiedere dati.

Per guidare l'implementazione, ho utilizzato le seguenti domande a cui il bot dovrebbe essere in grado di rispondere:

  • Qual è l'ultimo prezzo per XYZ?
  • Qual è stato il massimo di questi mesi per XYZ?
  • Quanti sospetti oggi?
  • La replica è aggiornata?

Quindi, stiamo implementando il bot da zero? Ovviamente no. Esistono diverse soluzioni là fuori e ho subito optato per Google Dialogflow. Vediamo come funziona.

Costruire il bot in Dialogflow

Per costruire il nostro bot in Google Dialogflow dobbiamo comprendere alcuni concetti:

  • Intenti
  • Entità
  • Compimento

Un intento raggruppa tutto ciò che appartiene a un determinato argomento definito in modo restrittivo che il bot dovrebbe gestire. Nel nostro caso si tratta del recupero dell'ultimo prezzo disponibile di uno stock dal nostro sistema. Useremo Dialogflow per addestrare il bot a capire quando la conversazione riguarda un tale intento fornendogli frasi di addestramento. Lo vedremo tra un minuto.

Quindi le entità sono elementi costitutivi che costituiscono la nostra conversazione e sono di particolare interesse in modo che vogliamo catturarli come parametri. Ora, nel nostro caso quello sarebbe il simbolo del ticker AAPL quando poniamo la domanda "Qual è l'ultimo prezzo per AAPL?"

Infine, il concetto di adempimento ci consente di raggiungere i servizi sul retro del chatbot tramite webhook. Cioè, comunicheremo con Asset Control per interrogare il titolo dato e recuperare l'ultimo prezzo disponibile.

Ora costruiamo il nostro bot.

Passaggio 1: configura il tuo bot.

Vai a https://dialogflow.cloud.google.com/#/login e accedi. Quindi crea un agente AcChatBot:

Passaggio 2: crea un'entità Stock

Dal menu a sinistra, fai clic su Plus accanto a Entità, chiamalo Stock e inserisci [A-Z][A-Z0-9]{1,6}come espressione regolare. Sebbene non sia del tutto una corrispondenza per i simboli ticker, è sufficiente per il nostro esempio e funziona con i controlli sulle espressioni regolari effettuati dallo stesso Dialogflow (es. Non troppo ampio ecc.). Quindi salvalo.

Passaggio 3: crea l'intenzione di prezzo Ultimo

Tempo per il nostro intento di prezzo ultimo. Sempre dal menu a sinistra seleziona il Plus accanto a Intenti, chiamalo Last pricee clicca su AGGIUNGI FRASI DI FORMAZIONE:

Entra What is the last price for AAPL?. Quindi evidenzia AAPLcon il mouse. Questo farà apparire un pop-up. Cerca Stock, quindi seleziona l'opzione presentata:

Se fatto bene, il risultato sarà simile al seguente per garantire che Dialogflow acquisisca correttamente l'entità Stock:

IMPORTANTE! Quindi scorri verso il basso, apri la sezione Adempimento, fai clic su Abilita adempimento e quindi attiva / disattiva in questo Enable webhook call for this intentmodo:

Questo ci consente di chiamare la nostra funzione di backend e comunicare con Asset Control.

Assicurati di salvare l'intento prima di andare avanti.

Passaggio 4: implementare un servizio REST per recuperare i dati di Asset Control

Di nuovo, ci sono molti modi per farlo. Useremo Spring Boot poiché fa tutto il lavoro pesante per noi e restiamo in Java e quindi possiamo utilizzare immediatamente la stessa API Java Asset Control che utilizza Adetta .

Se non lo sai ancora, Adetta è il nostro software di automazione dei test per Asset Control. Assicurati di dare un'occhiata all'Introduzione ad Adetta qui .

La parte interessante è una classe AcBotControllere il suo handleIntentmetodo come mostrato di seguito:

Puoi vedere che il webhook per l'adempimento di Dialogflow sta gestendo una richiesta POST. Sia l'input che l'output sono JSON. E usiamo GoogleCloudDialogflowV2Webhook*classi per gestire sia il JSON di richiesta che quello di risposta per noi.

La gestione effettiva dell'intento viene passata a un AcBotIntentHandler che otteniamo dalla chiamata AcBotIntents.getHandlerFor(request). Diamo un'occhiata a questa classe:

Creiamo una mappatura degli intenti ai gestori (ricordi il nostro Last priceintento?) E implementiamo un metodo per recuperare un gestore adatto dato l'intento codificato nell'oggetto richiesta. Definiamo anche un gestore predefinito nel caso in cui non siamo riusciti a trovare un gestore effettivo:

Ora, per ottenere il nostro ultimo prezzo per un determinato titolo, diamo un'occhiata a AcBotLastPriceIntentHandler:

Puoi vedere come recuperiamo il nostro parametro dell'entità Stock dall'oggetto richiesta utilizzando request.getQueryResult().getParameters().getOrDefault("Stock", "")e quindi chiamiamo getLastPriceMessageForStockcome mostrato qui:

Ci difendiamo da un valore mancante per le azioni. In caso contrario, sfogliamo il nostro sistema di controllo delle risorse per le azioni con il ticker specificato. Nel caso in cui non disponiamo di tale ADO, visualizziamo il messaggio corrispondente. In caso contrario, continuiamo a recuperare i dati sui prezzi per ogni ADO che abbiamo trovato (mentre dovrebbe essere solo un singolo ADO, l'implementazione restituirebbe solo più messaggi se necessario).

Ecco come troviamo l'ultimo prezzo:

Carichiamo la serie temporale dell'ADO, otteniamo l'ultimo record e, se presente, creiamo un messaggio che verrà letto come The last price for AAPL (C0.EQY.100101) is from 2020-06-12 at $338.00. E ancora una volta ci guardiamo dai casi in cui non riusciamo a trovare un prezzo.

Usando Spring Boot possiamo attivarlo e avere il nostro servizio REST in esecuzione su localhost: 8080 / ac-bot. E dopo?

Beh, ovviamente stiamo barando un po 'perché non stiamo distribuendo questo servizio da nessuna parte, quindi per renderlo disponibile dall'esterno, useremo ngrok per creare un tunnel per noi:

Passaggio 5: imposta il nostro webhook di evasione

Quindi dobbiamo far sapere a Dialogflow dove si trova il nostro servizio REST, quindi torna lì e fai clic su Fulfillment dal menu a sinistra:

Quindi inserisci l' https://...indirizzo fornito da ngrok e assicurati di aggiungere /ac-botalla fine.

Ok, il momento della verità. Nell'angolo in alto a destra dove dice Try it now, possiamo digitare What is the last price for AAPL?e se tutto funziona correttamente dovremmo ottenere la seguente risposta:

Questo è eccitante!

Passaggio 6: integra il nostro chatbot con Slack

Ora non continueremo a utilizzare la console Dialogflow per giocare con il nostro bot. Invece lo integreremo con Slack. Quindi, seleziona Integrazioni dal menu a sinistra, trova Slack e avvia un bot di prova:

Quindi vai su Slack e inizia a chattare con il bot:

Quindi possiamo ripetere il ciclo per implementare le altre domande / intenti delineati all'inizio dell'articolo.

Parole di chiusura

Ho pensato che fosse divertente da fare. E anche più facile di quanto pensassi. Ovviamente ho preso una serie di scorciatoie:

  • Esecuzione del servizio solo in locale.
  • Nessuna considerazione per la sicurezza, il controllo degli accessi e la scelta dell'ambiente di Asset Control.
  • Uso molto limitato del bot.

Spero che questo articolo ti sia piaciuto. Mettiti in contatto per condividere i tuoi pensieri, porre domande, ecc. Siamo qui per aiutarti.