formations/cesi/architecture_n_tiers/presentation/mini_projet.md

4.7 KiB
Raw Permalink Blame History

Mini projet

"Alfred", assistant personnel décentralisé

William Petit - S.C.O.P. Cadoles


Les "chatbots"

ou "agents conversationnels"

  • Interface homme/machine basée sur la "conversation"
  • Regain d'intêret ces dernières années avec la montée en puissance de "l'intelligence artificielle"

IRC

  • Conception en 1988, standardisation en 1993, inspiré du réseau Bitnet
  • Protocole basé sur TCP et l'échange de messages au format texte
  • Interaction avec le serveur basée sur des commandes /join, /quit, /msg...

Freenode

  • Mis en place en 1995
  • Un réseau de serveurs IRC dédié aux projets libres et open source
  • Accès gratuit et maintenu par la communauté

NATS

https://nats.io/

  • Un bus de message basé sur le protocole TCP et des données échangées au format texte.
  • Modèle abonnement/publication et requête/réponse
  • Des connecteurs pour de multiples langages: PHP, NodeJS, Java, etc

Exemple de séquence d'échange

center 120%


Votre projet: Alfred, assistant personnel décentralisé

  • Observe les conversations sur un canal IRC
  • Fournit des "services" sous la forme de "commandes" aux utilisateurs du canal
  • Composé de services indépendants communicants via un bus de message (NATS)

Quels types de services ? (1)

  • Alfred fait une recherche Wikipédia et affiche le lien de la page associée lorsqu'un utilisateur mets le marqueur !wiki dans un message sur le canal IRC.
  • Alfred fait une recherche Youtube et affiche le lien du premier résultat lorsqu'un utilisateur mets le marqueur !yt
  • Alfred enregistre les messages des utilisateurs en base de données et fournit une interface Web qui permet de faire une recherche dans l'historique des messages. Une commande permet également d'effectuer une recherche dans l'historique.
  • Alfred se connecte via IMAP à une boite de réception partagée et envoie un message sur le canal lorsqu'un courriel arrive sur cette boite.

Quels types de services ? (2)

  • Alfred affiche la liste de ses fonctionnalités lorsqu'un utilisateur utilise le marqueur !help
  • Alfred publie automatiquement les messages d'un compte Twitter donné sur le canal de communication
  • Alfred fait une recherche sur l'API OpenStreetMap et retourne le lien vers la carte interactive de l'adresse recherchée lorsqu'un utilisateur utiliser le marqueur !map
  • Alfred publie la météo du jour à une fréquence donnée sur le canal de communication
  • D'autres idées ?

Vue d'ensemble

center 100%


irc2nats

  • Une passerelle entre un serveur IRC et un serveur NATS
  • Publie des messages avec le sujet irc.message.<channel> avec un corps de message au format JSON
  • S'abonne aux messages avec le sujet irc.message.send et transfert le message NATS sur le canal IRC

NATS: tester l'envoi/réception de messages

  1. Télécharger l'utilitaire nuts pour votre système d'exploitation
  2. Pour envoyer un message:
     ./nuts publish <sujet> <message>
    
  3. Pour écouter les messages pour un sujet
     ./nuts subscribe <sujet> </chemin/script/à/exécuter>
    

Objectifs de la journée

Vous pouvez choisir le service que vous voulez implémenter parmi les exemples pour Alfred. Vous pouvez travailler en groupe ou seul.

Vous pouvez également proposer votre propre idée, la seule contrainte est l'usage de NATS pour l'échange de messages et, si possible, d'utiliser une API externe.

Si vous arrivez à implémenter une fonctionnalité en entier, vous pouvez l'améliorer ou passer à une autre.


Problématiques à résoudre

Réflechissez à ces questions pendant que vous travaillez sur vos services respectifs. Quelles réponses pourriez-vous me donner à la fin de la journée ?

  • Comment gérer l'échec d'une partie de l'application ?
  • Comment superviser le bon fonctionnement de l'ensemble de l'application ?
  • Comment partager des données persistentes entre les différents services ? (ex: la liste des utilisateurs de l'application ?)
  • Comment gérer les droits sur certaines commandes ? (ex: commandes d'administration)

Licence

CC BY-NC-SA 3.0 FR

Creative Commons - Attribution - Pas dUtilisation Commerciale - Partage dans les Mêmes Conditions 3.0 France