Code, Learn

Alexa: sviluppo e implementazione di nuove skill

4 Settembre 2019 - 8 minuti di lettura

Alexa è il servizio vocale basato sul cloud che alimenta Amazon Echo, Amazon Echo dot e altri dispositivi con Alexa integrata. Questi dispositivi ricevono comandi da un’interfaccia vocale che consente così diverse interazioni. Di fabbrica Alexa offre diverse funzioni di base attraverso le quali si possono riprodurre brani, conoscere le previsioni meteorologiche o le notizie, impostare la sveglia e molto altro.

Si può possibile comunicare con dispositivi di smart home quali lampade, termostati o prese intelligenti e, infine, realizzare funzioni personalizzate per avere un’esperienza ancora più personalizzata.

Una skill Alexa è, quindi, un’applicazione che permette di estendere le funzionalità base di ciascun dispositivo della serie Amazon Echo e trarre il massimo dall’assistente digitale Alexa, incorporato in questi dispositivi.

In una delle nostre ultime gilde, abbiamo deciso di approfondire quest’ultima tematica, e cioè lo sviluppo di una skill per Alexa. Andiamo ad approfondire il percorso svolto, percorsi, tecniche ed evidenze emerse dal confronto tra i membri del team dedicato a questa gilda.

Obiettivo: progettare una skill per gestire la lista della spesa

In primis, ci siamo posti un obiettivo: creazione e implementazione di una skill per la gestione della lista della spesa, con le seguenti funzionalità:

  • Aggiunta di un prodotto.
  • Eliminazione di un prodotto.
  • Lettura della lista.
  • Cancellazione di tutti i prodotti presenti.
  • Invio della lista della spesa via e-mail.
  • Gestione della lista tramite un bot di Telegram.

Introduzione AWS, l’ecosistema Amazon Web Services

Prima di iniziare l’implementazione della skill, è stato doverosa un’introduzione all’ecosistema Amazon Web Services, o AWS, grazie al collega Marco Loregian.

Tutto nasce nel 2006, quando Amazon capisce che la sua infrastruttura e i suoi servizi web, allora utilizzati solo per sé, potrebbero essere condivisi con altre aziende che hanno bisogno di un’infrastruttura affidabile per i loro affari. In poche parole, inizia a vendere una tecnologia di cloud computing con molti anni di anticipo rispetto a qualsiasi altra società di servizi informatici.

Anche la modalità di pagamento è particolare, perché si paga solo ciò che si utilizza, non ci sono contratti forfettari o abbonamenti fissi come nei “tradizionali” piani di hosting: questo consente di risparmiare cifre notevoli rispetto a una struttura proprietaria.

Amazon mette a disposizione un numero di data center sparsi per il mondo, a seconda di zona geografica e zona di disponibilità. La prima identifica la zona fisica dove si trovano i data center delle risorse che vogliamo acquistare, mentre la seconda identifica i centri ridondanti che sono presenti nella stessa zona geografica. A completamento dell’infrastruttura sono state create anche delle località di front end per favorire la bassa latenza e il miglioramento delle prestazioni nella distribuzione dei dati statici verso gli utenti finali. Queste località sono chiamate edge locations.

Ad esempio, nella zona geografica Irlanda abbiamo 3 zone di disponibilità diverse, mentre nella zona USA Virginia abbiamo la possibilità di scegliere 4 zone di disponibilità. Per molti servizi (come Amazon S3) basterà scegliere la zona geografica e le risorse saranno automaticamente replicate per le varie zone di disponibilità.

Servizi offerti da Amazon Web Services

I servizi messi a disposizione ad oggi sono parecchi, anche perché la sezione AWS di Amazon ogni mese rilascia qualche novità o servizio nuovo. In ogni caso, per facilitarne la selezione, gli AWS vengono suddivisi in differenti gruppi, tra cui:

  • Compute: in questo gruppo troviamo tutti i servizi per le risorse di computazione, quindi la gestione di server virtuali in cloud EC2, il servizio Lambda per l’esecuzione di codice a seguito di eventi su altri servizi AWS o Container Service (ECS) per facilitare la gestione di gruppi di istanze con particolari caratteristiche in comune.
  • Storage: qui ci sono tutti i servizi che riguardano lo storage e la memorizzazione di dati online di grandi dimensioni. Nell’elenco troviamo il servizio di storage Amazon S3, uno storage studiato per i backup chiamato Amazon Glacier, una soluzione di collegamento diretto senza Internet tra azienda e cloud con Storage Gateway.
  • Database: tramite questi servizi possiamo gestire dei database senza dover installare i software specifici sui nostri server virtuali e usufruire della scalabilità automatica di Amazon. Possiamo scegliere un database NoSQL come DynamoDB, database relazionale come MySQL, un sistema di caching RAM come ElastiCache e un sistema di data warehouse ad altissima velocità come Redshift.
  • Management Tools: tutti i servizi per la gestione di aspetti che riguardano la gestione generale del sistema. Controllare gli indicatori di performance e attivare delle azioni automatiche con CloudWatch, controllare la cronologia completa sulla configurazione attuale e storico delle sue modifiche con Config, tenere sotto controllo le chiamate API con CloudTrail e ottenere consigli sulle risorse da Trusted Advisor.

Lambda, DynamoDB e CloudWatch sono i servizi che abbiamo utilizzato per la nostra skill.

Prerequisiti per iniziare lo sviluppo della Skill Alexa

Per iniziare lavorare è necessario avere 2 account:

  • Amazon developer: se si è già in possesso di un account Amazon (per lo shopping) si può utilizzare lo stesso, altrimenti occorre registrarsi. Link al sito: https://developer.amazon.com
  • Amazon Web Services: registrarsi al seguente link https://aws.amazon.com/it/?nc2=h_lg qualora non si sia già in possesso di un account.

Con la creazione di un nuovo account AWS si hanno dei periodi di prova per i vari servizi (free tier) validi mensilmente per i 12 mesi successivi. L’account comunque non comporta alcun costo allo scadere dei primi 12 mesi.

AWS CLI: sebbene la maggior parte dei servizi AWS possa essere gestita tramite la AWS Management Console o tramite le API, esiste un terzo modo che può essere molto utile: l’interfaccia a riga di comando AWS (CLI AWS). AWS ha consentito agli utenti Linux, MacOS e Windows di gestire i principali servizi AWS dalla riga di comando di una sessione terminale locale. Pertanto, con una singola installazione e una configurazione minima, è possibile iniziare a utilizzare tutte le funzionalità fornite dalla Console di gestione AWS utilizzando il programma terminale.

La AWS CLI ha bisogno di Python, quindi è necessario installarlo.

Come sistema di versionamento del codice, abbiamo utilizzato Git, utile anche per clonare template skill da repository Git.

Assicurarsi di avere Node.js versione 8 installato sulla propria macchina. Questo perché si è deciso di adottarlo come linguaggio per la parte di backend della skill e perché verrà utilizzato npm per installare l’ultimo prerequisito, ASK CLI.

L’interfaccia della riga di comando di Alexa Skills Kit (ASK CLI) è uno strumento per gestire le skill Alexa e le risorse correlate, come le funzioni AWS Lambda. Con ASK CLI si ha accesso all’API Skill Management, che consente di gestire le skill Alexa a livello di codice dalla riga di comando. Durante la gilda sono stati utilizzati i comandi:

  • Creazione della skill partendo da uno dei template disponibili: ask new.
  • Distribuzione  della skill sul cluster di AWS: ask deploy.
  • Simulazione di una conversazione con Alexa tramite la skill: ask dialog. Usato soprattutto per testare i progressi, senza dover accedere all’Amazon Developer Console.

Implementare una skill partendo da Alexa Skill Kit

Una skill è una funzione online che permette di interagire con Alexa. Nell’Alexa Skill Store sono disponibili più di 50.000 skill di sviluppatori esterni, tra cui la gestione della lista della spesa.

In pochi passaggi, è possibile programmare una propria skill utilizzando Alexa Skills Kit, accessibile tramite Amazon developer, e AWS Lambda. Tecnicamente, una skill è composta da un’interfaccia utente (chiamata front end) e dalla logica del programma (il back end).

La logica del programma nel back end può essere eseguita:

  • tramite HTTPS su un web server
  • come funzione Lambda sulla piattaforma di cloud computing AWS.

È un servizio di calcolo serverless, che esegue codice in risposta ad eventi e gestisce automaticamente le risorse di elaborazione.

Una volta loggati su AWS, bisogna utilizzare AWS Management Console, un’interfaccia utente basata su browser, per gestite i servizi web di Amazon tra cui appunto Lambda. È molto importante assicurarsi che la console sia impostata nella zona in cui si vuole offrire la skill. Dato che si vuole sviluppare una skill in italiano, bisogna selezionare l’impostazione della regione “EU (Italy)”.

Architettura di una lambda function

L’utente si rivolge ad Alexa con un’espressione (utterance) che viene elaborata dal codice interno al device.
Viene riconosciuto l’intent, che viene inviato in formato JSON alla Lambda contenente la logica di backend.
La Lambda a sua volta restituisce una risposta vocale che il dispositivo fornirà all’utente.

Intent e invocation name

Con il termine invocation name si indica l’espressione con cui gli utenti si rivolgono alla vostra skill. L’invocation name coincide possibilmente con la descrizione della skill, ma può anche differire da questa.
Questa descrizione deve rispettare alcuni prerequisiti:

  • Deve essere composto da due o più parole.
  • Le parole devono essere separate da spazi.
  • Utilizzare solo lettere minuscole.
  • Scrivere l’invocation name tra virgolette, nel caso in cui si utilizzi un apostrofo o un’abbreviazione con un punto.
  • I numeri o gli altri caratteri speciali devono essere scritti per intero.

Importante ricordare che l’invocation name non può contenere né frasi di avvio di Alexa – come “launch” (avvia), “ask” (chiedi), “tell” (dici), “load” (carica), “open” (apri) o “play” (gioca) – né parole di richiamo come “Alexa”, “Amazon”, “Echo” o “computer”, che servono per rivolgersi all’altoparlante intelligente. Anche le parole “skill” e “app” non sono consentite.

Per intento si definisce un’azione che la skill esegue nel momento in cui un utente usa un determinato schema linguistico.
Va definito:

  • Che cosa un utente potrebbe dire alla vostra skill.
  • Con quale intenzione viene pronunciata la frase.
  • Come reagisce la skill.

Ogni skill personalizzata contiene già cinque intenti predefiniti che verranno implementati successivamente. Se necessario, è possibile aggiungere intenzioni già pronte o personalizzate.
E’ possibile definire più frasi di esempio (ad esempio aggiungi prodotto, inserisci prodotto) per ogni intento così da avere a disposizione un database maggiore per il modello di interazione.

Ambiente di sviluppo: Alexa Developer Console

Per l’implementazione degli intenti e della logica è possibile utilizzare l’IDE integrato nella Amazon developer console oppure editando direttamente un file JSON.
Una volta loggati in Amazon developer, è possibile accedere alla suite Alexa Skills Kit per implementare gli intenti utili alla skill che si vuole realizzare.

Dalla console è possibile anche testare la skill.

Nel corso della gilda è stato inizialmente utilizzato il sito di Amazon developer per poi passare all’utilizzo dell’IDE IntelliJ dal quale poter utilizzare i comandi ASK CLI, direttamente dal terminale messo a disposizione, e gestire commit e push del codice sul repository nel GitLab aziendale.

 

Conclusioni e risultati: cosa abbiamo imparato nella gilda Alexa Skill

Questa gilda è stata molto interessante e istruttiva per ciascuno dei componenti. Ognuno ha accresciuto le competenze sull’ecosistema Amazon Web Services, sull’utilizzo delle Lambda AWS nonché la comprensione dell’architettura di una skill.

Qualora siate interessati ad approfondire l’argomento, nella sezione laterale trovate i link ai repository (e slide) sia della gilda che del workshop, entrambi su Gitlab aziendale, nonché il link video YouTube della demo effettuata in occasione del Camp di Giugno.

Articolo scritto da