« Alexa, ouvre Radio-Canada” » — Développement de la Skill Radio-Canada

Omar Zakaria
Radio-Canada Lab
Published in
8 min readMar 27, 2019

--

Dans les derniers mois, j’ai travaillé au sein de l’équipe d’innovation à Radio-Canada en tant qu’architecte et développeur afin d’expérimenter avec la plateforme Alexa d’Amazon. Le but était de créer une application vocale qui rendrait accessible une sélection de contenus de Radio-Canada sur Alexa en français.

Skill (cf custom skill) : Application vocale personnalisée dans l’écosystème d’Alexa. L’équivalent Google se nomme une Action Google.

Je présenterai dans cet article les différents éléments qui composent la Skill Radio-Canada et qui nous ont permis de livrer une Skill certifiée par Amazon. Pour plus de détails sur l’approche stratégique, vous pouvez consulter cet article.

Les principes de base.

Développer sur Alexa, c’est avant tout se familiariser avec un écosystème : la console de développement, la documentation, les différents appareils Echo, l’architecture d’une solution, etc. La majorité du travail de développement se partage entre la console de développement Alexa et le service Backend, qui peut être hébergé, entre autres, sur AWS Lambda.

Il est important de prendre connaissance des différentes parties qui composent une interaction entre un usager et une Skill :

  • L’objet connecté (Echo, Console Alexa, etc).
  • Le service de traitement Speech-To-Text + extraction des entités.
  • La console de développeur Alexa et le modèle d’interaction.
  • Le service Backend, qui détermine les interactions lors du dialogue.
  • La base de données qui retient l’information d’une session à l’autre.
  • Les contenus médias, audio et vidéo.

Voici un diagramme décrivant l’architecture sommaire de notre solution :

Contenus et médias (audio & vidéo)

Il est essentiel de déterminer en amont quels contenus, principalement audios et vidéos, nous voulons rendre accessibles sur Alexa afin de nous assurer de leur disponibilité et de leur format.

En effet, comme n’importe quel système de diffusion, Amazon Echo diffuse selon ses propres spécifications : format de fichiers (AAC/MP4, MP3, and HLS), niveau sonore (-9 à -19 dB LUFS/LKFS), cryptage (HTTPS), ainsi que des recommandations de durée optimale. Le non-respect de ces critères nous expose à une mauvaise expérience utilisateur, à un échec de certification Amazon, ou encore à un contenu qu’Alexa n’est tout simplement pas capable de jouer.

Appareils Echos

Notre Skill Radio-Canada existe sur n’importe quel objet connecté à Alexa. De ce fait, certains appareils ont un écran rectangulaire, tel que le Echo Show, d’autres ont un écran rond, tel que le Echo Spot, et beaucoup d’autres non tout simplement pas d’écran. Cela influence le développement de plusieurs façons; il faut que la Skill propose une expérience complète à l’utilisateur, peu importe sur quel appareil il y accède.

Il faut parfois offrir un accompagnement visuel lorsqu’un écran est présent dans l’appareil. Par exemple, lorsqu’on propose une liste de plus de trois options à l’utilisateur, il est pratique de pouvoir afficher la liste des options sur l’écran. Par contre, il faut aussi réfléchir au scénario sans écran; est-ce que le dialogue d’Alexa a du sens s’il n’y a pas d’écran?

De plus, les différents appareils Echo n’évoluent pas toujours de la même façon. Il est arrivé que le Echo Spot, par exemple, ait des difficultés techniques dans la langue française, alors que les autres types d’appareils n’en avaient pas. Notre expérience nous a démontré que le plus stable était le Echo Dot, le plus simple des appareils.

Service de transcription (Speech-to-Text)

Le service de traitement en langage naturel sous-jacent à Alexa est le même que pour Lex, un service indépendant d’Amazon qui permet de construire des agents conversationnels. Je n’entrerai pas dans les détails de ce service, étant donné que son usage dans Alexa est une boîte noire, sans aucun contrôle pour le développeur ou encore l’utilisateur. Par contre, il nous est arrivé, à plusieurs reprises, d’assister à l’évolution de ce service d’un jour à l’autre, étant donné que le traitement de la langue française au Canada était en cours de développement par Amazon, ou encore en « apprentissage ». Comme résultat, il arrivait parfois que l’accent d’Alexa change, ou encore son ton.

Console de développement et modèle d’interaction

Modèle d’interaction : Un modèle définissant les interactions entre un utilisateur et un assistant vocal. On y définit les intentions possibles (intents), les formulations qui peuvent être comprises (utterances) ainsi que les paramètres du dialogue (Slot type and value).

La console du développeur pour Alexa est le point de départ pour créer une Skill. On peut y créer la Skill, définir le modèle d’interaction, définir les détails de la distribution, l’envoyer pour certification ainsi qu’accéder aux données d’analyses d’écoute. Cet article ne vise pas à expliquer l’utilisation de la console, puisque de nombreux tutoriels sur le sujet existent déjà.

Service backend et outils de développement

En se basant sur plusieurs cours en ligne suggérés par Amazon, on peut employer plusieurs stratégies différentes pour développer le service web.

Par contre, il devient vite apparent qu’un des moyens les plus adaptés pour le développement sur Alexa est de faire usage de la librairie Alexa Skills Kit pour NodeJs (Github et documentation). Celle-ci est aussi offerte pour Java et Python et développée directement par Amazon. Elle est écrite en Typescript et est bien documentée. Aussi, en faire l’usage simplifie énormément le développement.

En partant de cette librairie, les choix technologiques qui ont étés retenus sont les suivants:

  • NodeJs / Service web déployé sur AWS Lambda et bien supporté par ce dernier.
  • Typescript / Langage adapté pour tirer profit au maximum de la documentation de ask-sdk.
  • Mocha & Chai / Tests unitaires et de flux de dialogues.
  • Virtual-Alexa / Librairie de simulation d’Alexa par Bespoken.

Base de données

L’usage d’une base de données dans le cadre d’une Skill vise principalement à retenir de l’information lors d’une session de dialogue afin de guider des sessions futures. Par exemple, si l’on veut que le message de bienvenue dans l’application change pour un utilisateur après trois accès, il faut pouvoir compter le nombre d’accès et l’enregistrer dans une base de données.

La structure de cette dernière est assez simple; une entrée par utilisateur, et à chaque utilisateur, le modèle de données qu’on aura choisi d’enregistrer pour ledit utilisateur.

La base de données privilégiée pour la Skill de Radio-Canada est DynamoDB, en raison de son intégration simple avec AWS Lambda. De plus, lors du développement de la Skill Radio-Canada, il existait déjà un adaptateur qui rendait la librairie de ask-sdk compatible avec DynamoDB. Autrement dit, il aurait fallu développer un adaptateur pour la solution qu’on aurait choisie. Aujourd’hui, ask-sdk supporte aussi S3 comme service de persistance des données sans développement supplémentaire.

Stratégies de test

En plus de tests unitaires avec Mocha et Chai, utiliser virtual-alexa permet de facilement tester des interactions de flux. Premièrement, cela facilite le développement en permettant de valider si un cas de dialogue fonctionne bien, et deuxièmement, cela permet de valider qu’aucun nouvel ajout au dialogue ne brise un dialogue ailleurs dans la solution.

Cela étant dit, l’aspect évolutif des flux dialogues est coûteux en ce qui concerne la maintenabilité des tests; plusieurs deviennent obsolètes rapidement. Cet aspect est atténué si, dès le départ, les flux de dialogues sont définis et satisfaisants. Une approche de design rigoureuse est donc fortement recommandée.

Tester les flux de dialogues automatiquement est utile, mais coûteux si l’on change souvent la structure de notre conversation.

Conclusions

Les aspects positifs du développement d’une Skill sur Alexa

La documentation sur Alexa est utile et très complète. Ça ne semble pas être la première chose à laquelle on pense, mais la documentation sur Alexa a la qualité d’être claire et pertinente. J’apprécie aussi le fait que nos contacts au sein d’Amazon ont été présents et disponibles pour répondre à nos questions lorsque nous en avions.

À l’aide du Alexa Skills Kit, le développement de la solution suit de près la documentation; tout y est.

De plus, l’intégration entre la Skill, AWS Lambda et DynamoDB est aussi très encadrée et assez simple à exécuter.

Les aspects moins positifs

Les exigences en ce qui a trait aux niveaux sonores des contenus sont un peu inhabituelles pour Radio-Canada. Alors que Amazon exige en moyenne -13 ou -14 LKFS, les contenus de Radio-Canada ont normalement un niveau sonore de -16 LKFS pour le web, et -24 LKFS pour les contenus télé ou radio, ce qui a nécessité du travail d’adaptation par l’équipe technique Audio-Vidéo.

Ni positif ni négatif

Alexa évolue aussi très vite; nous avons assisté à l’apprentissage de la langue québécoise par Alexa, alors qu’elle ne connaissait que le français de France. Cela n’a pas été sans problèmes, car il arrivait parfois qu’elle comprenne mal les phrases de l’utilisateur ou encore qu’elle réponde mal à certaines intentions. La situation changeait d’une journée à l’autre. Alexa semble moins stable en français qu’en anglais pour l’instant.

Qu’est-ce que j’aurais aimé essayer ou expérimenter?

Fonctionnalité CanFulfillIntentRequest

Pour l’instant, une des seules façons d’accéder à une Skill Alexa est de l’activer avec une phrase telle que : « Alexa ouvre Radio-Canada. ». Cela devient plus complexe si l’on veut accéder, par exemple, à un contenu d’ICI Première directement. Dans ce cas, il faut formuler une phrase telle que : « Alexa ouvre Radio-Canada et joue la radio de Montréal. » Cela exige de l’utilisateur qu’il sache au préalable que la Skill Radio-Canada existe, et qu’elle peut jouer la radio ICI Première, en plus d’activer la Skill sur son application mobile Alexa. Cependant, une fonctionnalité, encore en mode bêta sur le marché anglais des États-Unis (en-US) lors de l’écriture de cet article, est le CanFulfillIntent Request. Cette fonctionnalité permettrait à une Skill de déclarer d’elle-même à Alexa qu’elle est en mesure de répondre à une requête du genre : « Alexa, joue ICI Première Montréal. » Alexa serait alors capable de reconnaître automatiquement la Skill Radio-Canada comme une candidate pour répondre à la requête de l’utilisateur et de la lui offrir directement.

Jovo

Alors que le développement pour Alexa uniquement permet de très bien intégrer des concepts propres à son écosystème, on peut avoir besoin de développer en parallèle une Skill Alexa et une Google Action. Pour répondre à ce besoin, une des librairies les plus complètes pour se faire est Jovo. C’est un regroupement de librairies, de débogueurs, d’interfaces en ligne de commande (CLI) qui permettent de développer sur les deux plateformes à la fois, sans perdre la richesse de l’une ou de l’autre. Bien des bénéfices, à cet égard, méritent d’être évalués lorsqu’on entame un projet sur assistants vocaux.ant que cet article trace une vue d’ensemble utile du parcours technologique qu’Alexa nous à demander à Radio-Canada.

J’espère que cet article, qui donne une vue d’ensemble du parcours technologique qu’Alexa a nécessité pour être implantée à Radio-Canada, vous sera utile.

Merci!

--

--