- Hey Boss, come stai?
- Ciao, bene grazie; pensa che il mio ultimo concerto e' stato ad Auckland, in New Zeland
- Qual'e' l'ultima volta che hai suonato in Italia?
- L'ultima volta che ho suonato in Italia e' stato il 16/07/2016 a Roma - Circo Massimo
- Cosa hai cantato?
...
Il dialogo riportato sembra tra due umani (di cui uno piuttosto famoso)
ma in realta' e' realizzato con un Chatbot ovvero con un semplice programma.
L'aggettivo semplice naturalmente e' relativo: per realizzare questo programma si applicano
concetti di
ML (Machine Learning),
AI (Artificial Intelligence),
NLP (Natural Language Processing),
ASR (Automatic Speech Recognition), TTS (text-to-speech),
...
Per creare un Agent che risponda alle richieste degli utenti
e' necessario definire Intent ed Entity
da analizzare un contesto
fornire Utterance di esempio...
infine servono anche alcuni dettagli tecnici come i Web Hook per riuscire ad
effettuare il dialogo su uno dei canali integrati come:
Facebook Messenger, Twitter, Telegram, Skype, ...
In questo documento viene descritto, in forma semplice e pratica,
come realizzare un Chatbot Agent utilizzando
Dialogflow di Google
[NdE in precedenza chiamato API.AI].
Utilizzeremo un esempio concreto: creare un Chatbot esperto sui concerti di Bruce Springsteen.
Cercheremo tuttavia di generalizzare ogni concetto in modo
consentire di comprendere al meglio gli strumenti e le loro potenzialita'.
Quanto descritto con esempi su Dialogflow vale infatti per tutti i
piu' recenti
strumenti di riconoscimento del linguaggio e dei piu' diffusi chatbot:
i concetti di base sono infatti gli stessi.
Una breve introduzione e' necessaria per fare un po' di confusione...
Quello che viene presentato e' solo un esempio di Chatbot.
Anche se e' in grado di comprendere le domande e di imparare dalle risposte,
un Chatbot non puo' ancora sostenere una conversazione su tutti gli argomenti immaginabili.
L'idea di base e' che un Chatbot sia in grado di interpretare alcune richieste
dell'utente (Intent) ed esaudirli con una risposta (Response)
o una azione (Action).
Altra premessa importante: parleremo in Italiano. Sarebbe molto piu' facile farlo in inglese ma questo ci consente di presentare alcune delle difficolta' presenti con lingue differenti. Molti termini sono in inglese in questo documento... ma solo perche' hanno un significato tecnico preciso e tradurli li redenderebbe meno comprensibili. Sarebbe come tradurre "SPAM" con "fastidioso messaggio di posta": troppo lungo ed anche impreciso.
Per la realizzazione del nostro esempio utilizzeremo API.AI/Dialogflow di Google. Accedere e' semplicissimo, basta utilizzare l'ULR https://dialogflow.com/ registrarsi (o utilizzare un'utenza Google come quella GMail) ed effettuare il login.
L'esempio pratico che vogliamo realizzare con Dialogflow e' un Chatbot in grado di elencare tutti le canzoni suonate ad un concerto, i concerti tenuti in un luogo, ... Per fare questo dobbiamo creare un Agent.
Un Agent e' un programma che risponde ad un compito specifico.
Potrebbe essere una gentile operatrice per le prenotazioni di una compagnia aerea. Oppure essere un esperto commerciale che conosce tutti i prodotti ed i listini prezzi di un azienda. Oppure un competente tecnico di supporto per gli elettrodomestici che abbiamo acquistato. Oppure uno stereo intelligente a cui chiedere: suonami una canzone triste. Oppure il computer di bordo di un'astronave...
Quello che e' importante e' che un Agent ha uno scopo preciso ed un bagaglio limitato di conoscenze: non ci interessa giocare a scacchi con il bot che effettua le prenotazioni dei voli e comunque non ne sarebbe in grado [NdE nella maggioranza dei casi nessuno dei due interlocutori sarebbe in grado].
Con Dialogflow la creazione di un agente e' molto semplice: basta assegnargli un nome!
Il nostro Agent si chiama HeyBoss ed e' un esperto di tutti i concerti tenuti da Bruce Springsteen.
Una nota importante: sono gia' disponibili una serie di Agent (Prebuilt Agents) per alcune tipologie di richieste (eg. Support & CRM) che possono essere personalizzati ed arricchiti per le proprie esigenze [NdE il numero di agenti disponibili dipende dalla lingua, in inglese sono disponibili oltre 30 differenti Agent]
Un Intent e' quello che un utente finale puo' chiedere ad un Agent.
La prenotazione di un volo e' un Intent; un altro Intent e' la consultazione degli orari per una determinata destinazione oppure la cancellazione di una prenotazione gia' effettuata.
Comprendere qual'e' la richiesta dell'utente e' la parte intelligente
dell'Agent perche' sono molteplici i modi in cui una richiesta puo' essere espressa
in linguaggio naturale (ovvero quello che noi umani parliamo).
L'Agent cerchera' di interpretare la richiesta dell'utente individando
l'Intent che piu' si avvicina.
Naturalmente l'associazione non e' sempre precisa,
infatti viene restituita una graduatoria delle possibili interpretazioni.
Ma da questo punto di vista si possono migliorare le risposte fornendo
piu' esempi alternativi delle stesse richieste [NdE e' anche possibile applicare
algoritmi di Machine Learning in modo da imparare dalle risposte precedenti].
Nel nostro Agent abbiamo realizzato solo alcuni Intent differenti. Su un progetto completo generalmente sono realizzati decine di Intent ma la tecnica di base non cambia.
Con Dialogflow la form definizione di un Intent e' composta da quattro sezioni:
Quando viene inserita una frase di esempio questa viene automaticamente annotata riconoscendone le parti che vengono raccolte come Entity, come vederemo nel seguito.
Un Agent contiene sempre un Default Fallback Intent che raccoglie tutti i casi in cui non e' stato riconosciuto nessun altro Intent.
Il primo Intent realizzato nel nostro esempio risponde alla domanda di conoscere i pezzi cantati nei concerti ed e' presentato nella figura.
Per rispondere correttamente l'Agent deve conoscere il context che e' la prima cosa da compilare nel form di definizione dell'Intent...
A che ora parte? oppure, nel nostro esempio: Cosa hai cantato? sono frasi prive di senso senza un contesto ma che diventano comprensibili nell'ambito di un dialogo piu' ampio: ecco a cosa serve un Context.
La sintassi per raccogliere un parametro dal contesto e' molto semplice #context_name.parameter_name
Con Dialogflow un Context viene mantenuto per dieci minuti o per cinque richieste.
Se un Intent corrisponde ad una richiesta, l'Entity corrisponde ai dettagli.
Nella prenotazione serve sapere la data precisa, l'aeroporto di partenza e quello di arrivo. Dal punto di vista di progettazione dell'Agent viene definita un Entity Volo che contiene tutti i dettagli necessari.
Dialogflow ha una serie di System Entities gia' create che facilitano la gestione
dei concetti piu' semplici (eg. le date).
Lo sviluppatore puo' definire una serie di Entities (Dev Entity)
per generalizzare il comportamento dell'Agent.
Infine l'utente finale crea un Entity ad ogni richiesta.
Una Dev Entity puo' avere valori determinati da un elenco, eseguire un mapping o
essere a sua volta composta da altre entity, ...
Ma in realta' la cosa piu' facile e' fare un esempio:
Per risolvere i problemi di traduzione dei nomi delle citta' tra le diverse lingue una tecnica molto semplice e' quella di utilizzare dei sinonimi:
Gli elenchi ed i sinonimi possono essere caricati molto facilmente su API AI da file CSV e rendono il nostro Agent un esperto del dominio poiche' vengono riconosciuti dal linguaggio naturale ed associati alle relative entita'.
Fino ad ora ci siamo occupati di intepretare la richiesta dell'utente, ora si tratta di rispondere!
In realta' il concetto e' piu' ampio: una volta compresa una richiesta potremmo esaudirla (eg. prenotando il volo, aprendo un ticket, facendo rotta su Nettuno, ...). Ma se quello che realizziamo e' un Chatbot probabilmente all'azione corrispondera' una risposta.
Nel nostro esempio abbiamo molte possibili Action perche' HeyBoss e' davvero un esperto di Bruce ed ha un intero database a disposizione con tutti i concerti e le canzoni suonate nella sua lunga carriera.
E' sempre possibile provare l'Agent utilizzando la form a destra di Dialogflow. In questo modo si controllano facilmente i progressi nell'apprendimento del linguaggio da parte dell'Agent. E' anche disponibile la funzione di Training che consente al Bot di imparare dai dialoghi effettuati.
Ma in realta' tutto il dialogo interno di Dialogflow avviene in JSON. Il JSON e' un formato facilmente trattabile dai linguaggi di programmazione ma abbastanza comprensibile ed utilizzabile anche da parte degli umani.
In pratica l'Agent riconosce la domanda dell'utente associandola ad un Intente e gli assegna un punteggio del 43%.
Abbiamo visto come realizzare un agente con API AI:
ora sa parlare e capire le richieste che gli vengono rivolte.
Resta un piccolo problema: non ha le orecchie e la bocca!
Queste le forniamo con le Integrations.
Le Integrations sono i programmi con cui API AI si puo' interfacciare
in modo da essere richiamato con una Chat di Messenger o da una APP
con riconoscimento vocale.
API AI dispone di un ampio numero di integrazioni One Click [NdA ovvero gia' predisposte]. Quante ne riconoscete?
Beh, tra i tanti: Twitter, Skype, Telegram, Cortana, Facebook Messenger, Viber, Line, Alexa, Kik, ...
Inoltre sono disponibili gli SDK [NdA ovvero ambienti di sviluppo] per i piu' diffusi linguaggi e sistemi: C++, C#, PHP, Python, Java, JavaScript, Node.js, Android, iOS, ...
Per il nostro esempio abbiamo utilizzato l'integrazione con Facebook Messenger
perche' e' uno degli strumenti di messaggistica su social piu' utilizzati.
Su Facebook e' sufficiente creare una pagina cui vanno indirizzati i messaggi.
Per colloquiare con il Chatbot bastera' cercarlo da Messenger ed inviare un messaggio:
rispondera' la nostra AI!
Dal punto di vista tecnico tutto funziona con i Webhook...
Questo capitolo e' piu' tecnico ma e' necessario per far funzionare la nostra conversazione.
Il webhook e' l'URL da richiamare che ospita il codice che implementa le Action da eseguire. A differenza di altri ambienti API AI consente di utilizzare anche il protocollo HTTP (e non solo il protocollo HTTPS).
Generalmente le Action sono ricerche da eseguire su un DB relazionale. La definizione con API AI e' semplice:
Il codice non da implementare non e' complesso... ma va pur sempre realizzato un programma (in PHP in questo esempio):
... $city=""; if($request->input('result.parameters.geo-city')!=null) $city=$request->input('result.parameters.geo-city'); $date=""; if($request->input('result.parameters.date')!=null) $date=$request->input('result.parameters.date'); $country=""; if($request->input('result.parameters.country')!=null) $country=$request->input('result.parameters.country'); $last=""; if($request->input('result.parameters.last_time')!=null) { $items=\DB::select("SELECT sl.id_setlist,date_format(sl.dt_setlist,'%d/%m/%Y') dt_setlist,c.ds_city, sl.place from setlists sl, cities c, countries co where sl.id_city=c.id_city and c.id_country=co.id_country and (c.ds_city=? or co.ds_country=? or co.alt_country=?) order by sl.dt_setlist desc limit 1 ",[$city, $country,$country]); if(count($items)==1) $ret="L'ultima volta che ho suonato in ".$country." e' stato il ".$items[0]->dt_setlist." a ".$items[0]->ds_city." - ".$items[0]->place; } ...
Al contrario del precedente questo ultimo capitolo tecnico e' semplicissimo... ma rende molto piu' naturale la conversazione con l'Agent con pochissimo sforzo.
Abilitando la gestione degli Small Talk e'
possibile personalizzare le risposte fornite sulle
domande conversazionali piu' frequenti.
In questo modo l'Agent rispondera' a domande retoriche, di cortesia, di saluto, conversazionali, ...
o semplicemente a domande stupide in modo personalizzato.
Quanto presentato in questo documento non esaurisce in nessun modo l'argomento. Anzi e' importante sottolineare che gli approcci possono essere molto, molto diversi tra loro.
Quello che e' certo che i Big Player si sono mossi tutti proponendo le loro soluzioni: Dialogflow/api.ai (Google), wit.ai (Facebook), LUIS (Microsoft), Watson (IBM), Lex (Amazon), Intelligent Bots (Oracle), ...
Una serie di soluzioni sono basate sullo standard AIML (Artificial Intelligence Markup Language). La piattaforma piu' utilizzata per l'hosting e': Pandorabots.
Molto interessanti e di immediato utilizzo sono le piattaforme per realizzare Chatbot che non richiedono alcuna programmazione: Motion.ai, Chatfuel, ManyChat, Octane AI, Massively, Flow XO, Botsify, Alexa Skill Blueprints, ...
Molte sono anche le realta' nate in italia come Indigo e molte altre...
Va ricordata infine, anche perche' e' stata la prima a nascere, la famosa Eliza (in pratica e' la nonna di tutti i Chatbot):
Liz: Is something troubling you? meo: I'm hungry Liz: Do you know anyone else who is hungry? meo: Yes, for sure also Umberto is. Liz: I understand. meo: Are You hungry too? Liz: What are your feelings now? meo: A bit stressed... Liz: Does talking about this bother you? meo: I have an enormous amount of email to reply and I'm supposed to prepare a document on AI like You are. Liz: How? meo: Bye Liz: I think you should talk to a REAL analyst. Ciao!
In questa breve presentazione abbiamo utilizzato Dialogflow - API AI (Google): anche questo ambiente viene continuamente aggiornato ed arricchito. L'elenco delle variazioni e' riportato sul Changelog: in meno di due anni lo strumento si e' evoluto in modo notevole e lo stesso e' avvenuto per tutti gli altri ambienti citati in questo capitolo.
Sugli Smartphone sono disponibili migliaia di applicazioni... pero' quelle effettivamente piu' utilizzate sono quelle di messaggistica: le piu' adatte all'integrazione con i Chatbot. La presenza dei Chatbot diverra' sempre piu' massiccia nel tempo. Ora siamo abituati a chiamare l'ascensore premendo un bottone con il dito, domani lo faremo con la nostra voce [NdE c'era gia' chi lo faceva prima dei Chatbot: ma forse erano troppo avanti per essere capiti ;-].
Cambia il modo di interagire e, per noi tecnici, il modo di programmare le Interfacce Utente. Questa paginetta dovrebbe averne anticipato qualche dettaglio.
Insomma non conta se sei un programmatore o un utente... inizia a chattare!
Nel processo civile la precisazione delle conclusioni e' un attivita' ben specifica... che qui utilizziamo a sproposito per ritornare al futuro!
Nel giugno del 2017 e' stato pubblicato il paper
Attention Is All You Need
introducendo un nuovo modello di rete neurale chiamata Transformer
che ha rivoluzionato l'elaborazione
del linguaggio naturale (NLP: Natural Language Processing)
e la Computer Vision (CV).
I nuovi modelli, addestrati su un gran numero di informazioni,
sono di gran lunga piu' intelligenti e ne sentiremo sempre piu' parlare:
ChatGPT, Gemini (Bard), Claude, Llama, Ernie, Grok, iGenius, Metis, ...
Titolo: Hey Boss!
Livello: Avanzato
Data:
1 Aprile 2017
Versione: 1.0.3 - 14 Febbraio 2018 ❤️ San Valentino
Precisazioni: 1.0.4 - 14 Febbraio 2024 ❤️ San Valentino
Autori: Cris,
mail [AT] meo.bogliolo.name