Simplifiez-vous l'apprentissage du code avec Ling ML, le langage de programmation pour créer des assistants virtuels géniaux.

Le nouveau standard de l'IA - Entraînez des modèles d'IA personnalisés avec Ling ML.

4 minute read

Soyez initiés à la robotique avec le nouveau langage de 2024: Ling ML. Un langage de programmation conçu pour les locuteurs natifs. Ling ML, une version plus évoluée de Ota Benga a été développé pour les personnes qui se sentent plus à l’aise en s’exprimant en leurs langues maternelles (Lingala, Swahili, Tshiluba, Kikongo) et qui veulent apprendre à coder.

Nous avons commencé par une mission. Créer un langage simple pour créer des agents conversationnels que tout le monde pourrait apprendre, interpréter ou étendre. Notre travail est de favoriser l'adoption de Ling ML en tant que norme ouverte pour les chatbots, de la même manière que le HTML est la norme pour le Web. Nous espérons qu’avec ce langage nous pourrons enseigner la programmation informatique à tous sans aucune barrière linguistique.

Plus de 500 enfants ont été formé avec Ling ML. Ils se sont servis du langage pour créer des assistants virtuels qui les aide dans leur parcours scolaire. Ling ML est un langage qui vous permet de créer de chatbots qui répondent à des actions préenregistrées que vous programmez vous-même ou, couplé à GPT 3.5, il vous permet d'entraîner vos modèles d'IA personnalisés de la manière la plus simple possible. Ling ML vous permet de débuter en programmation avec un langage conçu en votre langue maternelle pour vous introduire à la robotique.

Let's Go!

Ling ML est un langage de programmation qui permet de créer des chatbots simples basés sur des mots-clés et des chatbots plus avancés basés sur l'IA générative. Les deux types des bots recquierent deux types des balises: Les balises des mots-clés et les balises serveurs. Pour un bot simple conçu avec les balises des mots-clés, la structure générale est la suivante:

    
<banda>  
//Le premier message que le bot envoie lors du premier contact avec le bot   
</banda>  
<key>
//Les balises des mots-clés ici
</key> 
<suka>
//La réponse du bot quand il ne détecte rien.
</suka>
    

Pour un bot simple conçu avec les balises des mots-clés, l’écriture du code est divisée en deux parties, séparées par un signe égal « = ». Avant le signe égal, le morceau de phrase auquel votre chatbot doit réagir. Après le signe égal, la réponse que le chatbot doit donner. Par exemple « hello=Yo ! Tu vas bien ? » signifie que si le programme reçoit « bonjour », il répondra « Yo ! Tu vas bien ? ». Le tout, entre les balises <key></key>

Les balises

1. Les mots-clés

1.1 <ebandi> et <esuki>
Impose un début et une fin à la phrase.
    
<banda>  
Salut! je suis Alice! <kata><kata> Votre professeur de Physique. Je peux répondre à toutes tes questions concernant la physique.   
</banda>  
<key>
<ebandi>moi=Arrête de tout ramener à toi!
</key> 
<suka>
(*)=Excusez-moi je n'ai pas compris.
</suka>
    

Dans l'exemple ci-dessus, on a mis une "limite de côté". Pour que la phrase soit reconnue, il faut que l'utilisateur commence sa phrase par "moi".

Utilisateur : moi !
Chatbot : Arrête de tout ramener à toi !

Il ne faut pas que la phrase déborde sur le côté :

Utilisateur : quel émoi
(Phrase non reconnue) Utile pour détecter des débuts de phrases (par exemple "<ebandi>ne me parle pas" empêche la détection de "je ne me parle pas").

1.2 <pona>
  
<banda>  
Salut! je suis Alice! <kata><kata> Votre professeur de Physique. Je peux répondre à toutes tes questions concernant la physique.   
</banda>  
<key>
<ebandi>moi=Arrête de tout ramener à toi! <pona> Toujours toi ? <pona> Ah encore toi!
</key> 
<suka>
(*)=Excusez-moi je n'ai pas compris.
</suka>
  

Ici, le programme répondra à « Arrête de tout ramener à toi! » soit « Toujours toi ? », soit « Ah encore toi! », vous lui donnez la possibilité de choisir une réponse parmi les 3 proposées.

1.3 <kolanda:ligne>
    
<banda>  
Salut! je suis Alice! <kata><kata> Votre professeur de Physique. Je peux répondre à toutes tes questions concernant la physique.   
</banda>  
<key>
<ebandi>hello=Bonjour comment tu va ? <kolanda:5>
<kolanda:5>oui=très bien!<kata><kata>Content de ta bonne santé. <luka>
<kolanda:5>non=Ohw, il y a un problème ?
</key> 
<suka>
(*)=Excusez-moi je n'ai pas compris.
</suka>
    

La balise suite permet de créer une suite à la réponse donnée par votre chatbot en vous permettant de créer des conditions.
Si l’utilisateur dit une phrase comme « Hello », le bot répond « Bonjour ! Tu vas bien ? ». S’il répond « Oui », le bot répond « Très bien! Contente de ta bonne santé ! ».
Ici, « 5 » remplace « ligne » car il s’agit d’une suite créée à la 5ième ligne du code. Si elle était créée à la première ligne, « ligne » prendra la valeur de « 1 » et ainsi de suite.

1.4 La balise <luka>
Une fois la recherche faite et la réponse trouvée par le bot, la balise <luka> permet de poursuivre la recherche pour voir s’il peut trouver d’autres réponses correspondantes à la recherche.
1.5 La balise <leka>
La balise <leka> permet de sauter la phrase trouvée. Elle permet de baisser la probabilité d’une phrase d’être utilisée parmi plusieurs.
1.6 La balise <kata>
La balise <kata> permet de revenir à la ligne et de créer des paragraphes dans les réponses du bot.

1.7 <silika>
  
<banda>  
Salut! je suis Alice! <kata><kata> Votre professeur de Physique. Je peux répondre à toutes tes questions concernant la physique.   
</banda>  
<key>
idiote=<silika>Quoi ? Moi ? Idiote ? 
</key> 
<suka>
(*)=Excusez-moi je n'ai pas compris.
</suka>
  

Permet à votre bot d’exiger des excuses en cas d’insultes de la part de l’utilisateur avant de poursuivre la conversation.

1.8 <tango:X>
  
<banda>  
Salut! je suis Alice! <kata><kata> Votre professeur de Physique. Je peux répondre à toutes tes questions concernant la physique.   
</banda>  
<key>
<tango:pokua>bonjour=Bonsoir! Tu passes une bonne soirée ?
</key> 
<suka>
(*)=Excusez-moi je n'ai pas compris.
</suka>
  

(remplacer X par tongo, moyi ou pokua), permet de tester l’heure. Si le message est envoyé le soir, la condition est juste. Au cas contraire le bot ne détectera pas la ligne.

1.9 <-heure->
    
<banda>  
Salut! je suis Alice! <kata><kata> Votre professeur de Physique. Je peux répondre à toutes tes questions concernant la physique.   
</banda>  
<key>
#quelle#heure=Il est <-heure->
</key> 
<suka>
(*)=Excusez-moi je n'ai pas compris.
</suka>
    
  

Heure - Affiche l'heure. le symbole "#" indique des trous dans la phrase. La ligne sera déctecter par le bot si la phrase contient les mots "quelle" et "heure".

1.9 <-date->
    
<banda>  
Salut! je suis Alice! <kata><kata> Votre professeur de Physique. Je peux répondre à toutes tes questions concernant la physique.   
</banda>  
<key>
#quelle#date=Nous sommes le <-date->
</key> 
<suka>
(*)=Excusez-moi je n'ai pas compris.
</suka>
    
  

Heure - Affiche la date du jour. le symbole "#" indique des trous dans la phrase. La ligne sera déctecter par le bot si la phrase contient les mots "quelle" et "date".

1.10 <tagX>
    
<banda>  
Salut! je suis Alice! <kata><kata> Votre professeur de Physique. Je peux répondre à toutes tes questions concernant la physique.   
</banda>  
<key>
# # #=<tag2>
</key> 
<suka>
(*)=Excusez-moi je n'ai pas compris.
</suka>
    

(X représente le rang qu’occupe le tag (« # ») que tu veux afficher). Si j’envoie un message comme « papa maman oncles », le bot va afficher « maman », vu sa deuxième position dans le rang.

Les variables

    
<banda>  
Salut! je suis Alice! <kata><kata> Votre professeur de Physique. Je peux répondre à toutes tes questions concernant la physique.   
</banda>  
<key>
<ebandi>mon école est #=<var id:ecole>Tu édudies à <var ecole> ?
</key> 
<suka>
(*)=Excusez-moi je n'ai pas compris.
</suka>
    

Il s’agit de dire au programme de mémoriser une partie de la réponse de l’utilisateur comme le nom de son école, etc.

Créer une variable

Pour créer une variable, il faut déclarer la variable avec l’identifiant de la variable que vous avez choisi: <var id:ecole>

Afficher une variable

Pour afficher la variable vous pouvez introduire la balise « var » suivi de l’identifiant de la variable : <var ecole>

Les variables personnalisées

On créée des variables personnalisées pour insérer une valeur personnalisée à une variable différente de la réponse de l’utilisateur. La formule pour déclarer est la suivante:
<-bomba(nom de la variable,valeur personnalisée)->

    
<banda>  
Salut! je suis Alice! <kata><kata> Votre professeur de Physique. Je peux répondre à toutes tes questions concernant la physique.   
</banda>  
<key>
<ebandi>conjugaison=Veuillez entrer le verbe <kolanda:5>
<kolanda:5>#=<-bomba(verbe,<tag1>)->Quel mode ?<kata><kata>1. Infinitif<kata>2. Indicatif <kolanda:6>
<kolanda:6>1=<-bomba(mode,infinitive)->Quel temps ?<kata><kata>1. Infinitif présent< <kolanda:7>
<kolanda:6>=Veuillez taper sur 1 ou 2 s'il vous plaît <kolanda:6>
...
...
</key> 
    
  

Pour afficher une variable personnalisée : <-bimisa nom de la variable->
PS : Comme la balise « silika », la création d’une variable doit toujours se faire au début de la partie réponse de votre code.

Les conditions sur les variables

    
<banda>  
Salut! je suis Alice! <kata><kata> Votre professeur de Physique. Je peux répondre à toutes tes questions concernant la physique.   
</banda>  
<key>
<var ecole == 0>mon ecole ?=Je ne connais pas ton ecole.
<var ecole != 0>mon ecole ?=Tu étudies à <var ecole> non ?
</key> 
    
  

Il s’agit ici de fournir une réponse en fonction de l’existence ou non d’une variable. Si la variable « ecole » est nulle et que l’utilisateur demande après son école, le bot dit qu’il ne sait pas. Au cas contraire, le bot répond en affichant la variable.

Insérer les applications

Conjugaison <-app(conjugueapp,verbe&&mode&&temps)->
Traduction d'un text <-app(traductionapp,phrase&&langue)->
Correction d'un text <-app(correctionapp,phrase)->
Définir des mots <ebandi>définir #=<-app(defapp,<tag1>)->
Nature des mots <ebandi>nature du mot #=<-app(natureapp,<tag1>)->
Synonyme des mots <ebandi>synonyme #=<-app(synapp,<tag1>)->
Chercher sur wikipedia <ebandi>qui est #=<wikipedia>
Résoudre les équations <-app(mathapp,equation)->
Recettes de cuisine à partir des ingrédients <-app(cuisineapp,ingrédients)->
Symptom checker <-app(symptomeapp,symptômes)->
Premier secour <-app(secourapp,description)->
Aide à la prononciation <-app(prononceapp,mot&&langue)->
Interprète de rêve <-app(reveapp,description)->

Fonctions mathématiques simples

A noter que « # » prend la valeur de n’importe quel nombre que vous insérez. Par exemple dans la question « Racine carré de 49 », « # » prend donc la valeur de 49 et la réponse sera « 7 ».

Récupérer le numéro de téléphone et email d’un utilisateur

    
<banda>  
Salut! je suis Alice! <kata><kata> Votre professeur de Physique. Je peux répondre à toutes tes questions concernant la physique.   
</banda>  
<key>
<ebandi>okay=Merci! Pouvez-vous nous laisser votre numéro de téléphone pour vous notifier au besoin ?<kata><kata><kolanda:5>
<kolanda:5>#=<phone:<tag1>>Merci! Nous allons vous notifier en cas de besoin. A bientôt!
...
...
</key> 
    
  

Les balises « <phone:<tagX>> » et « <mail:<tagX>> » servent à vérifier et stocker un numéro de téléphone ou une adresse email. Il suffira ensuite de cliquer sur l’onglet « datas » dans le playground pour télécharger les données collectées.

Vérifier le format d'un numéro de téléphone

    
<banda>  
Salut! je suis Alice! <kata><kata> Votre professeur de Physique. Je peux répondre à toutes tes questions concernant la physique.   
</banda>  
<key>
<ebandi>okay=Merci! Pouvez-vous nous laisser votre numéro de téléphone pour vous notifier au besoin ?<kata><kata><kolanda:5>
<kolanda:5>#=<verifyphone:<tag1>>Merci! Nous allons vous notifier en cas de besoin. A bientôt!
...
...
</key> 
    
  

La balise « <verifyphone:<tagX>> » sert à vérifier le format d'un numéro de téléphone entré par un utilisateur.

Vérifier si la valeur entrée est un nombre

    
<banda>  
Salut! je suis Alice! <kata><kata> Votre professeur de Physique. Je peux répondre à toutes tes questions concernant la physique.   
</banda>  
<key>
<ebandi>okay=Merci! Combien voulez-vous en commander ?<kata><kata><kolanda:5>
<kolanda:5>#=<verifynumber:<tag1>>...
...
...
</key> 
    
  

La balise « <verifynumber:<tagX>> » sert à vérifier si la valeur entrée par un utilisateur est une valeur numérique.

2. Les balises serveurs

Les balises serveurs vous permettent de créer des modèles d'IA génératives et de les importer facilement dans votre code. Ces modèles vous permettent de communiquer efficacement avec l'IA et l'utiliser à son plein potentiel. Ling ML communique avec le PHP afin de faciliter des appels côtés serveurs

    
<suka>             
(*)=<-kotisa(mon_id/trans.php,(*))->            
</suka>
      
<php id="newton.php"> 
      
$question=$kotisa; 
      
$prompt="Tu es un programme qui répond aux questions sur la physique de Newton. Ton nom est Alicia IA. Réponds en moins de 300 caractères.";   
      
<model id="tars">                                             
{                                             
    llm: dyskuteai_genesys,                                             
    question: $question,                                             
    prompt: $prompt,                              
    context: true                                          
}                                             
</model>  
                                                 
import tars; 
      
$reponsebot=$output;
      
</php>
  

Dans l'exemple ci-dessus nous avons fait appel à la page newton.php avec les balises kotisa. On fait passer directement notre requête qui sera recupérer dans newton.php avec la variable $kotisa

Créer le modèle

    
<model id="tars">                                             
{                                             
    llm: dyskuteai_genesys,                                             
    question: $question,                                             
    prompt: $prompt,                              
    context: true                                          
}                                             
</model>  
                                                 
import tars; 
      
$reponsebot=$output;
  

Pour commencer, vous devez nommer votre modèle en utilisant l'attribut id, qui sert d'identifiant unique pour le modèle. Ensuite, vous définissez le modèle de langage (LLM) que le modèle utilisera. Deux options sont disponibles : dyskuteai_genesys, un modèle de langage standard, et dyskuteai_genesys_pro, offrant des capacités plus avancées. De plus, vous pouvez choisir si le LLM doit se rappeler des conversations précédentes en réglant l'attribut context sur true ou false.

Une fois que le modèle est défini, vous pouvez l'importer dans votre script en utilisant import id_du_modele, où id_du_modele est l'identifiant que vous avez précédemment défini. Cela vous permet d'interagir avec le modèle et de générer des réponses. La réponse du modèle est stockée dans la variable output, que vous pouvez ensuite assigner à $reponsebot pour l'afficher ou l'utiliser comme bon vous semble dans votre application. Ce processus simple vous permet de créer des modèles de langage personnalisés adaptés à vos besoins spécifiques.

Quelques recommandations à savoir

1. Lorsque vous ajoutez les balises des invites à un code avec des balises des mots-clés, le code ne doit pas contenir les balises <suka></suka> car les balises des invites donnent le plein pouvoir à l'IA.

2. Les mots-clés sont toutes entre les balises <key></key>.

3. La structure simple d'un code Ling ML avec des balises des mots-clés contient impérativement les balises <banda></banda>, <key></key> et <suka></suka>.