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

Dérive d’un modèle et réentraînement

Après cette leçon: Je peux voir qu’un modèle ajusté a vieilli.

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

Un modèle ajusté peut vieillir

La dérive d’un modèle, c’est un modèle qui empire avec le temps sans que personne ne le change. Le monde avance. De nouveaux produits, de nouveaux mots et de nouveaux genres de messages arrivent, et le modèle a été ajusté sur l’an dernier.

Si personne ne surveille le score, le premier signe est un client mécontent.

À la fin de cette leçon

Remarque

Je peux voir qu’un modèle ajusté a vieilli.

Mots clés

MotCe que ça veut dire
Dériveun modèle qui empire quand le monde change
Surveillancevérifier un score encore et encore
Déclencheurun signe qui dit d’agir maintenant
Calendrierune date fixe pour agir, quoi qu’il arrive
Réentraînementajuster de nouveau sur des exemples plus récents

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

Surveiller un score chaque semaine

Gardez un petit jeu de cas frais et notez le score du modèle dessus chaque semaine. Les premières semaines après une mise en service donnent une référence.

Une mauvaise semaine peut être un hasard. Exigez deux semaines de suite sous votre ligne d’alerte avant de dire que le score a chuté.

Exemple : des scores hebdomadaires

SemainesScoresCe que cela montre
1 à 388, 90, 89Référence 89 (la moyenne, arrondie vers le bas)
4 à 688, 87, 86Petite glissade, au-dessus de la ligne d’alerte de 84
7 et 880, 79Deux semaines sous 84 : le score a chuté
9 à 1278, 79, 77, 76Il reste bas

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

Chercher la cause dans les entrées

Quand le score chute, lisez les nouvelles entrées. Contiennent-elles des mots, des produits ou des sujets que les données d’entraînement n’avaient pas ? Listez les mots nouveaux.

Cela dit quels exemples ajouter. Une longue liste de mots nouveaux est un signe fort que les entrées ont changé.

Un déclencheur ou un calendrier

Un calendrier réentraîne à une date fixe, par exemple toutes les quatre semaines. C’est simple, mais il peut réentraîner sans que rien ait changé, ou trop tard quand quelque chose a changé.

Un déclencheur réentraîne quand le score chute. Il agit sur une preuve. Beaucoup d’équipes prennent d’abord le déclencheur et gardent le calendrier en secours.

Une erreur courante

Attention

Beaucoup pensent qu’un modèle ajusté reste bon une fois ses tests réussis. Les tests ne décrivent que le jour où on les a lancés. Continuez de noter des cas frais, et réentraînez puis comparez de nouveau quand le score chute.

É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 contrôle de dérive, partie 1

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { demander } = require(\"./model\");' '// Scores hebdomadaires enregistrés d’un tri de messages, en pourcentage. La semaine 1 est la première.' 'const scores = [88, 90, 89, 88, 87, 86, 80, 79, 78, 79, 77, 76];' 'const SEUIL = 5;' > adapt6.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 contrôle de dérive, partie 2

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function reference(liste) {' '  return Math.floor((liste[0] + liste[1] + liste[2]) / 3);' '}' 'function trouverChute(liste, baisse) {' '  const limite = reference(liste) - baisse;' '  for (let i = 3; i < liste.length - 1; i++) {' '    if (liste[i] < limite && liste[i + 1] < limite) return i + 1;' '  }' '  return 0;' '}' >> adapt6.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 contrôle de dérive, partie 3

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function motsNouveaux(anciens, nouveaux) {' '  const vus = anciens.join(\" \").toLowerCase().split(\" \");' '  const sortie = [];' '  for (const m of nouveaux.join(\" \").toLowerCase().split(\" \")) {' '    if (vus.includes(m) === false && sortie.includes(m) === false) sortie.push(m);' '  }' '  return sortie;' '}' >> adapt6.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 contrôle de dérive, partie 4

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  console.log(\"référence \" + reference(scores) + \" %, alerte sous \" + (reference(scores) - SEUIL) + \" %\");' '  console.log(\"le score a chuté à la semaine \" + trouverChute(scores, SEUIL));' '  console.log(\"mots nouveaux : \" + motsNouveaux([\"où est mon colis\"], [\"où est mon colis drone\", \"code casier\"]).join(\" \"));' '  const q = \"En une phrase, pourquoi un modèle peut-il empirer alors que personne ne l’a changé ?\";' '  const echantillon = \"Le monde et les entrées changent : un modèle ajusté sur d’anciennes entrées convient moins bien aux nouvelles.\";' '  const reponse = await demander([{ role: \"user\", content: q }], echantillon, 60);' '  console.log(\"le modèle dit : \" + reponse.texte);' '}' 'main();' >> adapt6.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 contrôle de dérive

Commande
docker exec -w /home/node/project agent node adapt6.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 contrôle a affiché

Les douze scores sont enregistrés et écrits dans le script. Le contrôle calcule la référence, trouve la semaine où le score a chuté et liste les mots nouveaux de quelques messages inventés.

La dernière ligne est un court appel au modèle, ou un Échantillon enregistré.

À 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.