Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Conserver puis effacer les données d’une application d’IA

Après cette leçon: Je peux effacer des données selon une règle et à la demande d’une personne.

Leçon de 65 min8 commandesLab agent de code IA : utiliser opencode pour expliquer et corriger du code, et vérifier son travail

Garder des données, puis les effacer

La conservation des données est la règle qui dit combien de temps une application garde chaque sorte de données. Ce temps passé, les données sont effacées.

Une application de discussion qui garde tout pour toujours porte plus de risque chaque année. Le module « Sécuriser les applications LLM » a donné une première règle ; ici, vous balayez, vous effacez à la demande et vous comptez ce qui reste.

À la fin de cette leçon

Remarque

Je peux effacer des données selon une règle et à la demande d’une personne.

Mots clés

MotCe que ça veut direExemple
Conservationla durée pendant laquelle des données sont gardées
Balayageune tâche qui efface ce qui est trop vieux
Demande d’effacementune personne qui demande que ses données soient retirées
Copieun autre endroit où les mêmes données sont stockéesun cache
Sauvegardeune copie gardée pour se remettre d’une panne

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une règle de conservation fixe une durée

Chaque sorte de données demande un temps différent. Une discussion peut être gardée 30 jours. Une facture est gardée plus longtemps, car la comptabilité en a besoin. Cette leçon prend 365 jours.

Chaque fiche a un jour de création. Un balayage calcule son âge : aujourd’hui moins ce jour. Si l’âge dépasse la durée, la fiche part. Une fiche exactement à la limite reste.

Exemple détaillé : un balayage au jour 100

FicheSorteFaite au jourÂgeDuréeRésultat
d1discussion109030Effacée
d2discussion802030Gardée
f1facture2080365Gardée
d3discussion703030Gardée, exactement à la limite

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une demande d’effacement doit atteindre chaque copie

Une personne peut demander l’effacement de ses données. Ses messages peuvent vivre dans le stockage principal, dans un cache qui accélère les choses et dans une sauvegarde.

Un effacement qui n’atteint que le stockage principal laisse le reste. Listez d’abord tous les lieux. Le RGPD parle du droit à l’effacement, qui a des limites : demandez conseil à un spécialiste. Ce n’est pas un avis juridique.

Une erreur courante

Attention

Beaucoup pensent que supprimer dans le stockage principal supprime les données de la personne. Ce n’est pas vrai. Les caches, les journaux et les sauvegardes gardent des copies. Une sauvegarde ne se modifie pas : elle disparaît à son expiration. Dites-le à la personne, avec la date.

Écrire l’assistant du modèle, partie 1

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const base = process.env.AI_URL || \"http://ai:4000\";' '// Les jetons d’une réponse, ou null si elle n’en donne pas.' 'function compter(donnees, nom) {' '  return donnees.usage && typeof donnees.usage[nom] === \"number\" ? donnees.usage[nom] : null;' '}' > model.js"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire l’assistant du modèle, partie 2

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function demander(messages, echantillon, max) {' '  try {' '    const res = await fetch(base + \"/v1/chat/completions\", {' '      method: \"POST\",' '      headers: { \"content-type\": \"application/json\", authorization: \"Bearer lab\" },' '      body: JSON.stringify({ model: \"lab\", messages: messages, max_tokens: max || 100 }),' '      signal: AbortSignal.timeout(30000),' '    });' '    if (res.ok === false) throw new Error(\"statut \" + res.status);' '    const d = await res.json();' '    return { texte: d.choices[0].message.content, entree: compter(d, \"prompt_tokens\"), sortie: compter(d, \"completion_tokens\"), enregistre: false };' '  } catch (erreur) {' '    console.log(\"Échantillon enregistré : aucun modèle n’a répondu (\" + erreur.message + \").\");' '    return { texte: echantillon, entree: null, sortie: null, enregistre: true };' '  }' '}' 'module.exports = { demander };' >> model.js"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire le balayage de conservation, partie 1

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { demander } = require(\"./model\");' 'const regles = { discussion: 30, facture: 365 };' 'const aujourdhui = 100;' 'const fiches = [' '  { id: \"d1\", utilisateur: \"u1\", jour: 10, sorte: \"discussion\" },' '  { id: \"d2\", utilisateur: \"u2\", jour: 80, sorte: \"discussion\" },' '  { id: \"f1\", utilisateur: \"u1\", jour: 20, sorte: \"facture\" },' '  { id: \"d3\", utilisateur: \"u1\", jour: 70, sorte: \"discussion\" },' '];' > conserver.js"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire le balayage de conservation, partie 2

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function expiree(f) {' '  return typeof regles[f.sorte] === \"number\" && aujourdhui - f.jour > regles[f.sorte];' '}' 'function ids(liste) {' '  return liste.map(function (f) { return f.id; });' '}' 'const lieux = {' '  actif: fiches.filter(function (f) { return expiree(f) === false; }),' '  cache: [fiches[3]],' '  sauvegarde: [fiches[0], fiches[2], fiches[3]],' '};' >> conserver.js"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire le balayage de conservation, partie 3

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function reste(utilisateur, atteints) {' '  const restant = {};' '  Object.keys(lieux).forEach(function (nom) {' '    const miennes = lieux[nom].filter(function (f) { return f.utilisateur === utilisateur; });' '    if (atteints.indexOf(nom) < 0 && miennes.length > 0) restant[nom] = ids(miennes);' '  });' '  return restant;' '}' >> conserver.js"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire le balayage de conservation, partie 4

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  console.log(\"expirées aujourd’hui : \" + JSON.stringify(ids(fiches.filter(expiree))));' '  console.log(\"gardées par le balayage : \" + JSON.stringify(ids(lieux.actif)));' '  console.log(\"effacer u1 de actif et cache, il reste : \" + JSON.stringify(reste(\"u1\", [\"actif\", \"cache\"])));' '  console.log(\"effacer u1 des trois, il reste : \" + JSON.stringify(reste(\"u1\", [\"actif\", \"cache\", \"sauvegarde\"])));' '  console.log(\"sauvegarde faite au jour 90, gardée 35 jours, jours restants : \" + Math.max(0, 90 + 35 - aujourdhui));' >> conserver.js"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire le balayage de conservation, partie 5

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' '  const q = \"En une courte phrase, pourquoi une sauvegarde peut-elle contenir encore des données après leur suppression ?\";' '  const echantillon = \"Une sauvegarde est une copie à part : elle ne change que quand elle expire.\";' '  const r = await demander([{ role: \"user\", content: q }], echantillon, 60);' '  console.log(\"le modèle dit : \" + r.texte);' '}' 'main();' >> conserver.js"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lancer le balayage de conservation

Commande
docker exec -w /home/node/project agent node conserver.js

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Ce que le Run affiche

LigneCe qu’elle montre
expirées aujourd’hui : ["d1"]Seule d1 dépasse sa durée
gardées par le balayage : ["d2","f1","d3"]Ce qui reste dans le stockage principal
effacer u1 de actif et cache, il reste : {"sauvegarde":[...]}La sauvegarde garde encore u1
effacer u1 des trois, il reste : {}Chaque copie atteinte
jours restants : 25Quand la sauvegarde disparaît
le modèle dit : ...Une phrase. Les mots changent à chaque exécution

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

À propos de ce labo et de sa source: Lab agent de code IA : utiliser opencode pour expliquer et corriger du code, et vérifier son travail

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.