IA générative : quand les données parlent votre langue

Des données fraîches et à jour, les doigts dans le nez 👃

Quentin Collette
Lior Agency
7 min readNov 27, 2023

--

L’IA est pavée de bonnes intentions

Dans le premier article de cette série, nous mettions en oeuvre les dernières fonctionnalités de chatGPT pour analyser et interpréter aisément des données ⬇️

🗣️ L’objectif de ce second article est de montrer comment l’IA générative nous permet de discuter avec n’importe quelle base de données, en langage naturel, sans rédiger la moindre requête.

Ce n’est pas un hasard si GPT Builder rime avec bodybuilder 🏋️. Pour qu’il prenne de la masse, il faut continuellement le nourrir avec des données de qualité. On oublie la prot’ en poudre, nous ce qu’on veut c’est de la donnée bien fraîche.

Mais dis moi, Jamy, comment faire quand on ne maîtrise pas le SQL (un langage pour interagir avec les bases de données) et qu’on veut quand même ajouter ou mettre à jour des informations ?

Cultiver son culturiste 💪

Qui n’a jamais rêvé d’avoir une base de données propre et à jour ? Que ce soit pour un CRM (les commerciaux, on vous voit !) un ERP, un PIM, un SIRH ou tout autre outil de stockage d’informations cruciales, c’est toujours le même refrain.

Imaginez maintenant si vous pouviez avoir ce genre d’échanges avec votre assistant intelligent :

  • “Ajoute une nouvelle opportunité avec le client Y, pour 20 k€ et rappelle-moi de le contacter dans une semaine.” (CRM)
  • “Le client Y vient de signer, mets à jour l’opportunité !” (CRM)
  • “Nous venons d’intégrer ce nouveau produit, voici ses caractéristiques.” (PIM)
  • “Didier doit intervenir chez Y, pour le projet IA les 2 prochaines semaines. S’il n’est pas disponible, propose-moi 2 profils similaires.” (ERP)
  • “J’ai reçu le CV de ce candidat, ajoute-le à ma base de profils intéressants en extrayant ses compétences, et propose-lui un entretien jeudi.” (SIRH)

Vous avez un petit frisson dans la nuque ? Alors restez avec moi.

Pour mieux vous illustrer ce concept, je vais reprendre l’exemple de mon casse-tête personnel (cette migraine persistante) et vous montrer comment l’appliquer à vos données.

Un plan sans accroc

Comme son nom l’indique, une IA générative excelle dans la création de texte. Mais le plus fascinant, c’est sa capacité à “comprendre” (je simplifie) vos intentions. Une fois branchée avec une API, vous lui conférez des super-pouvoirs 🦸 .

Pour les néophytes, une API, c’est comme un serveur au restaurant : il prend votre commande (les données), va en cuisine (la base de données) et revient avec votre plat (le résultat). Sauf que là, le plat, c’est des data. On va donc créer une API capable de :

  1. Enregistrer une nouvelle crise de migraine (dans une Google Spreadsheet)
  2. Modifier une entrée existante, comme l’heure de fin d’une crise, ou l’intensité de la douleur.

Le stockage de vos données

Le tableur reste encore l’outil le plus démocratique pour stocker des données (j’ai bien dit démocratique, et non pas adapté !). Imaginons donc une Google Sheet très simple organisée de la sorte.

  • Date de début et de fin (type date avec l’heure)
  • Intensité (nombre entier de 1 à 10)
  • Déclencheurs et Médicament (type texte)

Ensuite, il nous faut une API pour interagir avec cette “base de données”. Le prochain paragraphe est plus technique, puisqu’il décrit comment mettre en oeuvre l’API grâce à Google Apps Script (l’équivalent des macros sur Excel).

Un maquereau sur Excel. Qu’est-ce que je deviendrais sans l’IA ?

Une API basique en Google Apps Script

Pour les curieux, j’ai créé 2 fonctions :

  • La première va me permettre d’ajouter une nouvelle ligne dans ma spreadsheet.
function addMigraine(data) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Migraines");
var dateFormat = "dd/MM/yyyy HH:mm:ss";

// Générer un ID basé sur le numéro de la ligne courante
var currentRow = sheet.getLastRow();
var startDate = Utilities.formatDate(new Date(data["startTime"]), Session.getScriptTimeZone(), dateFormat);
var endDate = data["endTime"] ? Utilities.formatDate(new Date(data["endTime"]), Session.getScriptTimeZone(), dateFormat) : "";

// Ajouter la nouvelle ligne avec les données formatées
sheet.appendRow([
currentRow,
startDate,
endDate,
data["intensity"],
data["triggers"],
data["medication"]
]);

// Retourner l'ID (numéro de ligne)
return currentRow;
}
  • La deuxième fonction servira pour saisir les différents médicaments que l’on peut prendre au cours d’une crise, et pour signaler la fin d’une crise.
function updateMigraine(id, endTime, newMedication) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Migraines");
var dateFormat = "dd/MM/yyyy HH:mm:ss";
var dataRange = sheet.getDataRange();
var values = dataRange.getValues();

// Trouver la ligne avec l'ID correspondant
for (var i = 1; i < values.length; i++) {
if (values[i][0] == id) {
// Mettre à jour la date de fin si elle est fournie
if (endTime) {
var formattedEndDate = Utilities.formatDate(new Date(endTime), Session.getScriptTimeZone(), dateFormat);
sheet.getRange(i + 1, 3).setValue(formattedEndDate); // Colonne "Date de fin"
}

// Ajouter des informations sur les médicaments sans écraser les données existantes
if (newMedication) {
var currentMedication = values[i][5]; // Colonne "Médicament"
var updatedMedication = currentMedication ? currentMedication + ', ' + newMedication : newMedication;
sheet.getRange(i + 1, 6).setValue(updatedMedication); // Colonne "Médicament"
}

break; // Sortir de la boucle une fois la mise à jour effectuée
}
}
}

Et enfin, comme on est en Apps Script, il nous faut une fonction doPost pour traiter les requêtes entrantes et les router correctement.

function doPost(e) {
var result;
var data = JSON.parse(e.postData.contents);

if (data.action === 'add') {
var id = addMigraine(data);
result = { 'status': 'success', 'id': id };
} else if (data.action === 'update') {
updateMigraine(data.id, data.endTime, data.newMedication);
result = { 'status': 'success' };
}

return ContentService
.createTextOutput(JSON.stringify(result))
.setMimeType(ContentService.MimeType.JSON);
}

Retour sur GPT Builder

Dans le précédent article, j’abordais l’onglet “Configure” de GPT Buider. Intéressons-nous donc à la section “Actions” comme je vous le promettais.

C’est grâce à ce mécanisme que nous allons pouvoir faire appel à l’API que nous venons de créer, et ainsi, interagir avec notre spreadsheet.

La rubrique “Schema” nous permet d’importer un schema OpenAPI qui décrit notre API. Je le génère directement à partir de mon code Apps Script, en utilisant chatGPT (of course).

Une fois saisi, les fonctions sont visibles dans la rubrique “Available actions”.

Le bouton Test permet d’envoyer une requête avec des données bidons à votre API pour s’assurer que tout fonctionne. Et comme il a compris qu’on parlait de migraine, il a même généré des données cohérentes (“stress, manque de sommeil” pour les déclencheurs).

Un jeu de test est généré automatiquement pour tester votre API

On peut enfin renseigner les paramètres d’authentification (dans mon cas, un Bearer) et éventuellement ajouter une politique de confidentialité (obligatoire si vous rendez votre GPT public).

Allez, c’est le moment de s’amuser maintenant !

Alors, concrètement ça donne quoi ?

On peut désormais intéragir directement avec notre assistant. Commençons avec une requête simple.

Déjà, il a compris que je voulais enregistrer une nouvelle migraine. Il me demande donc les informations afin de pouvoir ajouter une nouvelle crise. Allons-y.

Comme vous pouvez le voir, les données sur la douleur, le médicament et la date de démarrage ont été extraites correctement. Notez également les recommandations qui sont toujours bonnes à prendre.

Vous pouvez aussi avoir un aperçu du payload envoyé à l’API.

Le contenu de la requête

Jetons un coup d’oeil à notre spreadsheet pour voir s’il n’a pas menti.

La spreadsheet est mise à jour en temps réel

Et boum, c’est enregistré (juste un petit réglage sur le fuseau horaire, mais c’est un détail) ! 🤯

Maintenant, imaginons que la douleur persiste et qu’on décide de prendre un nouveau cachet 💊 (oui, ça arrive ).

Et comme par “magie”, la colonne qui recense les médicaments est mise à jour.

Ceci n’est pas une incitation à consommer des médicaments en masse

Je suis persuadé que vous avez compris la puissance d’un tel outil, surtout si vous l’appliquez à votre secteur d’activité.

Je vous quitte sur une dernière démonstration, dans laquelle je pousse un peu plus la complexité de l’interprétation (mais qui pourrait être issue d’une véritable conversation, parce qu’on n’a pas envie de mettre les formes quand on a une migraine).

Ajouter une nouvelle crise en langage “naturel”

Quand ça va mieux, il suffit de le dire et la date de fin est ajoutée.

Mettre à jour une donnée les doigts dans le nez

Alors, convaincu ? Si vous voulez discutez avec vos données d’entreprise sans vous prendre la tête, vous pouvez compter sur Lior Agency 🧑‍💻

--

--

Quentin Collette
Lior Agency

COO @ Lior Agency IA & Web3 - Engineer, passionate about Generative AI, Web3, software, Cloud.