Creșterea inteligenței artificiale declanșează o schimbare de paradigmă în domeniul dezvoltării interfeței cu utilizatorul. Datorită proliferării asistenților inteligenți activi în voce, cum ar fi Google Home, Siri și Alexa, utilizatorii încep să simtă că apăsarea numeroaselor butoane pe ecran sau completarea manuală a formularelor este nu numai ineficientă și lentă, ci și veche.
Din fericire, există astăzi multe servicii bazate pe cloud disponibile, care permit dezvoltatorilor să adauge interfețe de conversație utilizatorilor cu aplicațiile lor. Google Dialogflow Standard Edition este un astfel de serviciu. Este gratuit, foarte puternic, multilingv, și vine cu un număr mare de șabloane bine concepute.
În acest tutorial, vă vom arăta cum să creați o interfață de conversație simplă bazată pe text pentru Android utilizând Dialogflow.
Înainte de a continua, asigurați-vă că aveți acces la:
În timp ce utilizați Dialogflow, veți lucra întotdeauna cu un agent, un sistem de înțelegere a limbajului natural instruit pentru a gestiona un anumit set de intrări de utilizator.
Pentru a crea primul agent, utilizați un cont Google pentru a vă conecta la consola Dialogflow și apăsați pe Creați agent buton.
În forma care apare, dați un nume sensibil agentului și apăsați pe Crea buton.
După câteva secunde, veți avea un agent nou.
În timp ce interfețele vizuale au butoane pe care utilizatorii le pot apăsa pentru a-și exprima intențiile, interfețele conversaționale au intenții. Ca atare, într-o interfață conversatională bine concepută, tot ceea ce un utilizator poate spune este mapat la o intenție. Activitatea unui agent este doar de a determina cu exactitate ce intenție trebuie să fie activată atunci când un utilizator rostește sau tipărează într-o frază sau propoziție.
Pentru a păstra lucrurile simple, să creați o singură intenție pentru agentul nostru: o intenție numită GREUTATE
, care va permite utilizatorilor să convertească greutățile în kilograme în kilograme și invers.
Pentru a crea intenția, apăsați pe Creați intenție butonul din consola.
În ecranul următor, introduceți numele intenției și apăsați pe Adăugați fraze de instruire buton. Veți putea acum să oferiți mai multe fraze pe care agentul le poate utiliza pentru a se pregăti. De exemplu, teza "ceea ce este de 32 de kilograme în lire sterline" ar fi o frază de pregătire bună pentru GREUTATE
scop.
După ce introduceți propoziția și apăsați tasta introduce , veti vedea ca Dialogflow ghiceste corect ca fraza "32 kilograme" este variabila. De asemenea, va crea automat un parametru programabil accesibil numit Unitate de greutate
pentru el și a stabilit tipul său @ Sys.unit-greutate
.
În mod similar, se presupune că și cuvântul "lire sterline" este variabil și creează un parametru denumit Unitate de greutate nume
, al cărui tip este @ Sys.unit-greutate-name
.
Vă sugerez să introduceți în câteva mai multe fraze de formare similare, întotdeauna să vă asigurați că Unitate de greutate
și Unitate de greutate nume
parametrii sunt rezolvați la valorile corecte.
Apoi, apăsați pe Adăugați răspunsuri pentru a introduce câteva răspunsuri generice. Înțelegeți că acestea vor fi prezentate în mod substanțial utilizatorului.
Când sunteți mulțumit de expresiile de formare și de răspunsurile pe care le-ați furnizat, continuați și apăsați pe Salvați pentru a salva intenția și pentru a începe procesul de antrenament, care va dura de obicei mai puțin de un minut.
După cum am spus mai devreme, o bună interfață conversațională trebuie să fie capabilă să se ocupe de tot ceea ce spune utilizatorul. Asta inseamna ca agentul nostru trebuie sa fie capabil de a mapa placutele si propozitiile pe care nu le intelege intentiilor valabile. Deoarece aceasta este o cerință foarte comună, Dialogflow generează automat astfel de intenții pentru noi, denumite în mod corespunzător Implicit de bun venit
și Implicit implicit Fallback
. În timp ce acesta din urmă nu are nevoie de nici o schimbare, prima face.
Implicit de bun venit
nu are nici o expresie de instruire, deci trebuie să oferiți câteva. În plus, nu vom mai lucra cu evenimentele din acest tutorial, astfel încât puteți să le eliminați Bine ati venit
eveniment asociat cu acesta.
apasă pe Salvați după efectuarea modificărilor.
Este puțin probabil ca majoritatea utilizatorilor să se limiteze la GREUTATE
intenție pe care ați creat-o. Deși intenția de rezervă va fi capabilă să se ocupe de toate interogările nevalide, este întotdeauna o idee bună să antrenați agentul astfel încât să se poată angaja în discuții mici. Acest lucru va face să pară mai umană.
În consola Dialogflow, adăugarea de abilități mici de conversație agentului este foarte ușoară. Tot ce trebuie să faceți este să deschideți Convorbire scurtă și apăsați butonul Permite buton.
În acest moment, agentul va putea genera răspunsuri implicite pentru multe întrebări frecvente. Opțional, puteți personaliza aceste răspunsuri pentru a le conferi o personalitate unică. Pentru moment, vă sugerez să răspundeți la câteva întrebări din Despre agent și apăsați tasta Salvați buton.
Aplicația dvs. Android va avea nevoie de un indice de acces client în timp ce comunică cu agentul Dialogflow. Pentru ao obține, faceți clic pe pictograma roată din dreptul numelui agentului și deschideți-o General tab. Derulând în jos până la Chei API secțiune, veți putea vedea jetonul. Rețineți-le ca să le puteți utiliza mai târziu.
Vom folosi biblioteca de rețele pentru combustibili în timp ce interacționăm cu serviciul web Dialogflow, deci adăugați următoarele punerea în aplicare
dependența în aplicaţia
ale modulului build.gradle fişier:
implementare "com.github.kittinunf.fuel: fuel-android: 1.12.1 '
Dialogflow se ocupă atât de text cât și de audio. În acest tutorial, cu toate acestea, vom lucra numai cu text. În consecință, aplicația noastră va avea o interfață de utilizator asemănătoare unei aplicații de chat. Deci, adăugați biblioteca ChatMessageView ca o altă dependență.
implementare 'com.github.bassaer: chatmessageview: 1.10.0'
În cele din urmă, asigurați-vă că aplicația dvs. se poate conecta la Internet solicitând următoarea permisiune în AndroidManifest.xml fişier:
Biblioteca ChatMessageView ChatView
widget-ul oferă o interfață de chat complet dezvoltată, capabilă să afișeze mesaje de chat și să accepte introducerea de către utilizatori. Folosind-o în aspectul nostru, putem economisi mult timp și efort. Așadar plasați widgetul în interiorul a FrameLayout
widget și adăugați-l în fișierul XML de aspect.
Dacă aveți activată extensiile Android Kotlin în proiectul dvs., o referință la widget va fi disponibilă ca proprietate de extensie în interiorul activității dvs..
Vă sugerez să rulați aplicația dvs. acum pentru a arunca o privire la aspectul pe care tocmai l-ați creat.
Puteți face codul de rețea mult mai concis prin configurarea clientului Fuel în mod special pentru a utiliza serviciul Web Dialogflow. Înainte de a face acest lucru, totuși, adăugați tokenul de acces client pe care l-ați obținut mai devreme ca o constantă de compilare a activității dvs..
obiect companion privat const val ACCESS_TOKEN = "1234567890abcdef"
Toate solicitările HTTP pe care le faceți la serviciul Web Dialogflow trebuie să aibă un Autorizare
antet bazat pe token. Pentru a evita crearea manuală a antetului de fiecare dată când faceți o solicitare, utilizați baseHeaders
proprietate a FuelManager
clasă.
FuelManager.instance.baseHeaders = mapOf ("Autorizare" la "Purtător $ ACCESS_TOKEN")
Apoi, setați basePath
proprietate a FuelManager
clasă la adresa URL de bază a serviciului web Dialogflow.
FuelManager.instance.basePath = "https://api.dialogflow.com/v1/"
În cele din urmă, toate solicitările dvs. HTTP trebuie să aibă întotdeauna următorii parametri de configurare: a v
parametru care specifică versiunea protocolului pe care doriți să o utilizați, a lang
parametru specificând limba în care doriți să fie răspunsurile agentului și a sesiune ID
parametru a cărui valoare poate fi orice șir aleator.
Următorul cod vă arată cum să utilizați baseParams
proprietate pentru a seta toți parametrii:
FuelManager.instance.baseParams = listOf ("v" la "20170712", // ultimul protocol "sessionId" la UUID.randomUUID (), // ID aleatoriu "lang" în "en"
ChatView
widgetul are nevoie de două ChatUser
obiecte: una pentru utilizator și una pentru agent. Aceste obiecte sunt destinate pentru stocarea detaliilor cum ar fi numele și imaginile de profil care ar trebui afișate împreună cu mesajele de chat. În plus, fiecare ChatUser
obiect trebuie să aibă un ID unic asociat cu acesta.
Următorul cod vă arată cum să creați obiectele:
val uman = ChatUser (1, "Tu", BitmapFactory.decodeResource (resurse, R.drawable.ic_account_circle)) val agent = ChatUser (2, "Agent", BitmapFactory.decodeResource)
Rețineți că codul utilizează o resursă încorporată numită ic_account_circle
ca avatar pentru ambele obiecte. Simțiți-vă liber să utilizați orice altă resursă care poate fi descărcată dacă doriți.
Ori de câte ori utilizatorii apasă butonul de trimitere al ChatView
widget, trebuie să creați Mesaj
obiecte bazate pe textul pe care l-au introdus. Pentru a face acest lucru, puteți folosi Message.Builder
clasă. În timp ce creați obiectul, trebuie să vă asigurați că aparține utilizatorului uman apelând setUser ()
metodă.
Odata ce Mesaj
obiect este gata, îl puteți trece la trimite()
metodă a ChatView
widget pentru a face acest lucru. Următorul cod vă arată cum să faceți acest lucru în interiorul setOnClickSendButtonListener ()
metodă a ChatView
widget.
my_chat_view.setOnClickSendButtonListener (View.OnClickListener my_chat_view.send (Message.Builder () .setUser (uman) .setText (my_chat_view.inputText) .build ()) // Mai mult cod aici)
Pentru a trimite mesajul utilizatorului către agentul dvs., trebuie să faceți acum o solicitare HTTP GET la / interogare
punct final al serviciului web Dialogflow. Ca intrare, se așteaptă ca a întrebare
parametru, a cărui valoare poate fi orice expresie sau propoziție introdusă de utilizator.
Ca răspuns HTTP, veți primi un document JSON al cărui Rezultatul / împlinirea / vorbire
valoarea conține răspunsul agentului.
Fuel.get ("/ query", listOf ("interogare" la my_chat_view.inputText)) .responseJson _, _, rezultat -> val reply = result.get () obj () .getJSONObject ("rezultat"). getJSONObject ("fulfillment") .getString ("speech") // Mai mult cod aici
Pentru a face răspunsul în interiorul lui ChatView
widget, trebuie să construiți din nou alta Mesaj
obiect. De data aceasta însă, proprietarul trebuie să fie agentul. În plus, pentru a face mesajul în partea dreaptă, trebuie să treci Adevărat
la ei setRight ()
metodă.
my_chat_view.send (Message.Builder () .setRight (adevărat) .setUser (agent) .setText (răspuns) .build ())
Dacă rulați aplicația acum, ar trebui să puteți discuta cu agentul.
Dacă solicitați aplicației să convertească o greutate în kilograme la kilograme, cu toate acestea, va da doar un răspuns generic. Pentru a putea efectua efectiv conversia, trebuie mai întâi să determinați dacă GREUTATE
intenția a fost declanșată. Pentru a face acest lucru, puteți verifica valoarea rezultat / metadate / intentName
cheie.
intenție de intenție: String? = result.get (), obj () .getJSONObject ("rezultat") .optJSONObject ("metadata") .optString ("intentName"
Odată ce sunteți sigur că GREUTATE
intenția a fost declanșată, puteți determina valorile Unitate de greutate nume
și Unitate de greutate
parametrii, care vor fi prezenți în interiorul rezultat / parametri
obiect.
// Convertiți la ceea ce val unitWeightName = result.get (). Obj () .getJSONObject ("rezultat") .getJSONObject ("parameters") .getString (" convertit val unitateWeight = result.get () obj () .getJSONObject ("rezultat") .getJSONObject ("parametri") .getJSONObject ("unitate de greutate") .getDouble
Cu valorile de mai sus, tot ce este nevoie este matematica simplă și un if-else
pentru a efectua conversia. Pentru a face rezultatul, veți avea nevoie de altul Mesaj
obiect. Și proprietarul trebuie să fie agentul.
// Efectuați conversia val rezultat = dacă (unitWeightName == "lb") unitWeight * 2.20462 altceva unitWeight / 2.20462 // Rezultat render my_chat_view.send (Message.Builder () .setRight (true) .setUser (agent) .setText ("Aceasta este $ "% 2f ".format (rezultat) $ unitWeightName") .build ())
Aplicația noastră este gata. Ar trebui să puteți rula acum pentru a vedea că efectuează corect toate conversiile.
Acum știți cum să creați un agent prietenos și util folosind Google Dialogflow. În acest tutorial, ați învățat de asemenea cum să creați o interfață atrăgătoare pe care utilizatorii o pot utiliza în timp ce comunică cu agentul.
Pentru a afla mai multe despre Dialogflow, consultați documentația oficială.