lunedì 11 aprile 2016
· Maurizio Ceravolo
Da qualche anno parliamo di interfacce sempre più naturali.
- Touch.
- Voce.
- Gesti.
- Assistenti personali.
Alla Build 2016 Microsoft ha aggiunto un altro pezzo al puzzle: le conversazioni. Satya Nadella ha presentato quella che Microsoft chiama Conversations as a Platform: l'idea che il linguaggio naturale possa diventare un nuovo livello di interfaccia fra persone, applicazioni e servizi. Una delle novità concrete annunciate a fine marzo è il Microsoft Bot Framework, ancora in preview.
Il nome “bot” non è certo nuovo. Esistono da anni programmi che rispondono automaticamente in chat, IRC, giochi online e sistemi di assistenza. La parte interessante è che Microsoft sta provando a trasformare quel concetto in una piattaforma per sviluppatori.
- Non un bot per Skype.
- Non un bot per Slack.
Un'applicazione conversazionale che può essere collegata a canali differenti.
L'idea forte non è far parlare un programma. È separare la conversazione dal posto in cui avviene.
Un'applicazione, molte conversazioni
Nel keynote della Build Microsoft ha mostrato come un bot possa essere collegato attraverso il framework a servizi come Skype, Slack, Telegram, SMS, email e web. Questo cambia molto il modo in cui possiamo progettare un'applicazione. Normalmente costruiamo una interfaccia per ogni ambiente.
- Una pagina web.
- Una app mobile.
- Un pannello.
- Un form.
Con un bot la logica potrebbe invece vivere una volta sola e ricevere messaggi provenienti da canali differenti.

Il Bot Framework prova a separare la logica dell'applicazione dal canale nel quale avviene la conversazione.
Ovviamente non significa che Skype e SMS diventino improvvisamente la stessa cosa. Ogni canale ha capacità e limiti differenti. Ma l'idea architetturale è interessante.
Il bot diventa un servizio. I canali diventano porte di ingresso.
Il linguaggio naturale è davvero una nuova interfaccia?
Microsoft la mette giù piuttosto forte. Nel keynote Nadella arriva a descrivere il linguaggio umano come un nuovo livello di interfaccia. È una visione affascinante.
Ma bisogna distinguere la visione dalla tecnologia disponibile oggi. Se scrivo:
voglio ordinare una pizza
un'applicazione tradizionale può mostrarmi un form con dimensione, impasto, ingredienti, indirizzo e pagamento. Un bot deve invece capire che:
- voglio fare un ordine;
- sto parlando di una pizza;
- probabilmente mancano informazioni;
- deve chiedermi quali;
- deve ricordare le risposte precedenti;
- alla fine deve chiamare il sistema che effettua realmente l'ordine.
La chat può sembrare più semplice per l'utente. Dietro, però, il problema software non scompare affatto. In alcuni casi diventa perfino più complesso.
Il Bot Framework non è il “cervello”
Questa distinzione secondo me è importante. Il Microsoft Bot Framework serve soprattutto a costruire il dialogo, collegare il bot ai canali e gestire la conversazione. Non significa che l'applicazione capisca magicamente qualsiasi frase.
Microsoft mette infatti accanto al Bot Framework una serie di altri servizi. Alla Build ha presentato anche Microsoft Cognitive Services, un portafoglio di 22 API in preview che coprono aree come visione, linguaggio, voce, conoscenza e ricerca. Per il linguaggio naturale Microsoft dispone inoltre di LUIS — Language Understanding Intelligent Service, pensato per riconoscere intenzioni ed elementi significativi all'interno di una frase.
Per esempio:
prenotami un tavolo domani sera per quattro persone
potrebbe essere interpretato come:
intento: prenotazione ristorante
data: domani
momento: sera
persone: 4
Da lì in poi il bot deve comunque sapere cosa fare.
- Quale ristorante?
- A che ora?
- Ci sono posti disponibili?
- Serve il nome?
- Come confermiamo?
La parte conversazionale è quindi un'interfaccia sopra un'applicazione reale.

Capire una frase è soltanto uno dei passaggi. Il bot deve poi applicare logica e accedere ai sistemi reali.
Per uno sviluppatore la cosa interessante è il disaccoppiamento
Microsoft ha pubblicato anche il Bot Builder SDK come progetto open source, con supporto iniziale per C# e Node.js. Questo permette di costruire dialoghi senza dover inventare da zero tutta l'infrastruttura necessaria. Ma la parte che trovo più interessante è quella che normalmente non si vede nelle demo.
Supponiamo di avere un sistema aziendale che espone API per:
- controllare lo stato di un ordine;
- verificare disponibilità;
- recuperare una fattura;
- aprire una richiesta di assistenza;
- cercare un cliente.
Oggi possiamo costruire una interfaccia web che chiama quelle API. Domani potremmo costruire anche un bot. La logica aziendale rimane la stessa.
Cambia il modo in cui l'utente formula la richiesta. Questo è molto più interessante del classico chatbot che risponde a cinque domande predefinite.
Il bot non deve necessariamente sostituire l'app
Qui farei attenzione a una tentazione molto prevedibile. Ogni volta che nasce una nuova interfaccia qualcuno annuncia la morte di quella precedente. Il web avrebbe dovuto eliminare i programmi desktop.
Le app avrebbero dovuto eliminare il web. La voce avrebbe dovuto eliminare tastiere e schermi. Probabilmente adesso qualcuno dirà che i bot elimineranno le app.
Non credo. Ci sono attività che funzionano magnificamente come conversazione. “Dov'è il mio ordine?”
“Quanto ho fatturato questo mese?” “Prenotami una sala domani alle 15.” “Apri una segnalazione per il cliente Rossi.”
E ce ne sono altre per cui una buona interfaccia visuale rimane enormemente più efficiente. Provate a configurare cinquanta righe di un ordine complesso attraverso una chat e ne riparliamo.
Una conversazione è una nuova interfaccia disponibile, non necessariamente l'interfaccia migliore per qualsiasi problema.
La vera opportunità sta nel capire quando parlare è più naturale che navigare.
Le aziende potrebbero avere un nuovo punto di accesso ai processi
Qui secondo me c'è la parte più interessante per il software aziendale. Molti gestionali contengono funzioni che vengono usate raramente. Un utente sa che l'informazione esiste.
Non ricorda però in quale menu. Apre il programma. Cerca.
Telefona al collega che lo usa più spesso. Oppure rinuncia. Immaginiamo invece di poter scrivere:
quali fatture del cliente Rossi sono ancora insolute?
e ricevere la risposta interrogando lo stesso gestionale. L'interfaccia conversazionale può diventare una specie di scorciatoia semantica verso funzioni che già esistono. Questo non elimina il gestionale.
Potrebbe renderlo più semplice da interrogare.
Ma bisogna progettare la conversazione
Una conversazione fra persone è piena di ambiguità. Noi le risolviamo continuamente utilizzando contesto, esperienza, conoscenza reciproca, tono e buon senso. Il software ha molti meno strumenti.
Se scrivo:
spostalo a domani
che cosa significa “lo”? Quale evento? Domani a che ora?
Nel mio fuso orario? Posso modificarlo? Serve conferma?
La qualità di un bot dipenderà quindi molto da come vengono progettati:
- gli intenti;
- le entità;
- le domande di chiarimento;
- il contesto;
- gli errori;
- le conferme;
- i passaggi fra una funzione e l'altra.
È facile costruire una demo impressionante. È molto più difficile costruire una conversazione che funzioni quando l'utente non segue il copione previsto.
Anche il fallimento deve essere progettato
Questa è probabilmente la parte meno spettacolare e più importante. Cosa succede quando il bot non capisce? Una cattiva interfaccia grafica almeno ci mostra pulsanti, campi e opzioni.
Una cattiva interfaccia conversazionale può lasciarci con:
Non ho capito.
Ripetiamo.
Non ho capito.
Alla terza volta abbiamo già iniziato a insultare il futuro dell'intelligenza artificiale. :-) Bisogna quindi progettare anche la via d'uscita. Proporre alternative.
Fare domande più precise. Mostrare comandi disponibili. Passare a un operatore umano.
Aprire una interfaccia tradizionale quando la conversazione non è più il mezzo adatto. Un buon bot non deve fingere di capire tutto. Deve sapere cosa fare quando non capisce.
Microsoft sta puntando molto sull'intelligenza come servizio
C'è un altro aspetto interessante nell'annuncio. Microsoft non sta chiedendo a ogni sviluppatore di diventare esperto di machine learning. Sta esponendo capacità complesse attraverso servizi e API.
- Riconoscimento delle immagini.
- Voce.
- Analisi del linguaggio.
- Ricerca.
- Conoscenza.
Il messaggio per chi sviluppa è abbastanza chiaro:
usate queste capacità come componenti delle vostre applicazioni.
È una direzione che Microsoft aveva già intrapreso con Azure e con altri servizi cloud, ma qui diventa particolarmente evidente. L'intelligenza non è necessariamente un'applicazione separata. Può essere una funzione richiamata via API.
È davvero il futuro delle applicazioni?
È troppo presto per dirlo. Siamo davanti a strumenti in preview. Il riconoscimento del linguaggio naturale ha ancora limiti importanti.
La progettazione dei dialoghi può diventare complessa. Molte demo funzionano bene proprio perché il dominio è ristretto. E soprattutto non è detto che gli utenti vogliano conversare con qualsiasi servizio.
Ma il concetto merita attenzione. Perché fino ad oggi abbiamo costruito le interfacce chiedendo all'utente di imparare come il software vuole essere utilizzato.
- Menu.
- Pulsanti.
- Form.
- Navigazione.
Un'interfaccia conversazionale prova a ribaltare almeno in parte il rapporto. È il software che deve provare a interpretare come l'utente formula naturalmente la richiesta. Se questa idea funzionerà davvero, non cambierà soltanto il modo in cui costruiamo chatbot.
Potrebbe cambiare il modo in cui decidiamo quali parti di una applicazione abbiano davvero bisogno di una interfaccia grafica. Per ora Microsoft ci ha dato framework, servizi e parecchie demo. A noi sviluppatori rimane la parte divertente:
capire quali problemi vale davvero la pena risolvere parlando con il software.