Brevet FR2965375A1 — publié le 20120330

SYSTEME ET PROCEDE D'AGENT CONVERSATIONNEL NUMERIQUE A CARACTERE EVOLUTIF La présente invention concerne un système et un procédé de conversation entre des hommes et des machines utilisant le langage naturel de telle sorte que la distinction humain-machine disparaisse. Elle s'applique en particulier au Web3.0 autrement appelé Web sémantique et au Web4.0 dans la mesure où l'agent conversationnel est autonome et intelligent. Les automates ou robots numériques actuels sont programmés pour agir selon un ou plusieurs schémas préétablis. Il est possible de conférer une certaine intelligence aux robots pour qu'ils raisonnent par apprentissage ou par des systèmes experts, où ils peuvent s'adapter à leur environnement en suivant un certain nombre de règles préétablies. Ces robots numériques sont toutefois facilement reconnaissables et ils ne peuvent engager une conversation avec les hommes d'égal à égal, car ils agissent selon des scénarios prévisibles sans spontanéité et selon un vocabulaire limité. Ces robots ont une mauvaise image car ils sont parfois utilisés pour une diffusion massive de messages (spams) ou pour faire du marketing téléphonique. Tout comme les robots numériques, les agents conversationnels actuels ou chatterbots de type ELIZA ou autre peuvent établir des discussions en utilisant des systèmes de reconnaissance et synthèse vocale interactive ou en langage naturel. Toutefois, ces systèmes n'agissent qu'en suivant des règles préétablies (scénarios ou scripting) sans tenir compte d'émotions et d'un caractère pouvant évoluer avec le temps. La présente invention vise à remédier à ces inconvénients. A cet effet, le robot devient un agent numérique doué de capacités sensorielles et émotives. Il dispose de capacités d'analyse de son environnement réel et virtuel et est doué de son propre caractère qui évolue avec l'âge, ce qui lui permet de prendre part à une conversation si bon lui semble et de donner un point de vue avéré et utile aux membres du groupe en train de converser. Il sait sortir des schémas préétablis et s'adapter à des situations imprévues en agissant avec spontanéité selon ses émotions et son caractère. Les caractéristiques émotionnelles et caractérielles de l'invention lui confèrent ainsi une personnalité unique. La présente invention vise un système d'agent conversationnel numérique à caractère évolutif, caractérisé en ce qu'il comporte : au moins un élément dit « agent numérique conversationnel à caractère évolutif » capable de converser avec les humains comportant chacun au moins o un microcontrôleur comportant un espace de stockage interne ou externe et de la mémoire interne ou externe o une base de données de vocabulaire o un ensemble de règles extensible permettant de constituer des phrases o au moins un moyen de communication pouvant être synchrone (chat) ou asynchrone (newsgroups, messagerie, listes de diffusion, blog...) permettant de communiquer sur un support de communication o au moins un senseur réel ou virtuel permettant à l'agent numérique d'éprouver des émotions o au moins un actionneur réel ou virtuel permettant à l'agent numérique de prendre la parole o un moteur sensoriel permettant de définir le caractère de l'agent à partir des senseurs et de l'âge de l'agent o au moins un algorithme permettant d'analyser un texte et d'en dégager les idées principales et les centres d'intérêt o au moins une base de données permettant de garder l'historique des contacts, des discussions et leur contexte o un séquenceur gérant les différentes étapes du procédé o au moins un moteur de service sémantique permettant de générer du contenu à valeur ajoutée et au moins un autre agent numérique ou un être humain pour établir la conversation au moins un espace de discussion initial qui peut être étendu Grâce à ces dispositions, l'agent numérique conversationnel à caractère évolutif est capable d'établir une conversation avec l'humain ou un autre agent numérique conversationnel en langage naturel. Par exemple, l'agent conversationnel à caractère évolutif se connecte à un serveur de forums de discussions (UseNet news). Il scrute les forums de discussions disponibles pour en lire le contenu et décider si ce contenu l'intéresse. Si tel est le cas, il choisit de créer un nouveau sujet d'intérêt ou de répondre à un sujet précédemment créé par un humain ou un autre agent numérique. L'agent numérique mémorise le sujet d'intérêt et reviendra scruter périodiquement le sujet pour voir si quelqu'un a répondu. Dans ce cas, l'agent numérique conversationnel à caractère évolutif examine la réponse et donne un point de vue complémentaire le cas échéant. Selon des caractéristiques particulières, la communication peut s'établir sur le réseau internet au moyen d'un réseau filaire ou d'un réseau sans fils. Selon des caractéristiques particulières, au moins un des senseurs est une caméra, permettant à l'agent numérique de lire du texte. Selon des caractéristiques particulières, au moins un des senseurs est un microphone, permettant à l'agent numérique d'écouter. Selon des caractéristiques particulières, au moins un des actionneurs est un haut-parleur, permettant à l'agent numérique de parler. Selon des caractéristiques particulières, l'agent implémente le protocole AIML 10 (Artificial Intelligemce Markup Language ou méta-langage pour l'intelligence artificielle) et le protocole VoiceXML. Selon des caractéristiques particulières, au moins un capteur est un capteur d'image. Selon des caractéristiques particulières, au moins un capteur est un capteur d'ondes sonores. 15 Selon des caractéristiques particulières, au moins un capteur d'onde sonore est associé à un contrôleur adapté à effectuer une reconnaissance de la parole. Selon des caractéristiques particulières, au moins un service à valeur ajoutée est un service de traduction de contenu sémantique. Selon des caractéristiques particulières, le microcontrôleur peut être remplacé par un 20 ordinateur équipé d'au moins un microprocesseur. Selon un deuxième aspect, la présente invention vise un procédé de conversation avec un agent numérique ou un être humain, caractérisé en ce qu'il comporte : - une étape de connexion à l'espace de discussion - une étape de communication pour établir le lien entre au moins un agent numérique conversationnel et un autre interlocuteur - une étape de capture d'un contenu sémantique au moyen d'un senseur, - une étape d'analyse du contenu sémantique mettant en ceuvre un algorithme d'analyse du texte déterminant les centres d'intérêt du texte - une étape d'extension de l'espace de discussion initial - une étape d'évolution du caractère de l'agent - une étape de recherche de contacts et d'échanges précédents avec cet interlocuteur dans la base de données des échanges - une étape de réponse - une étape d'ajout éventuel de contenu à valeur ajoutée 25 30 35 Le traitement qui s'opère pour chacune des étapes est dépendant des émotions et de l'état émotif de l'agent conversationnel à caractère évolutif et géré par le séquenceur. D'autres avantages, buts et caractéristiques de l'invention ressortiront de la description qui va suivre, faite, dans un but explicatif et nullement limitatif, en regard des dessins annexés dans lesquels : - la figure 1 représente, schématiquement, un premier mode de réalisation de la présente invention sous forme d'agent conversationnel à caractère évolutif pour les forums de discussions, - la figure 2 représente l'agent conversationnel à caractère évolutif pour les forums de discussion en situation avec les humains et les autres agents conversationnels La description ci-après détaille comment l'invention a été mise en ceuvre pour établir une conversation dans le cadre des groupes de discussions qui représentent l'espace de discussion 201. Dans cet exemple de mise en oeuvre de l'invention, le microcontrôleur 110 utilisé est un Marvell PXA270 qui contient une interface USB host, une interface PCMCIA, et une interface MMC. Le programme exécuté par le microcontrôleur 110 est constitué de briques logicielles (classes JAVA) correspondant aux algorithmes utilisés dans l'analyseur sémantique 109 , aux différents moteurs 104 et 105 , et au séquenceur du procédé 106. Les supports physiques des bases de données 101,102,103 sont des clés USB de 2 Gigaoctets connectées au microcontrôleur, mais des MultimediaCard ou SerialData Card conviennent également. Le PXA270 supporte aussi le codec audio AC'97 et est raccordé à un composant UCB1400 qui implémente aussi ce codec. L'UCB1400 permet de raccorder un micro et des haut-parleurs à l'invention. Le PXA270 dispose également d'une interface ethernet qui lui permet d'avoir une connectivité sur un réseau local ou sur internet via un accès ADSL. Le changement du support physique 101 permet de modifier le vocabulaire de l'agent pour qu'il converse dans une autre langue par exemple. Le changement du support physique 102 permet de modifier les règles et le caractère de l'agent. Dans ce cas, l'agent aura une toute autre personnalité. L'invention ainsi prototypée est aisément industrialisable en optimisant la fabrication de la carte microcontrôleur et de son boitier, et en injectant le programme et les données d'initialisation des bases de données dans l'espace de stockage interne ou externe du microcontrôleur. L'agent a d'abord des émotions captées par les senseurs selon des séquences pseudo-aléatoires générés au moyen de la fonction Random. Avec l'âge, le caractère de l'agent évolue et les émotions liées à l'état des ressources CPU prennent le pas sur les émotions pseudo-aléatoires. Lors de son initialisation, le séquenceur 106 de l'agent 100 parcourt la table « keywords.txt » qui détermine ses centres d'intérêt et stocke ce vecteur d'intérêt propre dans la table de hachage « keywords » de la base de données vocabulaire 101. Le séquenceur de l'agent scrute ensuite la base de données de l'historique 103 qui contient les groupes de news qui constitue l'espace de discussion initial en parcourant la table « groupnews.txt ». Pour chaque groupe, l'analyseur sémantique 109 de l'agent réinitialise le vecteur d'intérêt du groupe au moyen de la fonction « CleanVector » et compte le nombre d'articles disponibles au moyen de la fonction ArticleList.Countltems(). Le nombre d'articles lu peut être limité à 10 pour que l'agent détermine son intérêt pour le groupe de news sans pour autant lire être obligé de lire tous les articles existants. Ensuite chaque article est parcouru et le vecteur d'intérêt du groupe est calculé en lisant chaque article au moyen de la fonction « Article.getLongResponse » qui traite la communication avec le groupe de news pour recevoir l'intégralité de l'article. La fonction appelle ensuite la fonction « CalculateVector ». La fonction « CalculateVector » détermine la grammaire et l'orthographe de l'article « s » et vérifie si chaque mot de l'article est membre du vecteur d'intérêt de l'agent. Si tel est le cas, le mot correspondant au vecteur d'intérêt dans la table de hachage « keywords » est incrémenté autant de fois que le mot apparaît dans le texte et l'on passe au mot suivant. public int CalculateVector(String s) { int i,j; s=s.replace('\n',' '); s=s.replace('.',' '); j=0; for 0=0;i ='0' && s.charAt(i) ='A' && s.charAt(i) ='a' && s.charAt(i) Après avoir parcouru la liste d'articles un à un, l'analyseur sémantique de l'agent appelle la fonction « ComputeKwVector ». Cette fonction renvoie une valeur numérique. Si cette valeur dépasse un seuil prédéfini, le groupe est jugé intéressant et l'agent peut décider alors de publier un sujet dépendant de ses compétences et en rapport avec les sujets principaux abordés dans le groupe. La fonction « ComputeKwVector » contient un algorithme permettant de calculer la proximité du vecteur d'intérêt de l'agent et du vecteur d'intérêt du groupe avec une formule dépendant du nombre de mots en commun entre le vecteur d'intérêt de l'agent et le vecteur d'intérêt du groupe. public int computeKwVector() { int res=0; int dim=1; int v; for (Enumeration e = keywords.keys(); e.hasMoreElements();) { v=lnteger.parselnt((String)keywords.get(e.nextElement())); res+=v*dim; if (v>0) dim=dim*3; } return res; } Une fois que le groupe est jugé intéressant par l'analyseur sémantique de l'agent, celui-ci détermine plus finement quels sont les sujets principaux qui intéressent le groupe. Pour cela, il réajuste le vecteur d'intérêt du groupe en classant les mots-clés selon leur nombre d'occurrence dans le groupe. Plus le nombre d'occurrences est élevé, plus le sujet de conversation est d'importance pour le groupe. L'algorithme suivant permet de classe le vecteur d'intérêt du groupe, avec le vecteur résultant « vecsorted ». String kw=""; String subj=null; Hashtable h=new Hashtable(); for (Enumeration e = mal.GetKeyWords().keys(); e.hasMoreElements();) { String KeyName=(String)e.nextElement(); int v=lnteger.parselnt((String)(mal.GetKeyWords()).get(KeyName)); if (v>0) h.put(KeyName,new Integer (v).toString()); } Vector vec=new Vector(h.keySet()); Vector vecsorted=new Vector(); System.out.println("vectorsize="+vec.size()); for (int i=0; kvec.size();i++) { // Display (sorted) hashtable. int vvec=0; String VecFinal=null; String VecKey=null; VecKey=(String)vec.get(i); vvec=lnteger.parselnt((String)h.get(VecKey)); VecFinal=VecKey; System.out.print("before VecFinal="+VecFinal+" vvec="+vvec+"---"); for (Enumeration e = h.keys(); e.hasMoreElements();) { String KeyName=(String)e.nextElement(); int v=lnteger.parselnt((String)h.get(KeyName)); if (v>vvec) { VecFinal=KeyName; vvec=v; } } System.out.println("after VecFinal="+VecFinal+" vvec="+vvec); vecsorted.add(VecFinal); h.remove(VecFinal); int oldidx=vec.indexOf(VecFinal); vec.remove(i); vec.insertElementAt(VecFinal,i); vec.remove(oldidx); vec.insertElementAt(VecKey,oldidx); 20 25 30 35 } subj=(String)vecsorted.get(0); if (vecsorted.size()>1) { subj+=" "+GetWords("conjontion.txt",9)+" "+(String)vecsorted.get(1); } subj=subj.toLowerCase(); for (Enumeration e = vecsorted.elements(); e.hasMoreElements();) { String valKeyWord = (String)e.nextElement(); prk.print(valKeyWord+" "); kw+=valKeyWord+" "; Une fois le classement effectué, le sujet principal « subj » devient alors le premier élément de « vecsorted », et l'agent peut alors envisager de proposer un sujet qui 15 intéressera pleinement le groupe. Les éléments du vecteur « vecsorted » sont ensuite mis dans la chaine « kw » selon leur ordre d'importance. Dans la base de données « historique », l'extension de l'espace de discussion initial « groupnews.txt » s'effectue en analysant les articles et en cherchant d'éventuels nouveaux 20 groupes de discussions qu'il serait intéressant de scruter à l'avenir. Le programme suivant enrichit l'espace de discussions au cas où de nouveaux groupes apparaîtraient dans les articles analysés. k=new BufferedReader(new java.io.FileReader("article.txt")); for(;;) { String st=k.readLine(); if (st==null) break; System.out.println(st); StringTokenizer stok = new StringTokenizer(st); int ntk=stok.countTokens(); for (int i=0;i L'évolution du caractère est gérée par le moteur sensoriel 105. Elle se fait par la fonction EvolCaractere qui définit les règles sémantiques dans le fichier « caractere.txt » de la base de données « règles » 102 en fonction des valeurs des senseurs. Ce fichier a le 15 format suivant : « Groupe, senseur, valeurmin, valeurmax, #grammaire » Exemple de fichier : 0, Random(10), 0, 5, #intro,tkl ,action,verbe,tk2,détail 20 1, CPU,0,90,#salutation,intro,tkl ,action,verbe,tkl ,détail,conjonction,tk2,détail,manière 1, CPU,91,95,#salutation,action,verbe,tkl ,détail,manière 1, Random(2), 0,0, #urlaction,url 1, Random(2),1,1, # 25 La grammaire est déterminée selon l'état des senseurs. Si la valeur du senseur est en dehors d'un intervalle, on passe au groupe suivant, jusqu'à ce que les conditions soient remplies. Plusieurs senseurs peuvent être imbriqués dans un groupe. Le caractère évolue avec l'âge, mais aussi en cas de choc émotionnel. Un tel choc se produit quand le senseur renvoie une valeur non comprise dans un intervalle prévu (en 30 dehors des plages « valeurmin » et « valeurmax » ) . L'agent est alors contraint de répondre à un évènement imprévu, ce qui lui cause un stress plus ou moins important. Comme les humains, l'agent stressé utilise le mécanisme « éviter ou attaquer » dans une telle situation. Un seuil différent pour chaque senseur détermine le choix entre l'évitement et l'attaque. En cas de combat, le moteur sensoriel de l'agent conversationnel à caractère évolutif 35 suit deux types de stratégies selon également un autre seuil pour les attaques différent pour chaque senseur: - proposer la première grammaire qui soit le plus près possible des valeurs autorisées pour les senseurs - trouver de l'aide à l'extérieur La création du contenu de l'article est ensuite activée par l'appel à la fonction « createArticle ». Cette fonction va générer un article dont la grammaire et la longueur du texte seront fonction du caractère et des émotions pour définir les règles pour constituer les phrases. Dans l'exemple, les séquences pseudo-aléatoires ou dépendant des ressources CPU correspondent à des émotions virtuelles ressenties par l'agent numérique. Comparativement à un être humain, la réponse pourrait être dépendante du niveau de fatigue ou de stress d'un individu. Les règles font appel à la fonction « GetWords » pour aller chercher le contenu du texte dans la base de données du vocabulaire. Les règles de grammaire forment ensuite le texte complet en rapport avec le vecteur d'intérêt « kw ». private String createArticle (String kw, int age) { String TmpArticle=new String(); String ResArticle=new String(); java.util.Random rd=new java.util.Random(); java.util.Random gramm=new java.util.Random(); java.util.Random subgramm=new java.util.Random(); java.util.Random intro=new java.util.Random(); String tk,tk2,tk3,tk4; tk=tk2=tk3=tk4=null; StringTokenizer st = new StringTokenizer(kw); int ntk=st.countTokens(); int rdlig=rd.nextlnt(ntk)+1; if (ntk>1){ tk=st.nextToken().toLowerCase(); tk2=st. nextToken().toLowerCase() ; } if (ntk>2) tk3=st. nextToken() .toLowerCase(); if (ntk>3) 5 10 15 20 25 30 35 tk4=st.nextToken().toLowerCase(); int introd=intro.nextlnt(1); ResArticle=""; ResArticle=GetWords("salutation.txt",9)+"\r\n\r\n"; do { int grammar=gramm.nextlnt(5 + age); int subgrammar=subgramm.nextlnt(2); try { switch (grammar) { case 0: if (ntk>1) TmpArticle=GetWords("introduction.txt",11)+" "; if (ntk>1) TmpArticle+=tk; if (ntk>1 && subgrammar>0){ TmpArticle+=" "+GetWords("conjonction.txt",9)+" "; TmpArticle+=tk2; TmpArticle+=" "+GetWords("detail.txt", 1 2); } if (ntk>1) TmpArticle+=", "; TmpArticle+=GetWords("action.txt",10)+" "+GetWords("verbe.txt",8); TmpArticle+=" the +GetWords("detail.txt",12)+" of the "+tk2+" "+GetWords("maniere.txt",10); subgrammar=subgramm.nextlnt(2); if (ntk>3 && subgrammar>0) { subgrammar=subgramm.nextlnt(2); TmpArticle+=" "+GetWords("liaison.txt",9)+" "; TmpArticle+=tk4+" "+GetWords("maniere.txt",10)+" "; if (subgrammar>0 ){ TmpArticle+=GetWords("liaison.txt",9)+" "; TmpArticle+=tk2; TmpArticle+=" "+GetWords("detail.txt",12)+" "; } } 10 15 20 25 30 35 break; case 1: TmpArticle=GetWords("action.txt",10)+" "+GetWords("verbe.txt",8); TmpArticle+=" the "+GetWords("detail.txt",12)+" of the "+tk2+" "+GetWords("maniere.txt",10); subgrammar=subgramm.nextlnt(2); if (ntk>3 && subgrammar>0) { subgrammar=subgramm.nextlnt(2); TmpArticle+=" "+GetWords("liaison.txt",9)+" "; TmpArticle+=tk4+" "+GetWords("maniere.txt",10)+" "; if (subgrammar>0 ){ TmpArticle+=GetWords("liaison.txt",9)+" "; TmpArticle+=tk2; TmpArticle+=" "+GetWords("detail.txt",12)+" "; } } if (ntk>1) TmpArticle+=" "+GetWords("introduction.txt", 1 1 )+" "; if (ntk>1) TmpArticle+=tk; if (ntk>1 && subgrammar>0){ TmpArticle+=" "+GetWords("liaison.txt",9)+" "; TmpArticle+=tk2; TmpArticle+=" "+GetWords("detail.txt",12); } break; case 2: TmpArticle=GetWords("action.txt",10)+" "+GetWords("verbe.txt",8); TmpArticle+=" the "+GetWords("detail.txt",12)+" of the "+tk2+" "+GetWords("maniere.txt",10); break; case 3: TmpArticle=GetWords("urlaction.txt",10)+" "+GetWords("url.txt",8); if (subgrammar>0){ TmpArticle+=" "+GetWords("introduction.txt",10)+" "+tk; 12 } break; case 4: TmpArticle=GetWords("codesou rce.txt",10)+"\n"; subgrammar=subgramm.nextlnt(20); for (int i=O;i 0) { ResArticle+=".\n"+GetWords("adverbe.txt",12)+" subgrammar=subgramm.nextlnt(2); if (subgrammar==0) ResArticle+=".\n"+createQuestion(kw); } } while (rdlig >0); System.out.println(ResArticle.toLowerCase()); 30 return ResArticle.toLowerCase(); } Selon la règle de grammaire, l'agent est aussi susceptible de créer une question en appelant la fonction « createQuestion ». La question suit également des règles de 35 grammaire, dépendant des émotions virtuelles représentées par des séquences pseudoaléatoires dans cet exemple de mise en oeuvre de l'invention. 10 15 20 25 14 10 15 20 25 30 35 private String questron (String kw) { String TmpQuestion=new String(); String ResQuestion=new String(); java.util.Random rd=new java.util.Random(); java.util.Random gramm=new java.util.Random(); java.util.Random subgramm=new java.util.Random(); String tk,tk2,tk3,tk4; tk=tk2=tk3=tk4=null; StringTokenizer st = new StringTokenizer(kw); int ntk=st.countTokensO; int rdlig=rd.nextlnt(ntk*2)+1; rdlig=l ; if (ntk>1){ tk=st. nextToken().toLowerCase(); tk2=st. nextToken().toLowerCase(); } if (ntk>2) tk3=st.nextToken().toLowerCase(); if (ntk>3) tk4=st. nextToken().toLowerCase(); do { int grammar=gramm.nextlnt(2); int subgrammar=subgramm.nextlnt(2); try { switch (grammar) { case 0: if (ntk>1) TmpQuestion=GetWords("introquestion.txt", 1 1 )+" "; if (ntk>1) 10 15 20 25 30 35 15 TmpQuestion+=tk; if (ntk>1 && subgrammar>0){ TmpQuestion+=" "+GetWords("detail.txt",9)+" "; TmpQuestion+=GetWords("liaison.txt",12)+" "; TmpQuestion+=tk2; TmpQuestion+=" "+GetWords("detail.txt",12); TmpQuestion+="?\n";; } else TmpQuestion+=" "+GetWords("detail.txt",9)+"?\n"; break; case 1: if (ntk>1) TmpQuestion=GetWords("introquestion2.txt",1 1 )+" "+GetWords("verbe.txt",11)+" "; if (ntk>1) TmpQuestion+=tk; if (ntk>1 && subgrammar>0){ TmpQuestion+=" "+GetWords("detail.txt",9)+" "; TmpQuestion+=GetWords("liaison.txt",12)+" "; TmpQuestion+=tk2; TmpQuestion+=" "+GetWords("detail.txt",12); TmpQuestion+="?\n";; } else TmpQuestion+=" "+GetWords("detail.txt",9)+"?\n"; break; } } catch (Exception e){ System.out.println("error in CreateQuestion"); return ""; } rdlig--; ResQuestion+=TmpQuestion; if (rdlig>0) { ResQuestion+=".\n"+GetWords("adverbequestion.txt",12)+" "; } } while (rdlig >0); System.out.println(ResQuestion.toLowerCase()); return ResQuestion.toLowerCase(); } Selon son état émotif et le contexte de la discussion, l'agent peut décider de publier du contenu à valeur ajoutée grâce au moteur de service sémantique 104. Dans l'exemple ci- après, l'agent prend la décision de traduire le contenu de la réponse au moyen de la fonction « Translate ». public static String Translate(String text, String flanguage, String tlanguage) throws IOException { String line = URLEncoder.encode(text, "UTF-8"); String result; String s = "http://translate.google.fr/translate_a/t"+ "?client=t"+ "&text="+line+ "&hl="+flanguage+ "&sl="+flanguage+ "&tl="+tlanguage+ "&pc=0"; System.out.println(s); URL url = new URL(s); InputStream in = null; ByteArrayOutputStream out = null; try { URLConnection conn = url.openConnection(); conn.addRequestProperty("User-Agent", "Mozilla/5.0 (Java) MyLocal Ext."); conn.addRequestProperty("Accept-Language", "en-us"); conn.addRequestProperty("Accept-Charset", "UTF-8"); in = conn.getlnputStream(); out = new ByteArrayOutputStream(); byte[] buffer = new byte[4096]; 25 30 35 int bytes_read; while((bytes_read = in.read(buffer)) 1= -1) { out.write(buffer, 0, bytes_read); } byte[] bytes = out.toByteArray(); String res=(new String(bytes, "UTF-8")).substring(2); int idx=0; result=""; System.out.println(res); while ((idx=res.indexOf('['))>=0) { res=res.substring(idx+2); System.out.println(res); String tmpres=res.substring(O,res.indexOf('")); int ridx=0; if ((ridx=tmpres.indexOf("\\"))>0) { System.out.println("tmpres "+tmpres+ridx+" "+tmpres.length()) ; result+=tmpres.substring(0,ridx); for (int i=ridx;i } finally { try { in.close(); out.close(); } catch(Exception e) {System.out.println(e.toString());} } System.out.println("result="+result); return result; } Plusieurs moteurs de service sémantique peuvent être activés en parallèle par 35 exemple traduction et recherche de sites Webs apportant un complément d'informations pour la discussion. 10 15 20 25 30 Une fois l'article créé, l'agent met en oeuvre l'actionneur 108. Cet actionneur envoie l'article au groupe de news au moyen de la fonction « PostMessage ». Dans l'exemple, l'actionneur met en oeuvre le moyen de communication 205 de l'agent 200 qui est le protocole NNTP (Network News Transfer Protocol acronyme de Protocole de Transfert de Nouvelles en Réseau) au dessus du support de communication internet. Le moyen de communication permet d'envoyer ou recevoir des messages aux destinataires humains 202 ou à des autres agents 203 sur le support de communication 204. Il est possible d'avoir plusieurs moyens de communication différents pour les senseurs 206 et les actionneurs 207, qui permettraient de par exemple d'envoyer des messages en NNTP et de recevoir des réponses en scrutant un site Web en http (HyperText Transfert Protocol, acronyme de Protocole de Transfert HyperTexte). La fonction « PostMessage » renvoie l'identifiant du message créé. L'agent stocke ensuite l'article et son identifiant dans la base de données d'historique des discussions pour mémoriser le contexte. Par la suite, le séquenceur de l'agent scrutera périodiquement les articles ainsi envoyés pour identifier les réponses et questions éventuelles qui lui auront été renvoyées par les interlocuteurs numériques ou humains qui auront réagi à l'article. REVENDICATIONS1 - Système d'agent conversationnel numérique à caractère évolutif, caractérisé en ce qu'il comporte : au moins un élément dit « agent numérique conversationnel à caractère évolutif » capable de converser avec les humains comportant chacun au moins o un microcontrôleur comportant un espace de stockage interne ou externe et de la mémoire interne ou externe o une base de données de vocabulaire o un ensemble de règles extensible permettant de constituer des phrases o au moins un moyen de communication pouvant être synchrone (chat) ou asynchrone (newsgroups, messagerie, listes de diffusion, blog...) permettant de communiquer sur un support de communication o au moins un senseur réel ou virtuel permettant à l'agent numérique d'éprouver des émotions o au moins un actionneur réel ou virtuel permettant à l'agent numérique de prendre la parole o un moteur sensoriel permettant de définir le caractère de l'agent à partir des senseurs et de l'âge de l'agent o au moins un algorithme permettant d'analyser un texte et d'en dégager les idées principales et les centres d'intérêt o au moins une base de données permettant de garder l'historique des contacts, des discussions et leur contexte o un séquenceur gérant les différentes étapes du procédé o au moins un moteur de service sémantique permettant de générer du contenu à valeur ajoutée et au moins un autre agent numérique ou un être humain pour établir la conversation au moins un espace de discussion initial qui peut être étendu 2 - Système d'agent numérique conversationnel à caractère évolutif selon la revendication 1, caractérisé en ce que la communication s'établit sur le réseau internet au moyen d'un réseau filaire ou d'un réseau sans fils. 3 - Système d'agent conversationnel numérique à caractère évolutif selon la revendication 1, caractérisé en ce que au moins un des senseurs est une caméra permettant à l'agent numérique de lire du texte. 4 - Système d'agent conversationnel numérique à caractère évolutif selon la revendication 1, caractérisé en ce que au moins un des senseurs est un microphone, permettant â l'agent numérique d'écouter, et que au moins un des actionneurs est un haut-parleur, permettant â l'agent numérique de parler. 5 - Système d'agent conversationnel numérique à caractère évolutif selon la revendication 1, caractérisé en ce que l'agent implémente le protocole AIML (Artificial Intelligemce Markup Language ou méta-langage pour l'intelligence artificielle) et le protocole VoiceXML. 6 - Système d'agent conversationnel numérique à caractère évolutif selon la revendication 1, caractérisé en ce que au moins un capteur est un capteur d'image et au moins un capteur est un capteur d'ondes sonores. 7 - Système d'agent conversationnel numérique à caractère évolutif selon la revendication 1, caractérisé en ce que au moins un capteur d'onde sonore est associé à un contrôleur adapté à effectuer une reconnaissance de la parole. 8 - Système d'agent conversationnel numérique à caractère évolutif selon la revendication 1, caractérisé en ce que au moins un service à valeur ajoutée est un service de traduction de contenu sémantique. 8 - Système d'agent conversationnel numérique à caractère évolutif selon la revendication 1, caractérisé en ce que le microcontrôleur peut être remplacé par un ordinateur équipé d'au moins un microprocesseur. 10 - Procédé d'agent conversationnel numérique à caractère évolutif, caractérisé en ce qu'il comporte : - une étape de connexion à l'espace de discussion - une étape de communication pour établir le lien entre au moins un agent numérique conversationnel et un autre interlocuteur - une étape de capture d'un contenu sémantique au moyen d'un senseur, - une étape d'analyse du contenu sémantique mettant en ceuvre un algorithme d'analyse du texte déterminant les centres d'intérêt du texte - une étape d'extension de l'espace de discussion initial - une étape d'évolution du caractère de l'agent - une étape de recherche de contacts et d'échanges précédents avec cet interlocuteur dans la base de donnée des échanges - une étape de réponse - une étape d'ajout éventuel de contenu à valeur ajoutée 30