Comment 20 Minutes a développé un bot Messenger grâce au Serverless

D2SI_Blog_Image_20Minutes_20bot.jpg

En 2017, nous avions rencontré l'équipe technique de 20 Minutes pour discuter de Serverless et d'innovation dans la presse en ligne, avec le développement d'un skill Alexa basé sur AWS Lambda. En 2018, 20 Minutes continue à explorer les nouveaux usages et propose à ses lecteurs d'interagir avec un bot Messenger qui apprend de ses conversations grâce au Machine Learning et s'appuie sur architecture Serverless. Aurélien Capdecomme, CTO chez 20 Minutes, a accepté de répondre à nos questions sur le Machine Learning, le Serverless et le fonctionnement de 20bot.

Aurélien est en charge de l'équipe technique de 20 Minutes depuis 2016, après quelques années au sein d'autres médias et industries. Il est aujourd'hui convaincu que le Cloud est un élément de réponse à la crise structurelle que traverse le milieu de la presse. Avec ses équipes, il contribue à adapter la diffusion d'informations aux nouveaux usages.

Parlons un peu de votre infrastructure... où en êtes vous de la migration vers AWS?

Nos sites, et donc l’essentiel du trafic, ne sont pas encore sur AWS. Nous avons décalé la migration pour consacrer du temps au développement du bot 20 Minutes et à d’autres sujets liés à l’intelligence artificielle. Notre roadmap se concentre plutôt sur ce qui peut être fait de nouveau.

Utilisez-vous de nouveaux services AWS par rapport à 2017 ?

Notre stack se concentre surtout sur AWS Lambda, ElasticSearch et RDS. Nous utilisons également maintenant Cognito pour la gestion d’identités avec le social login (Facebook, Twitter, Google, etc.), et les services de pipeline, CodePipeline, CodeDeploy, sur lesquels tous nos process de déploiement sont pluggés. Et en 2018, nous prévoyons de tester Amazon SageMaker et ses fonctions de Machine Learning.

Est-ce que le Cloud répond toujours à vos attentes d’agilité et de maîtrise des coûts ?

Oui, le Cloud public permet d’éprouver un concept avec un investissement minime en termes de temps et d’argent. Le revers de la médaille, c’est que le Cloud public, et particulièrement AWS, propose tellement de nouveaux services qu'il est non seulement difficile de choisir, mais aussi de suivre. Le temps qu’on commence à mettre en oeuvre un projet, de nouvelles features existent déjà. Cela peut générer de la frustration. Maintenant, nous vérifions systématiquement ce qui est dans la roadmap quand un produit nous intéresse, pour savoir ce que nous devons développer nous-mêmes. Autre exemple, nous avons accueilli avec enthousiasme l’annonce d’Aurora Serverless, parce que nous peinons à dimensionner correctement nos instances Aurora, mais cela signifie aussi qu’il faudra revoir notre stack Cloudformation quand Aurora Serverless sera disponible. Cela a un coût en temps, surtout dans une équipe technique à la dimension de celle de 20 Minutes.

Le temps manque pour tester les nouveaux services ?

Nous devons aussi répondre à d’autres enjeux business. Par exemple, comme la France est qualifiée pour la Coupe du Monde, nous allons proposer quelque chose de nouveau autour de cet événement. C’est une vraie application business, qui va générer de la valeur ajoutée, mais on ne peut pas à la fois développer cette nouvelle fonction et implémenter la nouvelle version de Cognito, par exemple. Le manque de temps oblige à faire des choix.

Pourquoi et comment avez-vous développé un bot Messenger en Serverless ?

Le premier 20bot, développé en Symfony, a été lancé il y a deux ans. L’idée était de pouvoir parler ou interagir avec nos audiences via Facebook Messenger, d’avoir une IA capable de répondre, de donner de l’information sur un sujet, et de diffuser 5 articles en push à la mi-journée. 20bot donne aussi l’horoscope, ou propose des réponses liées à des événements comme le bac (un générateur de citations philosophiques 100% bullshit) ou la fête de la musique. Le précédent bot pouvait répondre à des questions d’actualité, mais nous voulions aller plus loin, de sorte que les lecteurs aient l’impression d’une vraie conversation, de parler à quelqu’un en langage naturel. Nous travaillons sur ce sujet depuis cet été, et la nouvelle version, sortie en décembre, a été développée en Serverless avec AWS Lambda et API Gateway, et la stack Aurora PostgreSQL, ElasticSearch Services, ElasticCache Redis.

En quoi le bot est-il plus intelligent que le précédent ?

Nous nous sommes appuyés sur le machine learning pour que le bot puisse apprendre des échanges, et avoir de vraies conversations. Il est notamment capable de saisir l’intention, même si l’ordre des mots n’est pas le bon ou s’il y a des fautes. 20bot peut maintenant comprendre la question, la notion de temps, le sujet, et cela lui permet de mieux structurer la recherche et de mieux répondre. Pour son apprentissage, le bot a été nourri de phrases, pour mieux comprendre comment les Français s’expriment.

Quelle est l’architecture derrière le bot ?

20bot est une application en Node.js, qui tourne grâce à Lambda. Ce sont des endpoints derrière API Gateway qui fournissent la réponse à l’utilisateur. Chaque demande déclenche un fonction Lambda, l’API de contenu est appelée pour obtenir l’article adéquat. Pour le push d’articles, nous utilisons Step Functions, qui nous permet d’enchaîner les fonctions Lambda dans un ordre défini. Passer en Serverless nous a permis de gagner en performance : avec le bot PHP Symfony, les pushs de 13h pouvaient prendre jusqu’à une heure pour arriver à tous les utilisateurs. Depuis que nous sommes passé en Serverless, tous les contenus sont livrés au plus tard à 13h05. Livrer les contenus plus rapidement, c’est un vrai avantage pour nous. S’il faut envoyer 150 000 pushs, Lambda lance autant d’instances que nécessaire pour répondre à cette demande.

Est-ce qu’un nombre croissant d’utilisations simultanées peut ralentir le bot ?

Quelle que soit l’heure de la journée, le délai de traitement est le même. Nous constatons que le bot est plus sollicité en soirée, mais les logs CloudWatch confirment qu’il n’y a pas de latence dans les réponses, quelque soit la charge. Les événements sportifs, football notamment, génèrent aussi beaucoup de demandes auprès du bot. C’est d’ailleurs l’Euro 2016 qui nous a amené à réfléchir à l’amélioration des capacités de compréhension du langage naturel.

Le choix du Serverless était-il évident après l’expérience avec Alexa ?

Le Serverless est partie intégrante de notre stack et de notre philosophie. Nous avons développé une skill Alexa avec Lambda, notre API de contenu est re-développée en Lambda, il était donc naturel d’utiliser Lambda pour développer le bot. Un appel ponctuel qui déclenche une fonction, c’est un cas d’usage typique de Lambda. C’est également moins coûteux que des instances EC2 avec du Node.js. Enfin, nous mutualisons certaines fonctions, et nous utilisons les mêmes connecteurs que sur l’API.

Le serverless, c’est l’avenir ?

L’offre autour de l’écosystème Serverless est de plus en plus large, et portée par les trois opérateurs majeurs de cloud public, il semble donc que ce soit une tendance de fond. AWS a annoncé Aurora Serverless lors du re:Invent, le message c’est de ne plus se préoccuper des serveurs mais uniquement du code, et AWS gère le reste. Le Serverless est de plus en plus intégré dans l'écosystème : lors de la création d’une skill Alexa, le formulaire propose de la relier avec une fonction Lambda. L’accès et la connexion aux technologies Serverless est facilité. Aujourd’hui le Serverless offre beaucoup de possibilités, avec un faible coût, aux players du Web, qu’ils fassent du transactionnel ou du broadcast. Mais cela suppose un changement de philosophie de travail, il faut avoir une vue “éclatée” de son développement, là où avant elle était packagée.

Suite aux annonces de re:Invent 2017, quels sont les sujets qui vous intéressent ?

Aurora Serverless, Lambda@Edge… en tant que média, nous utilisons beaucoup CloudFront, donc la possibilité d’avoir de l’intelligence au niveau du content delivery network est un vrai plus. Nous nous intéressons aussi au machine learning… 20bot est encore jeune, il apprend, et s’il n’a pas la bonne réponse aujourd’hui il l’aura peut-être dans deux semaines (l’apprentissage de 20bot se fait dans le respect de la vie privée, toutes les conversations sont anonymisées). Nous sommes en tous cas dans une dynamique d’IA, y compris pour nos journalistes. Nous travaillons actuellement sur une assistance à l’écriture (rubriquage, iconographie, etc.), en Serverless. L’idée n’est pas de remplacer les journalistes, mais de leur faire économiser des clics.

 

L'avenir sera serverless ! Que vous pratiquiez le serverless au quotidien, que vous soyez un expert du serverless ou simplement enthousiaste ou curieux du sujet, nous vous invitons à rejoindre la communauté et à participer à Serverlessconf Paris.

Serverlessconf aura lieu sur deux journées :

  • 14 Février - Ateliers techniques : une journée de workshops réalisée en partenariat avec Cloud Guru et les équipes D2SI
  • 15 Février - Conférences : une journée de keynotes et retours d'expérience

Serverlessconf Paris aura lieu à l'Espace Saint-Martin. Les places sont en nombre limité, alors inscrivez-vous dès maintenant pour assister à l'événement :