Difference between revisions of "VT2020-Voice First Development-Fiche"

From air
Jump to navigation Jump to search
(Created page with "=Micronaut= 200px|thumb|left|Micronaut logo ==Présentation== 100px|thumb|right|Object cumputing logo Micronaut est un fram...")
 
 
(14 intermediate revisions by the same user not shown)
Line 1: Line 1:
  +
=Introduction=
=Micronaut=
 
  +
Voice-First Development désigne un ensemble de bonnes pratiques créée dans le but de maximiser les chances de succès d’une application basée sur la voix, en évitant les problèmes les plus évidents. Il ne s'agit donc pas d'une technologie en particulier mais d'une manière spécifique de coder un certain type d'application, les applications vocales.
[[File:micronaut.jpg|200px|thumb|left|Micronaut logo]]
 
==Présentation==
 
[[File:objectComputing.png|100px|thumb|right|Object cumputing logo]]
 
Micronaut est un framework full-stack Java moderne, basé sur la JVM, est développé par les créateurs du framework Grails et sponsorisé par Object Computing, Inc.
 
* Il est open source sous licence Apache 2.0
 
* La première version de Micronaut (1.0.0) est sortie en 2018
 
Micronaut est un framework qui permet de construire des applications de type Microservices,Serverless modulaires avec un support pour Java, Kotlin et le langage Groovy adaptés au JDK et à GraalVM.
 
   
  +
=Abstract=
  +
Voice-First Development refers to a set of best practices created with the aim of maximizing the chances of success of a voice-based application, avoiding the most obvious problems. It is therefore not a question of a particular technology but of a specific way of developing a certain type of application, voice applications.
   
  +
=Présentation et architecture=
  +
Comme son nom l'indique, une application vocale repose essentiel sur la voix comme modalité d'interaction, aussi bien en entrée qu'en sortie. Cependant, cette modalité relativement récente est encore complexe à utiliser et maîtriser. Pour permettre la création de telle applications, un certains nombre de composants sont essentiels.
   
  +
[[File:architecture_voiceapp.png | 500px | thumb | right | Architecture d'un système vocal classique]]
=Objectifs de Micronaut=
 
Micronaut s'inspire des leçons apprises au fil des ans en construisant des applications, des monolithes aux microservices en utilisant les frameworks Spring, Spring Boot et Grails.
 
   
  +
On peut en tirer 5 composants essentiels :
Micronaut vise à fournir tous les outils nécessaires pour construire des applications JVM, y compris :
 
  +
* Speech To Text : reconnaissance automatique de la parole : extraction d’une image vectorielle de la voix puis association à des éléments lexicaux connus, pour enfin former des mots, puis des phrases « correctes »
* Injection de dépendance et inversion de contrôle (IoC)
 
  +
* Compréhension du langage naturel : extraction d’un ensemble d’informations catégoriséss depuis la phrase retranscrite à l’étape précédente. L’information est séparée entre une intention (ce que l’utilisateur veut) et les entités (informations importantes permettant de faire sens avec l’intention)
* Programmation orientée par aspect (PAO)
 
  +
* Gestionnaire de dialogue : récupère l’ordre en entrée pour générer une liste d’instruction aux autres éléments du système, il garde également trace des anciennes conversations et des informations importantes qu’il a pu en tirer. Ce composant a en particulier accès au information pour répondre à la question (les heures de fermeture de McDonald ici), le contexte de conversation (issues des questions précédentes) et les informations utilisateurs obtenus au fil du temps lors de l’utilisation de l’application.
* Défauts raisonnables et autoconfiguration
 
  +
* Génération de langage naturel : transformation inverse, création d’une phrase « correcte » à partir des ordres générés avant
  +
* Text To Speech : Création d’une sortie vocale à partir de la phrase générée
   
   
  +
=Outils utilisés=
Mais pas seulement , Micronaut par le travail de ces développeurs a pour objectifs d'éviter les inconvénients de framework comme Spring, Spring Boot et Grails en fournissant pour les applications:
 
* Temps de démarrage rapide
 
* Réduction de l'empreinte mémoire
 
* Utilisation minimale de la réflexion
 
* Utilisation minimale des procurations
 
* Pas de génération de bytecode au runtime
 
* Test unitaire facile
 
   
  +
Pour créer une application vocale et la faire fonctionner, un certain nombre d'outil est nécessaire. L'ensemble de ces outils sont détaillés après. Les liens vers leurs sites respectifs sont disponibles dans les sources, en bas de la page.
=Spéficité de Micronaut =
 
   
  +
==Violet==
Micronaut effectue l'injection de dépendance sans exiger de réflexion.
 
  +
[[File:violet.jpg | 300px | thumb | right | Interface de test Violet]]
L'injection de dépendance est realisée au moment de la compilation.
 
  +
Violet est un framework permettant la création d'application conversationnelle, notamment pour Alexa, Google Home et mobile.
Micronaut par sa compilation [https://fr.wikipedia.org/wiki/Compilation_anticip%C3%A9e Ahead-Of-Time (AOT)] et son injection de dépendance qui se passe de reflexion permet d'avoir des applications avec un temps de démarrage rapide,avec une faible empreinte sur la mémoire contrairement aux framework qui repose sur la reflexion et les proxys au Runtime.
 
  +
Violet permet:
  +
* la création de flux de conversations
  +
* l'accès à des primitives de bas niveau permettant de gérer automatiquement l'état de la conversation
  +
* l'accès à des plugins permettant la communications avec d'éventuelles bases de données
   
  +
Violet nous fournit une interface permettant de tester la logique de notre application avant de la déployer.
=Fonctionnalités=
 
Micronaut propose des fonctionnalités ,en voici une liste non exhaustive :
 
   
  +
==Heroku==
* Configuration distribuée(HashiCorp Consul, AWS Parameter Store etc)
 
  +
Heroku est une plateforme cloud permettant le build, le déploiement et la gestion d'une application.
* Service Discovery (Consul, Eureka, Kubernetes …)
 
* Load Balancing(Équilibrage des charges) côté client (Netflix Ribbon )
 
* Distributed Tracing : Le traçage distribué permet de déterminer où se produisent les défaillances et ce qui cause les mauvaises performances.
 
* Serverless functions : L'approche de Micronaut en termes de son temps de démarrage rapide et sa faible empreinte mémoire à la compilation en font un candidat idéal pour servir de framework au développement de fonctions. En fait, Micronaut offre un support dédié au développement et au déploiement de fonctions pour AWS Lambda et tout système FaaS qui prend en charge l'exécution de fonctions en tant que conteneurs (tels que OpenFaaS, Rift ou Fn)
 
* Configuration d'accès des données avec les bases mongoDB, Neo4j, Postgres, Cassandra, Redis…
 
* Mécaniques intégrées de retry et circuit breaker : être capable de se remettre d'echec est critique pour les clients HTTP et c'est là que les Retry Advice intégrés à Micronaut interviennent.
 
Les projets Micronaut peuvent également être générés à l'aide d'un générateur en ligne [https://micronaut.io/launch/ https://micronaut.io/launch/]
 
[[File:generator.png|500px|thumb|center]]
 
   
  +
Dans le cadre d'une application, il est nécessaire de déployer l'application pour pouvoir la tester avec un agent Dialogflow.
=Cas d'utilisations=
 
Avec Micronaut, on peut construire des applications de type :
 
Microservices
 
Serverless
 
Message-Driven : axés sur les messages avec Kafka/Rabbit
 
CLI : interface en ligne de commandes
 
Android
 
   
  +
==Dialogflow==
=Micronaut et GraalVM=
 
  +
Dialogflow se définit comme une plateforme de compréhension du langage naturel. En pratique, Dialogflow nous permet également d'avoir accès à des composants de Speech To Text et de Text To Speech.
[[File:graalvm.png|100px|thumb|right|GraalVM logo]]
 
 
Micronaut fonctionne bien avec GraalVM. GraalVM permet de produire des images natives grâce à la compilation Ahead-of-time.Et GraalVM est bien intégrée dans un frameworks tels que Micronaut par le fait que Micronaut dispose d'une compilation AOT ,ce qui fait que le temps démarrage de ses applications sont grandement réduit lorsqu'il utilise GRaalVM.
 
 
=Limites=
 
* Certaines dépendances ne supportent pas (encore) GraalVM : Le support GraalVM (comme GraalVM lui-même) est toujours en phase d'incubation. Le support des bibliothèques tierces est aléatoire et l'équipe Micronaut est toujours en train de régler tous les problèmes potentiels.Jusqu'à présent, le serveur HTTP, le client HTTP, le support de fonction et le module de découverte de service de Micronaut ont été vérifiés comme fonctionnant sur GraalVM 1.0 RC6 ou supérieur. Le support des autres modules est encore en cours d'évolution.
 
 
 
* Petite communauté mais qui croit d'année en année.
 
 
=Installation=
 
==Avec SDKMAN==
 
Cet outil facilite l'installation de Micronaut sur toute plate-forme basée sur Unix (Mac OSX, Linux, Cygwin, Solaris ou FreeBSD).
 
 
Ouvrez un nouveau terminal entrez :
 
<pre> $ curl -s https://get.sdkman.io | bash </pre>
 
 
 
Suivez les instructions à l'écran pour terminer l'installation.
 
 
Ouvrez un nouveau terminal ou tapez la commande :
 
<pre> $ source "$HOME/.sdkman/bin/sdkman-init.sh" </pre>
 
 
Installez ensuite la dernière version stable de Micronaut:
 
<pre> $ sdk install micronaut </pre>
 
 
Une fois l'installation finie. Vous pouvez voir la version installé en tapant la commande:
 
<pre> $ mn --version </pre>
 
 
 
'''Utilisation :'''
 
 
Créer une application en utilisant l'interface de ligne de commande Micronaut.
 
 
<pre> mn create-app example.micronaut.complete </pre>
 
 
La commande précédente crée une application micronaut avec le paquet par défaut '''example.micronaut''' dans un dossier nommé '''complete'''.
 
 
Par défaut, '''create-app''' crée une application Java Micronaut qui utilise le système de compilation '''Gradle'''. Cependant, vous pouvez utiliser d'autres outils de compilation tels que '''Maven''' ou d'autres langages de programmation comme '''Groovy''' ou '''Kotlin'''.
 
 
Si vous utilisez Java ou Kotlin et IntelliJ IDEA, assurez-vous que vous avez activé le traitement des annotations.
 
[[File:intellij.png|400px|thumb|center]]
 
Pour plus d'informations cliquer [https://guides.micronaut.io/micronaut-cli/guide/index.html ici]
 
 
==Utiliser Micronaut avec JHipster==
 
Installer MHipster
 
<pre> $ npm install -g generator-jhipster-micronaut</pre>
 
 
Creer a new folder for your application
 
Lancer MHipster
 
<pre> $ mhipster </pre>
 
 
Si vous avez déjà installé JHipster, vous pouvez utiliser la commande suivante:
 
<pre> $ jhipster --blueprints micronaut </pre>
 
 
*Monolith projects
 
*Microservice projects
 
*JWT or OAuth 2.0 Authentication
 
*SQL Database Support
 
MySQL
 
MariaDB
 
PostgreSQL
 
H2
 
*Ehcache
 
*Caffeine Cache
 
*Redis Cache
 
*Maven or Gradle Build System
 
*Angular or React Client
 
*Protractor Tests
 
*Heroku Deployment
 
 
=Démonstration=
 
Une démonstration de Micronaut est disponible [https://air.imag.fr/index.php/VT2020-Micronaut-Demo ici]
 
   
 
=Bibliographie=
 
=Bibliographie=
Line 139: Line 50:
 
* Année : [[VT2020|VT2020]]
 
* Année : [[VT2020|VT2020]]
 
* Sujet : Voice-First Development
 
* Sujet : Voice-First Development
* Slides : [ Slides]
+
* Slides : [https://air.imag.fr/images/3/38/VT2020-Voice_First_Development-Presentation.pdf Slides]
  +
* Démonstration : [https://air.imag.fr/index.php/VT2020-Voice_First_Development-Demo Démonstration]
 
* Auteurs : Samuel COURTHIAL
 
* Auteurs : Samuel COURTHIAL

Latest revision as of 11:31, 23 November 2020

Introduction

Voice-First Development désigne un ensemble de bonnes pratiques créée dans le but de maximiser les chances de succès d’une application basée sur la voix, en évitant les problèmes les plus évidents. Il ne s'agit donc pas d'une technologie en particulier mais d'une manière spécifique de coder un certain type d'application, les applications vocales.

Abstract

Voice-First Development refers to a set of best practices created with the aim of maximizing the chances of success of a voice-based application, avoiding the most obvious problems. It is therefore not a question of a particular technology but of a specific way of developing a certain type of application, voice applications.

Présentation et architecture

Comme son nom l'indique, une application vocale repose essentiel sur la voix comme modalité d'interaction, aussi bien en entrée qu'en sortie. Cependant, cette modalité relativement récente est encore complexe à utiliser et maîtriser. Pour permettre la création de telle applications, un certains nombre de composants sont essentiels.

Architecture d'un système vocal classique

On peut en tirer 5 composants essentiels :

  • Speech To Text : reconnaissance automatique de la parole : extraction d’une image vectorielle de la voix puis association à des éléments lexicaux connus, pour enfin former des mots, puis des phrases « correctes »
  • Compréhension du langage naturel : extraction d’un ensemble d’informations catégoriséss depuis la phrase retranscrite à l’étape précédente. L’information est séparée entre une intention (ce que l’utilisateur veut) et les entités (informations importantes permettant de faire sens avec l’intention)
  • Gestionnaire de dialogue : récupère l’ordre en entrée pour générer une liste d’instruction aux autres éléments du système, il garde également trace des anciennes conversations et des informations importantes qu’il a pu en tirer. Ce composant a en particulier accès au information pour répondre à la question (les heures de fermeture de McDonald ici), le contexte de conversation (issues des questions précédentes) et les informations utilisateurs obtenus au fil du temps lors de l’utilisation de l’application.
  • Génération de langage naturel : transformation inverse, création d’une phrase « correcte » à partir des ordres générés avant
  • Text To Speech : Création d’une sortie vocale à partir de la phrase générée


Outils utilisés

Pour créer une application vocale et la faire fonctionner, un certain nombre d'outil est nécessaire. L'ensemble de ces outils sont détaillés après. Les liens vers leurs sites respectifs sont disponibles dans les sources, en bas de la page.

Violet

Interface de test Violet

Violet est un framework permettant la création d'application conversationnelle, notamment pour Alexa, Google Home et mobile. Violet permet:

  • la création de flux de conversations
  • l'accès à des primitives de bas niveau permettant de gérer automatiquement l'état de la conversation
  • l'accès à des plugins permettant la communications avec d'éventuelles bases de données

Violet nous fournit une interface permettant de tester la logique de notre application avant de la déployer.

Heroku

Heroku est une plateforme cloud permettant le build, le déploiement et la gestion d'une application.

Dans le cadre d'une application, il est nécessaire de déployer l'application pour pouvoir la tester avec un agent Dialogflow.

Dialogflow

Dialogflow se définit comme une plateforme de compréhension du langage naturel. En pratique, Dialogflow nous permet également d'avoir accès à des composants de Speech To Text et de Text To Speech.

Bibliographie

Veille Technologique 2020