Vous avez probablement vu la vidéo d’une mamie Italienne qui parle avec un Google Home mini ou la vidéo d’une fille qui est frustrée par les discussions avec un Amazon Echo. Les applications des assistants vocaux arrivent à grand pas grâce à la popularisation des devices comme Google Home ou Amazon Echo. Cet article fournit un comparatif de ces deux plates-formes, qui représentent l’état de l’art sur le marché.
Overview
Google Assistant
Lorsque vous parlez de Google Assistant, les développeurs ont tendance à mélanger différents concepts :
- Google Assistant : un assistant personnel intelligent qui vous aide à en faire plus dans votre monde.
- Google Home : un haut-parleur intelligent activé par l’assistant. Le Google Assistant est également activé sur les téléphones Android.
- Actions on Google : la plate-forme qui permet aux développeurs de créer des applications pour le Google Assistant. Actuellement, vous pouvez utiliser Dialogflow, Actions SDK et Converse.ai pour créer une application personnalisée.
Le point d’entrée pour créer des applications Google Assistant est la plate-forme Actions on Google. Dans cet article, nous allons nous concentrer sur la création d’une application avec DialogFlow, qui est le choix recommandé par Google et la solution la plus avancée.
(Référence d’image: https://blog.google/products/home/welcoming-mini-and-max-google-home-family/)
Amazon Alexa
Alexa est le service vocal basé sur le cloud d’Amazon disponible sur des dizaines de millions d’appareils d’Amazon et d’appareils tiers. Amazon possède actuellement une ligne de produits Echo :
- Echo 1ère et 2ème génération
- Echo Dot
- Echo Plus, Echo avec le hub SmartHome intégré
- Echo Spot, Echo compact avec un écran
- Echo Show, haut-parleur intelligent avec écran tactile
- Echo Look, appareil photo mains libres et assistant de style
- Echo Tap, haut-parleur Bluetooth portable Alexa-Enabled
Le portail des développeurs Alexa est votre point d’entrée pour créer un Skill Alexa, vous aurez aussi besoin d’un compte AWS pour déployer votre backend dans Lambda afin de finaliser le processus de création du Skill Alexa.
Concepts de base
Ces deux plates-formes utilisent différentes terminologies techniques pour aborder leurs concepts de base.
App vs Skill
Google a adapté naturellement le mot App. Amazon, d’autre part, décide d’appeler l’application Alexa un Skill.
Intent
La partie essentielle de la conception d’une expérience conversationnelle est d’identifier les intentions de l’utilisateur. Les deux plates-formes soulignent l’importance du design d’Intent. Amazon utilise le mot « Utterance » pour référencer ce que l’utilisateur dit dans sa documentation. Pour les deux plates-formes, il existe des intentions built-in bien définies, telles que l’Intent d’accueil ou les Intents de contrôle de la musique.
Les guides de conception et les bonnes pratiques sont également fournis par les deux plates-formes:
- Actions on Google: The Conversational UI and Why It Matters
- Alexa: Voice Design Guide
Entity v.s. Slot
Dans les entrées du langage naturel, il y a souvent des arguments, les valeurs qui composent l’intention d’utilisateur. Ces valeurs dans ce que dit l’utilisateur sont définies comme Entities dans DiaglogFlow et Slots dans le vocabulaire d’Alexa Skill. Vous pouvez utiliser des types built-in (par exemple, ville, date, couleur, adresse) ou personnaliser vos propres types pour les variables sur ces deux plates-formes.
Par exemple dans une phrase comme celle-ci :
Je veux réserver un vol de Paris à Rome pour vendredi prochain.
Paris et New York sont identifiés comme un Entity @sys.geo-city dans DialogFlow et un Slot AMAZON.EUROPE_CITY dans Alexa.
Outils de construction / conception
Les deux plate-formes ont fourni les outils pour construire le coeur de leur expérience conversationnelle :
- ce que dit utilisateur
- l’intention des utilisateurs
- ce que l’application peut répondre
DialogFlow
DialogFlow (anciennement api.ai) est un outil de conception d’interactions conversationnelles, le choix préféré pour créer une application Google Assistant. Il gère la partie lourde de la compréhension du langage naturel et le traitement des données des utilisateurs.
Alexa Skill Builder
Alexa dispose actuellement d’une version bêta de Skill Builder pour la conception du modèle d’interaction (Intents, Slots et Dialogues) pour un Alexa Skill Personnalisé :
Nous pouvons constater beaucoup de ressemblances entre ces deux outils.
Satisfaire l’intention de l’utilisateur
Vous pouvez appeler la logique métier de votre application ou la logique backend de votre Skill. L’objectif final d’une application d’assistant vocal est de répondre à la demande de l’utilisateur, que ce soit réserver un billet de train, ou connaître le résultat de leur équipe de football préférée.
Pour le Google Assistant, si vous utilisez DialogFlow, vous n’êtes pas obligé de déployer un backend et de fournir un Webhook endpoint. Vous pouvez simplement utiliser les fonctionnalités intégrées dans DialogFlow pour créer quelque chose de très satisfaisant. En ce qui concerne Alexa, vous devez implémenter un service web qui accepte les demandes et envoie des réponses au service Alexa sur le cloud pour un Custom Skill.
Exemple du SDK Node.js DialogFlow
Voici un exemple simple de Hello World utilisant le SDK Node.js de DialogFlow, avec le Firebase Cloud Functions:
const { DialogflowApp } = require('actions-on-google'); const functions = require('firebase-functions'); const helloWorld = app => { const foo = app.getArgument(Parameters.FOO); app.tell("Hello you! Did you just say:" + foo) } const Actions = { HELLO_WORLD: 'hello.world' } const Parameters = { FOO: 'foo' }; const actionMap = new Map(); actionMap.set(Actions.HELLO_WORLD, helloWorld); // HTTP Cloud Function for Firebase handler exports.recipeassistant = functions.https.onRequest( (request, response) => new DialogflowApp({request, response}).handleRequest(actionMap) );
Exemple du SDK Node.js Alexa
Alexa a une API similaire en termes de gestion des Intents et d’émission de réponses. Voici un exemple simple pour donner une vérité sur les chats au hasard:
const Alexa = require('alexa-sdk'); exports.handler = function(event, context, callback) { var alexa = Alexa.handler(event, context); alexa.appId = "APP_ID"; alexa.registerHandlers(handlers); alexa.execute(); }; const handlers = { 'LaunchRequest': function () { this.emit('GetNewCatFactIntent'); }, 'GetNewCatFactIntent': function () { this.response.speak("Here's your fact: The average cat sleeps 16-18 hours per day."); this.emit(':responseReady'); } }
Intégration ServerlessEn dehors du client Node.js, les deux plates-formes ont également des client python, java et en d’autres langages de programmation. Vous pouvez certainement trouver celui que vous connaissez et commencer à construire votre solution facilement.
Il n’est pas surprenant que chaque plate-forme privilégie sa propre solution Serverless pour le choix d’intégration :
- Pour DialogFlow, l’intégration avec les solutions Firebase (Cloud Functions, Realtime Database, etc …) est presque transparente grâce aux Firebase Command Line Tools. Il y a également un éditeur inline alimenté par Firebase Cloud Functions qui vous permet de commencer à construire tout de suite.
- Pour Alexa, si vous êtes familier avec AWS Lambda, l’ensemble du processus d’intégration est très simple. Il vous suffit de copier l’ARN AWS Lambda dans votre Alexa Skill pour configurer l’endpoint.
Conclusion
Cet article vous donne quelques idées sur la façon dont les choses sont faites sur Google Assistant et Amazon Alexa, qui réprésentent l’état de l’art des plates-formes d’assistant vocale. Les deux plateformes ont atteint un certain niveau de maturité, mais il reste encore beaucoup à faire pour vulgariser la conception et le développement d’applications pour une expérience conversationnelle.
Essayez le Hands-on déjà présenté lors du XKE du janvier ou trouvez des codelabs et des exemples. Ceux-ci devraient vous aider à créer des cas d’utilisation d’assistants vocaux intéressants et pertinents !