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

Comment juger un modèle ajusté

Après cette leçon: Je peux dire si un modèle ajusté est meilleur que la référence.

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

Meilleur sur un point, pire sur un autre

Un modèle ajusté a obtenu un meilleur score sur la tâche pour laquelle vous l’avez entraîné. Est-il meilleur pour autant ? Pas encore. Il a peut-être empiré ailleurs, ou coûte deux fois plus cher à faire tourner.

Juger un modèle ajusté, c’est le comparer à la référence sur les mêmes cas, dans chaque domaine qui compte.

À la fin de cette leçon

Remarque

Je peux dire si un modèle ajusté est meilleur que la référence.

Mots clés

MotCe que ça veut dire
Gainles résultats ajustés moins ceux de la référence
Margele plus petit gain qui compte pour vrai
Régressionun cas que la version ajustée rate maintenant
Domaineun genre de cas, comme le ton ou le calcul
Enregistrésauvegardé, pas produit en direct

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

Comparer sur les mêmes cas

Lancez les deux versions sur une série fixe de cas qu’aucune n’a vus à l’entraînement. Comptez ce que chacune réussit. La différence est le gain.

Un gain d’un cas sur huit est trop petit pour qu’on s’y fie. Fixez la marge voulue avant de regarder, pour que le résultat ne vous embobine pas.

Exemple : huit cas, trois domaines

DomaineRéussis en baseRéussis ajustésChangement
messages2 sur 43 sur 4+1
ton1 sur 22 sur 2+1
calcul2 sur 21 sur 2-1
total5 sur 86 sur 8+1

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

Une meilleure réponse peut coûter plus

Un modèle ajusté peut répondre avec plus de mots, ou demander une offre plus grosse pour tourner. Calculez la hausse de coût en pourcentage du coût de référence.

Fixez d’abord le maximum que vous acceptez. Un petit gain qui double la facture ne vaut en général pas la mise en service.

Une erreur courante

Attention

Beaucoup pensent qu’un meilleur score sur la tâche entraînée prouve que le modèle est meilleur. Il prouve seulement qu’il est meilleur là. Vérifiez les autres domaines, comptez les cas qui ont empiré et regardez le coût avant de décider.

É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 la comparaison, partie 1

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { demander } = require(\"./model\");' '// Enregistré : 1 veut dire juste. Les mêmes huit cas pour les deux versions.' 'const cas = [' '  { id: \"c1\", domaine: \"messages\", base: 0, ajuste: 1 }, { id: \"c2\", domaine: \"messages\", base: 0, ajuste: 1 },' '  { id: \"c3\", domaine: \"messages\", base: 1, ajuste: 1 }, { id: \"c4\", domaine: \"messages\", base: 1, ajuste: 0 },' '  { id: \"c5\", domaine: \"ton\", base: 0, ajuste: 1 }, { id: \"c6\", domaine: \"ton\", base: 1, ajuste: 1 },' '  { id: \"c7\", domaine: \"calcul\", base: 1, ajuste: 1 }, { id: \"c8\", domaine: \"calcul\", base: 1, ajuste: 0 },' '];' > adapt5.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 la comparaison, partie 2

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function total(version) {' '  let n = 0;' '  for (const c of cas) n = n + c[version];' '  return n;' '}' 'const pires = cas.filter(function (c) { return c.base === 1 && c.ajuste === 0; });' 'const changement = {};' 'for (const c of cas) changement[c.domaine] = (changement[c.domaine] || 0) + c.ajuste - c.base;' >> adapt5.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 la comparaison, partie 3

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  console.log(\"base \" + total(\"base\") + \" sur 8, ajusté \" + total(\"ajuste\") + \" sur 8\");' '  console.log(\"ont empiré : \" + pires.map(function (c) { return c.id; }).join(\", \"));' '  console.log(\"changement par domaine : \" + JSON.stringify(changement));' '  const q = \"En une phrase, pourquoi vérifier des domaines que l’ajustement ne visait pas ?\";' '  const echantillon = \"Ajuster pour une tâche peut empirer discrètement les autres, et seul un contrôle sur celles-ci le montre.\";' '  const reponse = await demander([{ role: \"user\", content: q }], echantillon, 60);' '  console.log(\"le modèle dit : \" + reponse.texte);' '}' 'main();' >> adapt5.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 la comparaison

Commande
docker exec -w /home/node/project agent node adapt5.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 la comparaison a affiché

Les deux séries de résultats sont enregistrées et écrites dans le script. Le Run compte chaque version, liste les cas qui ont empiré et montre le changement dans chaque domaine.

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.