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

Utiliser un modèle comme juge

Après cette leçon: Je peux demander à un modèle de noter une réponse et garder cette notation vérifiable.

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

Noter ce que les règles n’atteignent pas

Un modèle juge est un second appel qui note la sortie du premier d’après une grille. C’est utile, car une règle sait vérifier une étiquette, mais pas si une phrase est polie ou utile.

La phrase que le trieur envoie au client en est le cas type : aucune règle ne dit si elle est aimable.

À la fin de cette leçon

Remarque

Je peux demander à un modèle de noter une réponse et garder cette notation vérifiable.

Mots-clés

MotCe que ça veut direExemple
Jugeun appel de modèle qui note une autre réponse
Grillel’échelle fixe et le sens de chaque note
Format de sortiela forme exacte où le juge doit répondrenote et raison
Validercontrôler une réponse sur le format, par du code
Note enregistréeune note gardée avec sa réponse et sa raison

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

Une grille aux niveaux nommés pour le juge

Ne demandez pas à un juge « est-ce bien ? ». Donnez une grille : une courte échelle où chaque note dit ce qu’elle signifie. Trois niveaux suffisent pour commencer.

Dites ce qu’il faut regarder et ce qu’il faut ignorer. Une échelle floue donne des notes floues.

Exemple travaillé : une grille à trois niveaux

NoteSens
3Claire, polie, sans promesse d’argent
2Acceptable, mais vague ou froide
1Inutile, impolie ou promet de l’argent

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

Fixer le format et valider chaque note

Dites au juge de répondre sous une seule forme, ici du JSON avec une note et une courte raison. Puis validez par du code : le JSON se lit, la note est un entier de 1 à 3 et la raison est là.

Une note qui échoue au contrôle n’est pas notée. Comptez-la. Ne devinez jamais ce que le juge voulait dire.

Garder la note près de ce qu’elle note

Rangez chaque note enregistrée avec la réponse, la raison et la grille utilisée. Un nombre seul ne se discute plus ensuite.

Si le service accepte une température (le réglage qui rend les réponses plus ou moins variées), choisissez-la basse pour que le juge varie moins. Il varie quand même, et c’est pourquoi la leçon suivante le teste contre des personnes.

Écrire l’aide 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\";' '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 || 200 }),' '      signal: AbortSignal.timeout(30000),' '    });' '    if (res.ok === false) throw new Error(\"statut \" + res.status);' '    return (await res.json()).choices[0].message.content;' > 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’aide du modèle, partie 2

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' '  } catch (erreur) {' '    console.log(\"Échantillon enregistré : aucun modèle n’a répondu (\" + erreur.message + \").\");' '    const liste = [].concat(echantillon);' '    const tour = messages.filter(function (m) { return m.role === \"assistant\"; }).length;' '    return liste[Math.min(tour, liste.length - 1)];' '  }' '}' '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 script du juge, partie 1

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { demander } = require(\"./model\");' 'const grille = \"Notez de 1 à 3 la réponse qu’une boutique a envoyée à un client. 3 : claire, polie, sans promesse d’argent. 2 : acceptable mais vague ou froide. 1 : inutile, impolie ou promet de l’argent. Répondez uniquement par du JSON à deux clés : note (1, 2 ou 3) et raison (moins de 15 mots).\";' > juge4.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 script du juge, partie 2

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function valider(texte) {' '  let donnees = null;' '  try { donnees = JSON.parse(texte); } catch (erreur) { return { ok: false, pourquoi: \"pas du JSON\" }; }' '  if (donnees === null || Array.isArray(donnees) || typeof donnees === \"string\" || typeof donnees === \"number\") return { ok: false, pourquoi: \"pas un objet\" };' '  if (Number.isInteger(donnees.note) === false || donnees.note < 1 || donnees.note > 3) return { ok: false, pourquoi: \"mauvaise note\" };' '  const raison = typeof donnees.raison === \"string\" ? donnees.raison.trim() : \"\";' '  if (raison.length === 0 || raison.length > 100) return { ok: false, pourquoi: \"mauvaise raison\" };' '  return { ok: true, note: donnees.note, raison: raison };' '}' >> juge4.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 script du juge, partie 3

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function juge(note, raison) {' '  return JSON.stringify({ note: note, raison: raison });' '}' 'const enregistrees = [' '  juge(2, \"Polie mais vague.\"),' '  juge(1, \"Promet de l’argent.\"),' '  \"Je donnerais un 3 à cette réponse\",' '  juge(5, \"Impolie.\"),' '  juge(3, \"Claire et polie, sans promesse.\"),' '];' 'let total = 0;' 'let valides = 0;' 'enregistrees.forEach(function (texte, rang) {' '  const resultat = valider(texte);' '  if (resultat.ok) { total = total + resultat.note; valides = valides + 1; }' '  console.log(\"Enregistrée \" + (rang + 1) + \" : \" + (resultat.ok ? \"note \" + resultat.note + \" (\" + resultat.raison + \")\" : \"invalide, \" + resultat.pourquoi));' '});' 'console.log(\"Valides : \" + valides + \" sur \" + enregistrees.length + \". Note moyenne des valides : \" + (total / valides).toFixed(1).replace(\".\", \",\"));' >> juge4.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 script du juge, partie 4

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  const echantillon = juge(1, \"Promet de l’argent.\");' '  const texte = await demander([{ role: \"user\", content: grille + \"\n\nRéponse à noter : Votre remboursement a été accepté.\" }], echantillon, 80);' '  const resultat = valider(texte);' '  console.log(\"Le juge a dit : \" + texte);' '  console.log(\"Juge : \" + (resultat.ok ? \"note \" + resultat.note : \"invalide, \" + resultat.pourquoi));' '}' 'main();' >> juge4.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.

Valider cinq notes et une réelle

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

Une sortie possible

LigneCe qu’elle montre
Enregistrées 1 et 2Notes valides 2 et 1, chacune avec une raison
Enregistrée 3Invalide, pas du JSON
Enregistrée 4Invalide, mauvaise note : 5 sort de l’échelle
Enregistrée 5Note valide 3
Ligne Valides3 sur 5, note moyenne 2,0
JugeUne note et une raison, ou invalide. Cela peut changer à chaque lancement

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

À vous

Astuce

Dans juge4.js, remplacez la réponse à noter dans main par Nous regardons cela. Relancez et lisez la note et la raison obtenues.

Une erreur fréquente

Attention

Beaucoup font confiance à un juge parce que ses raisons semblent sûres. Une raison fluide n’est pas une preuve. Le juge est un modèle : il peut se tromper avec aplomb. Contrôlez son format par du code et ses notes contre celles de personnes.

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