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

Figer la version d’un modèle

Après cette leçon: Je peux empêcher un modèle de changer sous une fonction.

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

Pourquoi un modèle ne doit pas changer seul

Figer la version d’un modèle, c’est nommer la version exacte qu’une fonction utilise. Un nom qui veut toujours dire « la plus récente » n’est pas une version figée.

C’est important : une fonction qui marchait lundi peut se comporter autrement mardi, sans rien changer chez vous. Passer à un nouveau modèle exprès, en comparant d’abord les deux versions, est déjà une bonne habitude. Ici, on va plus loin : on contrôle aussi le changement que personne n’a choisi.

À la fin de cette leçon

Remarque

Je peux empêcher un modèle de changer sous une fonction.

Mots clés

MotCe que ça veut direExemple
Figernommer une version exacte
Aliasun nom qui pointe vers une version qui peut bougerassistant-dernier
Configurationle fichier qui dit quel modèle une fonction utilise
Avis de retraitun avertissement qu’une version va cesser de marcher
Jour de retraitle jour où une version cesse de répondre

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

Un alias peut bouger, une version non

Une configuration nomme le modèle qu’une fonction appelle. Si elle dit assistant-dernier, c’est le fournisseur qui décide de ce que cela veut dire. Un jour, le nom pointe vers une nouvelle version.

Si elle dit assistant-v3, elle désigne cette version seule. La fonction ne change que quand vous modifiez la configuration.

Exemple détaillé : cinq noms

Nom dans la configurationFigé ?Pourquoi
assistant-v3OuiFinit par v et un nombre entier
assistant-v10OuiDix est un nombre entier
assistant-dernierNonDernier est un mot, pas un nombre
assistantNonAucune version
assistant-v2bNon2b n’est pas un nombre entier

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

Une erreur courante

Attention

Beaucoup pensent qu’une version figée suffit pour toujours. Elle s’arrête pourtant : le fournisseur la retire un jour fixé. La version figée vous donne le temps de passer à la suivante à votre rythme, à condition d’agir avant le jour de retrait.

Un avis vous donne un jour pour agir

Un avis de retrait nomme une version et son jour de retrait. Les jours restants sont ce jour moins aujourd’hui.

Choisissez une fenêtre d’alerte, par exemple 30 jours. Dans cette fenêtre, une fonction est bientôt retirée : préparez le passage maintenant. Au jour dit ou après, elle est retirée et elle échoue déjà.

Exemple détaillé : nous sommes au jour 100

VersionJour de retraitJours restantsStatut avec une fenêtre de 30 jours
assistant-v190-10Retiré
assistant-v212525Bientôt retiré
assistant-v4300200ok
assistant-v5pas d’avisaucunok

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

É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 des versions, partie 1

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { demander } = require(\"./model\");' 'const aujourdhui = 100;' 'const configs = [' '  { fonction: \"resume\", modele: \"assistant-v3\" },' '  { fonction: \"recherche\", modele: \"assistant-dernier\" },' '  { fonction: \"tri\", modele: \"assistant-v2\" },' '  { fonction: \"etiquettes\", modele: \"assistant-v1\" },' '  { fonction: \"brouillon\", modele: \"assistant\" },' '];' 'const avis = { \"assistant-v2\": 125, \"assistant-v1\": 90 };' > fige.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 des versions, partie 2

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function fige(modele) {' '  const fin = modele.split(\"-\").pop();' '  const reste = fin.slice(1);' '  return fin.length > 1 && fin[0] === \"v\" && String(Number(reste)) === reste;' '}' 'function statut(c) {' '  if (fige(c.modele) === false) return \"NON FIGÉ\";' '  const jour = avis[c.modele];' '  if (jour === undefined) return \"ok\";' '  if (jour <= aujourdhui) return \"RETIRÉ\";' '  return jour - aujourdhui <= 30 ? \"RETRAIT dans \" + (jour - aujourdhui) + \" jours\" : \"ok\";' '}' >> fige.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 des versions, partie 3

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  let bon = 0;' '  configs.forEach(function (c) {' '    const s = statut(c);' '    if (s === \"ok\") bon = bon + 1;' '    console.log(c.fonction + \" \" + c.modele + \" : \" + s);' '  });' '  console.log(\"à revoir : \" + (configs.length - bon) + \" sur \" + configs.length);' '  const q = \"En une phrase courte, pourquoi figer un modèle sur une version ?\";' '  const echantillon = \"Une version figée ne peut pas changer sous la fonction : vous choisissez le moment de passer à la suivante.\";' '  const reponse = await demander([{ role: \"user\", content: q }], echantillon, 60);' '  console.log(\"le modèle dit : \" + reponse.texte);' '}' 'main();' >> fige.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 des versions

Commande
docker exec -w /home/node/project agent node fige.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 affiche

LigneCe qu’elle montre
resume assistant-v3 : okFigé et sans avis
recherche assistant-dernier : NON FIGÉUn alias, donc il peut bouger
tri assistant-v2 : RETRAIT dans 25 joursFigé, mais la fin approche
etiquettes assistant-v1 : RETIRÉLe jour de retrait est passé
brouillon assistant : NON FIGÉAucune version
à revoir : 4 sur 5Compté par des règles, pas par un modèle
le modèle dit : ...Une phrase du labo. Un échantillon enregistré si aucun modèle ne répond

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.