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>  
<flow>
//Les balises des mots-clés ici
</flow> 
<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 <flow></flow>

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>  
<flow>
<ebandi>moi=Arrête de tout ramener à toi!
</flow> 
<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>  
<flow>
<ebandi>moi=Arrête de tout ramener à toi! <pona> Toujours toi ? <pona> Ah encore toi!
</flow> 
<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>  
<flow>
<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 ?
</flow> 
<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>  
<flow>
idiote=<silika>Quoi ? Moi ? Idiote ? 
</flow> 
<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 {heure a-b}
  
<banda>  
Salut! je suis Alice! <kata><kata> Votre professeur de Physique. Je peux répondre à toutes tes questions concernant la physique.   
</banda>  
<flow>
{heure 6-21}commande=<-kotisa(intro.php,resto)-> <suite:choice> 
{heure 21-24}commande=Cher(e)s client(e)s,
À l’occasion de Noël, nos services seront exceptionnellement indisponibles ce 25 décembre. Nous serons de retour le 26 décembre dès 8h30 pour mieux vous servir.
Merci pour votre compréhension et joyeuses fêtes ! {heure 0-6}commande=Désolé nous ne prenons plus des commandes à cette heure. </flow> <suka> (*)=Excusez-moi je n'ai pas compris. </suka>

(remplacer a et b par les intervalles de temps), permet de tester l’heure.

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>  
<flow>
(*)quelle(*)heure=Il est <-heure->
</flow> 
<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>  
<flow>
(*)quelle(*)date=Nous sommes le <-date->
</flow> 
<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>  
<flow>
(*) (*) (*)=<tag2>
</flow> 
<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>  
<flow>
<ebandi>mon école est (*)=<var id:ecole>Tu édudies à <var ecole> ?
</flow> 
<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>  
<flow>
<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>
...
...
</flow> 
    
  

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>  
<flow>
<var ecole == 0>mon ecole ?=Je ne connais pas ton ecole.
<var ecole != 0>mon ecole ?=Tu étudies à <var ecole> non ?
</flow> 
    
  

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.

Les variables prédéfinies


$kotisa


<server id="newton.php"> 
  $motuna=$kotisa; 
</server>

$uname : Nom whatsapp de l'utilisateur


<server id="newton.php"> 
  $var="Bonjour $uname !"; 
</server>

$to : Numéro whatsapp de l’utilisateur


<server id="newton.php"> 
  $var="Votre numéro whatsapp est $to !"; 
</server>

$phone_number_id : L’id du numéro de téléphone


<server id="newton.php"> 
  $var="Votre numéro whatsapp est $to !"; 
</server>

$link1 : Lien de l’image envoyée par l’utilisateur


<server id="newton.php"> 
  $var="Le lien de l'image est $link1 !"; 
</server>

client_order : Commande de l’utilisateur sur whatsapp. Il y a aussi business_name pour récupérer le nom du business où la commande a été passée, il y a total_price pour le prix total de la commande, il y a currency pour la devise de la monnaie.


<server id="newton.php"> 
  $var="Dans votre panier :
$client_order "; </server>


Les indispensables


<flow> 
getloc (*)=//récupérer les données de géolocalisation
getorder=<-kotisa(order.php,(*))->//récupérer les données d’une commande
menu=Dis-moi où tu te trouves ? <button>esika</button>  //Afficher le bouton de lieu 
//Boutons
hello=Hello tu vas bien ? <button>Oui</button> <button>Non</button> //Afficher les boutons
//Afficher le catalogue de produit
<suite:biloko>(*)=<catalogue>  //Afficher un catalogue // Nom du restaurant première lettre en Maj et le reste en min                
biloko=Veuillez choisir un restaurant <button>Big bite</button> <suite:biloko>
</flow>

Importer les modules


<server id="newton.php"> 
import sql;   // Importer la base des données
import vision;  // Importer la reconnaissance d'image
import imagegen;  // Importer la génération d'images
import tts;  // Importer la génération de la voix
</server>

Base des données: Ces balises permettent de créer des tables et de définir leurs colonnes avec leurs propriétés. Il est simple à utiliser et facilite la manipulation de la structure des bases de données.

Structure Générale: Cela commence par une balise <sql> pour délimiter le contenu lié à la définition des tables et colonnes. À l'intérieur de cette balise, on définit une ou plusieurs tables à l'aide de la balise <table>. Chaque table contient des colonnes définies avec la balise <colonne>.


<sql>
<table kombo="nom_de_la_table">
    <colonne kombo="nom_de_la_colonne" type="type_de_donnee" [propriété="valeur"] />
    ...
</table>
    ...
</sql>

Balises Disponibles: Conteneur principal pour définir les tables et colonnes. Toutes les tables doivent être incluses dans cette balise.


<sql>
 ...
</sql>

2. Balise <table> : Utilisée pour définir une table.
Attributs : kombo (obligatoire) : Nom de la table.


<table kombo="utilisateurs">
    ...
</table>

3. Balise <colonne>
Définit une colonne pour une table.
Attributs : kombo (obligatoire) : Nom de la colonne.
type (obligatoire) : Type de données (e.g., int, varchar, decimal, etc.).
taille (optionnel) : Taille maximale pour les types comme varchar ou decimal (e.g., 255 pour varchar, 10,2 pour decimal).
primary_key (optionnel) : Définit la colonne comme clé primaire (valeur : true).
auto_increment (optionnel) :Active l'auto-incrémentation pour cette colonne (valeur : true).
default (optionnel) : Définit une valeur par défaut.
unique (optionnel) : Définit la colonne comme unique (valeur : true).
foreign_key (optionnel) : Définit une clé étrangère en précisant la table et la colonne référencées (e.g., utilisateurs.id).


    <colonne kombo="id" type="int" primary_key="true" auto_increment="true" />
    <colonne kombo="email" type="varchar" taille="255" unique="true" />
    <colonne kombo="utilisateur_id" type="int" foreign_key="utilisateurs.id" />

Exemples Complets
1. Définition d'une Base de Données Simple


<sql>
    <table kombo="utilisateurs">
        <colonne kombo="id" type="int" primary_key="true" auto_increment="true" />
        <colonne kombo="nom" type="varchar" taille="100" />
        <colonne kombo="email" type="varchar" taille="255" unique="true" />
        <colonne kombo="date_creation" type="datetime" default="CURRENT_TIMESTAMP" />
    </table>

    <table kombo="commandes">
        <colonne kombo="id" type="int" primary_key="true" auto_increment="true" />
        <colonne kombo="utilisateur_id" type="int" foreign_key="utilisateurs.id" />
        <colonne kombo="montant" type="decimal" taille="10,2" />
        <colonne kombo="date_commande" type="datetime" default="CURRENT_TIMESTAMP" />
    </table>
</sql>

Règles et Contraintes
Nom des tables et colonnes : Le nom des tables (kombo) et colonnes doit être unique dans le fichier.
Clés primaires : Chaque table peut avoir une ou plusieurs colonnes définies comme clé primaire à l'aide de primary_key="true".
Clés étrangères : Les clés étrangères sont définies avec foreign_key et doivent référencer une table et une colonne existantes.
Types de données : Les types de données doivent être valides dans le SGBD (e.g., int, varchar, decimal, datetime).
Attributs optionnels : Si un attribut optionnel est omis, il ne sera pas appliqué (e.g., pas de valeur par défaut ou de contrainte unique).


Utilisation entre les balises <server>
On commence par importer la base des données avec import sql


<server id="test.php">
//importer la base des données
import sql;
</server>


La variable prédéfinie $db pour préparer la requête sql


<server id="test.php">

//toujours importer la base des données avant avec import

import sql;

//Toujours mettre le nom de la table entre {{nom_de_la_table}}

$itemidq = $db->prepare('INSERT INTO {{utilisateur}} (nom, email) VALUES (:nom, :email)');
$itemidq->bindValue(':nom', $nom, PDO::PARAM_STR);
$itemidq->bindValue(':email', $email, PDO::PARAM_STR);
$itemidq->execute();

</server>

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(newton.php,(*))->            
</suka>
      
<server id="newton.php"> 

$motuna=$kotisa; 
      
$mitindo="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: $motuna,                                             
    prompt: $mitindo,                              
    context: true                                          
}                                             
</model>  
                                                 
import tars; 
      
$reponsebot=$output;
      
</server>
  

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: $motuna,                                             
    prompt: $mitindo,                              
    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 <flow></flow>.

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