NARVAL, l'assistant personnel intelligent ou une application à la réalisation de la version française de la Linux Gazette

Nicolas CHAUVAT


Table of Contents

Gazo, une utilisation quotidienne
NARVAL
Et la suite ?
Sommes-nous seuls dans l'univers ?
Animaux du bout du monde
Conclusion

Abstract

Résumé

Narval est un Assistant Personnel Intelligent, distribué sous license GPL par Logilab. Il est utilisé comme base pour Gazo, un robot qui aide les volontaires qui traduisent la Linux Gazette en français en prenant en charge l'essentiel du travail de coordination de la traduction. Narval relève de l'intelligence artificielle et des agents intelligents; Il contribue à changer notre approche d'internet et des ordinateurs. Narval est l'acronyme de Network Assistant Reasoning with a Validating Agent Language.

Gazo, une utilisation quotidienne

.

Quand j'ai pris en charge la coordination de la traduction française de la Linux Gazette, je me suis rapidement trouvé confronté aux mêmes problèmes que le précédent coordinateur. La coordination, ça ne demande pas beaucoup de réflexion, mais ça demande rapidement beaucoup de temps : lire son courrier électronique pour recenser qui veut traduire, vérifier quels sont les articles restant à traduire, mettre à jour la page Web, fusionner tous les articles d'un même numéro... Ces tâches répétitives m'apparaissaient une perte de temps et d'énergie, tant pour moi que pour pour les autres intervenants, qui restaient bloqués quand je n'étais pas capable d'envoyer dans les temps une réponse type "Ok, tu prends" ou "cet article est déjà en cours de traduction". En d'autres termes, j'avais un problème qui me grattait ou me chatouillait, ça dépendait des jours..

Je vous entends déjà : "Il suffit d'écrire quelques scripts et de demander aux intervenants de remplir des formulaires HTML !". Je ne l'ai pas fait pour trois raisons. Tout d'abord, certains ne disposaient que du courrier électronique, et pas d'un accès au web. Ensuite, je ne voulais pas séparer la traduction de la Linux gazette du reste de la traduction du LDP, laquelle utilise une liste de diffusion[1]. Enfin, j'avais déjà une expérience de l'intelligence artificielle et des agents et je pensais que c'était le moment ou jamais d'appliquer concrètement quelques idées. J'ai baptisé l'agent Gazo, en référence à votre magazine préféré.

La première version de Gazo ne ressemblait pas du tout à Narval. C'était juste un script Python qui récupérait les courriers envoyés par procmail. Gazo recevait une copie de chacun de mes courriels et décidait s'ils concernait ou non la Linux Gazette en cherchant des mots-clef dans le sujet. Le cas échéant, il utilisait des expressions régulières pour extraire la demande de l'émetteur : envoi d'une traduction, envoi d'une relecture ou abandon de la traduction d'un article. Par exemple, pour offrir de traduire l'article F de la gazette 58, il suffisait d'écrire un courriel dont le champ sujet contenait "[lg] demande article 58 F". Lorsque Gazo comprenait le sujet, il enchaînait un certain nombre de tâches.

  • Quand quelqu'un demandait un article, Gazo vérifiait qu'il n'était pas déjà en charge de deux articles, et que cet article n'était pas déjà dans les mains d'un autre. Si tel n'était pas le cas, Gazo assignait l'article à cette personne, lui envoyait un courriel de confirmation, mettait à jour la page Web et prévenait le coordinateur (moi en l'occurence) que c'était fait.

  • Quand quelqu'un envoyait une traduction, Gazo vérifiait que cet article lui était bien attribué, rangeait la pièce jointe dans le répertoire adéquat (encours/traduits/) du serveur FTP, envoyait un courriel de remerciement au contributeur, désignait un relecteur volontaire parmi ceux qui avaient le moins d'articles en cours de relecture et lui adressait un courriel pour l'en informer, mettait à jour la page Web et avertissait le coordinateur (encore moi) de ce qu'il avait fait.

  • Quand quelqu'un envoyait une relecture, Gazo vérifiait que cet article lui était attribué, rangeait l'article relu dans le répertoire encours/relus/ du serveur FTP, envoyait un courriel de remerciement au relecteur, mettait à jour la page Web et informait le coordinateur (toujours moi).

  • Quand quelqu'un annonçait un abandon, Gazo vérifait, envoyait un courriel "merci quand même", rangeait si nécessaire l'article joint dans le répertoire encours/a-terminer/, mettait à jour la page Web et informait le coordinateur (devinez qui ?).

  • Chaque semaine, Gazo postait une liste des articles en attente de traduction, rappelait à ceux qui avaient une traduction en cours qu'elle n'était pas encore arrivée et que s'ils étaient débordés, ils pouvaient l'abandonner.

Comme vous le voyez, il n'y a là aucune surprise : écrire des courriels, ranger des fichiers dans les bons répertoires, assurer la synchronisation de l'ensemble. Et comme vous le savez aussi, en informatique "sans surprise" rime souvent avec "automatisable".

Ce premier script a fort bien fonctionné pendant plus d'un an, mais a vite montré ses limites, parce que décrire des séquences de tâches et tester tous les cas d'erreur possibles demandait d'écrire beaucoup de code. Encore un truc qui me grattait fort... mais ça m'a gratté plus longtemps que pour le premier script avant d'arriver à mes fins. Nous y voici : Mesdames et Messieurs, bienvenue dans le projet NARVAL.

NARVAL

Quand vous passez l'essentiel de votre temps devant votre ordinateur à travailler avec d'autres personnes sur plusieurs projets, à garder le contact avec vos amis, à essayer de rester au courant des nouveautés et à répondre au téléphone, il vous paraît vite évident que vous avez un réel besoin de quelqu'un ou de quelque chose à qui refiler un peu de votre boulot. Ce quelqu'un existe et s'appelle un secrétaire ou un assitant. Ce sont des "vrais gens", qui gagnent leur pain, dorment la nuit et dont on attend pas qu'ils sachent additionner deux nombres à dix chiffres en une nanoseconde. Ce quelque chose existe aussi. Il y en a plusieurs cachés au fin fond des labos d'intelligence artificielle, mais contrairement aux précédents, ils ne sont pas très fûtés. Ça ne fait rien, soyons optimistes et donnons leur toutefois de l'Assistant Personnel Intelligent.

Narval est l'un d'eux. Pour vous décharger des tâches répétitives, il emprunte aux techniques avancées, telles que les réseaux de Petri, les sytèmes à règles, la programmation par contrats, la planification, l'apprentissage automatique, la programmation objet et XML.

Narval exécute des recettes, qui sont des enchaînements d'actions liées entre elles par des transitions. Une action, c'est par exemple, charger une page Web, exécuter une requête sur une base de données, faire une transformation d'un document XML, envoyer un courriel ou plus généralement, tout ce que vous pouvez décrire en quelques lignes de code python. Des conditions peuvent être attachées aux transitions, ce qui permet d'en contrôler l'exécution à travers le graphe représentant la recette. Cela vous donne le vocabulaire de base pour contrôler l'exécution des différentes branches de votre recette et coordonner des tâches parallèles.

En utilisant une interface graphique nommée Horn (la corne du Narval ou plutot la dent), l'utilisateur peut créer de nouvelles recettes en quelques clics par assemblage de briques (actions présentes dans la bibliothèque ou autres recettes) et spécifier les conditions associées aux transitions qui lient les briques entre elles.

Dans Narval, chaque chose est décrite au format XML : les prototypes d'action, les éléments d'information, les recettes, etc. XML fournit un format de base pour exprimer la structure des données qui sont manipulées. Si vous avez déjà manipulé un Shell Unix, vous avez sûrement compris la puissance des tubes qui vous permettent de faire beaucoup de choses en faisant passer vos données à travers filtres et programmes. De même, Narval exécute des recettes en passant des fragments d'XML d'une action à une autre, à cela près, et c'est très important, qu'avec Narval, l'enchaînement d'exécutions traverse un graphe, et non pas une liste. À chaque étape, des éléments XML sont transformés et/ou créés. Narval garde la trace de tout ce qu'il a fait.

Dans Narval, les actions ont des prototypes complexes qui procèdent de la programmation par contrats. Un prototype spécifie des conditions que doivent respecter les éléments XML que les actions utilisent en entrée et produisent en sortie, la capacité de traiter une liste, le caractère optionnel de l'élément, etc. Pour chaque entrée et chaque sortie, c'est une liste d'expressions XPath qui définit le nom de la balise, la valeur des attributs, etc. Lorsqu'il exécute des actions, Narval utilise ces expressions pour détecter des erreurs et des échecs, et il abandonne la recette s'il ne trouve pas de moyen de poursuivre malgré tout. Cela conduit à un mécanisme de vérification permanent pendant l'exécution qui se révèle très utile et que les programmeurs Eiffel connaissent bien.

La nouvelle version de Gazo construite sur la base de Narval n'est qu'un ensemble de recettes. Ses fonctionnalités sont les mêmes que celles de la version antérieure, mais elles sont exprimées dans un langage graphique de haut niveau, sont plus faciles à modifier et à maintenir, et pourront bénéficier des autres capacités de Narval, tels que les modes dégradés en cas d'erreurs, l'apprentissage (ce traducteur met toujours beaucoup de temps, il est préférable de ne lui laisser qu'un seul article à la fois), etc. Un dessin vaut mieux que de longs discours, et je n'entrerai pas dans le détail du comportement de Gazo. Jetez un oeil sur la description ci-dessous et sur les deux copies d'écran, puis essayez de répondre aux questions suivantes : Qu'est-ce qui, de ces graphes ou de 1000 lignes de code python, est le plus clair ? Les rectangles avec les préfixe gazo correspondent à du code python, ceux avec le caractère souligné à des transformations XSL et les autres à des recettes. La première copie d'écran est la recette principale, la seconde est la recette "Demande d'article".

Quoi de réellement neuf dans tout ça ? On me dira que le problème de coordination décrit ci-dessus aurait pu être réglé par une simple application web et que l'insertion de commandes dans le champ sujet des courriels est même antérieure au premier logiciel de gestion de liste de diffusion. Les deux sont vrais, mais sont totalement hors-sujet : Narval est, d'une certain façon, un interpréteur pour un langage de haut niveau, qui doit sa simplicité et ses qualités à l'utilisation de prototype d'actions complexes, à la sélection dynamique des arguments, à l'utilisation de règles, à une importante bibliothèque d'actions, etc.

Narval n'est pas un logiciel applicatif, c'est un atelier logiciel pour créer votre assistant personnel en quelques clics.

Et la suite ?

L'ambition de Narval est d'être le meilleur assistant personnel intelligent du réseau, de se développer et de s'enrichir de fonctionnalités toujours plus utiles pour mériter réellement l'adjectif "intelligent"

Dans notre équipe de développeurs, c'est déjà Narval qui coordonne notre travail en groupe. Chacun de nous dispose de son propre Narval, qui l'assiste en supprimant les bannières des pages Web, en rapatriant les bandes-dessinées quotidiennes, en centralisant sur une page web les nouvelles provenant de différents sites Web, en vérifiant les agendas, rappelant les réunions, et en utilisant la commande et la synthèse vocale.

Comme pour tout langage de programmation, les applications de Narval sont sans limites. Nos projets se divisent en deux volets. Le premier est d'intégrer dans des librairies toutes les applications imaginables : l'utilisation d'un modem pour pouvoir "téléphoner maison" et dire à votre assistant ce qu'il doit faire, intégration de protocoles domotiques tel que X10 pour contrôler votre home sweet home, applications pour téléphone cellulaire et PDA, etc. Grâce à sa conception, de nouvelles actions peuvent aisement être ajoutées au prix de quelques lignes de code python. Le second volet consiste à améliorer le moteur de Narval, qui a été prévu pour ça, en y ajoutant des fonctions de planification, d'apprentissage et de coopération.

Planification. Une fois que vous avez un nombre suffisant de recettes, un ensemble d'actions de base et une description des relations existant entre les différents concepts, on peut commencer à aborder la planification. Vous donnez à votre assistant un objectif, tel que "propose moi un film pour ce soir" et il construit de lui-même une suite d'actions pour atteindre cet objectif (extraction des critiques de film d'un site Web consacré au cinéma, comparaison avec vos goûts personnels, recherche des horaires de séance et suggestion). Les prototypes d'actions seront particulièrement utiles pour la planification.

Apprentissage. Dans Narval, tout est représenté par des éléments XML. Chaque élément d'information a une structure. Chaque élément d'information est horodaté. Chaque élément d'information est traçable : quelle action l'a produit, quelle action l'a utilisé, dans quel but, etc. Si vous avez quelque expérience de l'apprentissage automatique, vous savez que c'est une bonne base sur laquelle il est possible de mettre en oeuvre de nombreux algorithmes. En utilisant des techniques d'apprentissage, votre Narval pourra comprendre que chaque vendredi, vous surfez sur des sites Web de cinéma, et vous proposer d'ajouter à votre journal du vendredi les titres des nouveautés du cinéma, ou commencer à rechercher des critiques de films.

Coopération. Faire que deux personnes ou deux assistants collaborent entre eux est souvent une affaire de protocole. Si vous voulez qu'ils collaborent de manière plus intelligente, chacun doit être capable de comprendre ce que l'autre est en train de faire. Disposer de recettes qui expriment explicitement l'ordre des actions et de toutes les autres caractéristiques mentionnées à propos de l'apprentissage est un réel atout pour aborder la question de la coopération.

Sommes-nous seuls dans l'univers ?

À notre connaissance, Narval est le seul assistant personnel intelligent distribué comme logiciel libre. Au moins trois sociétés ont des produits commerciaux que nous considérons apparentés, même s'ils ne courent pas tout à fait dans la même catégorie, puisqu'ils ne sont ni génériques, ni adaptables, ni extensibles.

Le premier est le logiciel inclus dans le magnétoscope Tivo. Il cherche les programmes TV pour vous, vous aide à programmer les enregistrements, et peut même vous suggérer un film à regarder en fonction de ceux que vous avez vu récemment.

Prody Parrot, de Mindmaker, a été livré pendant un temps avec les cartes Sound Blaster. Fonctionnant uniquement sous MS Windows, il peut vous aider à faire le tri dans vos courriels, vous rappeler vos rendez-vous, charger des pages web et en faire un sommaire, vous amuser en dialoguant avec vous comme si vous étiez chez votre psy préféré, tout cela en utilisant reconnaissance et synthèse vocales. Tout cela est bien, mais vous ne pourriez pas mettre en place un assistant comme Gazo avec ce logiciel.

Enfin, le dernier est une application Web nommée One Red Cube qui se comporte comme un centre personnel de communication, en redirigeant vos courriels et vos fax d'une machine à une autre. Rien d'un assistant, mais on retrouve la volonté d'intégration qui nous anime.

Il y a aussi trois projets de logiciel libre en cours .... Le projet GNU Bayonne, une plateforme d'intégration téléphonie-informatique, pourrait bien devenir un concurrent de One Red Cube. Le projet Mister House est un automate domestique disposant de très nombreuses fonctions. Pour peu qu'écrire un peu de code Perl et mettre les mains dans le cambouis ne vous effraient pas, il pourra vous chanter une chanson chaque fois que vous montez les escaliers de votre maison, vous faire jouer à un quizz pendant votre petit déjeuner et vous donner la météo du jour que vous lui avez demandée par téléphone. Enfin, le projet Piper construit un shell visuel qui vous permet de fédérer les ressources de différents machines en utilisant une interface graphique pour dessiner un diagramme de flux analogue aux tubes et aux flots de données d'Unix.

Animaux du bout du monde

Le Narval est un mammifère marin qui vit dans l'océan arctique. Le mâle a une dent qui pousse hors de sa gueule jusqu'à devenir une longue défense. Au Moyen-Âge et bien après, on a longtemps cru que la défense du Narval était une corne de licorne, ce qui prouvait par là même l'existence de cet animal fabuleux.

Notre prototype s'est d'abord appelé Al, en référence à l'ordinateur fou HAL 9000 de 2001, l'Odyssée de l'espace. Quand nous avons cherché un nom, nous avons voulu garder la syllabe Al, et nous sommes arrivé (enfin !) à Narval. Cela donne un chouette acronyme et une jolie mascotte (Linux a Tux le pingouin, nous, nous avons Ornicar le Narval ! ;-). Puisque le Narval est principalement connu pour sa défense, nous avons utilisé le mot Horn (corne en anglais) pour l'interface utilisateur, qui permet l'acronyme Human ORiented Narval interface, en faisant comme si la corne de la Licorne était bel et bien la dent du Narval.

Conclusion

J'espère que cet article vous a donné envie de tester Narval et d'en apprendre plus sur l'intelligence artificielle, les agents intelligents et leurs applications à la vie de tous les jours. N'hésitez pas à nous rejoindre sur nos listes de discussions pour discuter plus avant de ces sujets.

"Vous pouvez maintenant reprendre une activité normale", babassez bien !



[1] Comme le Linux Documentation Project lui-même, le projet Traduc est l'oeuvre de bénévoles. Les discussions et la coordination se font par l'intermédiaire d'une liste de diffusion.