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

Vérifier ce qu’un modèle a vu

Après cette leçon: Je peux vérifier chaque affirmation d’une description d’après des faits connus et décider si j’accepte la réponse.

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

La description semble juste, mais l’est-elle ?

Un modèle décrit une photo : deux chats, une balle rouge et un panneau qui dit OUVERT. Il paraît sûr de lui. Mais un modèle peut ajouter un chien absent, ou dire trois chats quand il y en a deux.

Cette leçon montre comment vérifier chaque affirmation d’après ce que vous savez de l’entrée.

À la fin de cette leçon

Remarque

Je peux vérifier chaque affirmation d’une description d’après des faits connus et décider si j’accepte la réponse.

Mots clés

MotCe que ça veut dire
Affirmationune chose que dit une réponse sur l’entrée
Preuvele fait connu qui permet de contrôler une affirmation
Inventéequi parle de quelque chose d’absent de l’entrée
Non vérifiéesans fait pour la contrôler
Verdictle résultat du contrôle d’une affirmation

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

Découper une réponse en affirmations

Une réponse se contrôle mieux quand vous la découpez en affirmations, chacune assez petite pour être vraie ou fausse. « Deux chats et une balle rouge » fait trois affirmations.

Vous ne pouvez contrôler qu’une affirmation pour laquelle vous avez un fait. Les faits viennent de l’entrée elle-même, comme le comptage dans une grille, ou d’une personne qui connaît l’image.

Quatre affirmations et leurs faits

AffirmationFait connuVerdict
Il y a 2 chatschats : 2confirmée
Il y a 3 chatschats : 2mauvais nombre
Il y a un chienaucun chien listéinventée
La porte est rougepas de couleur pour la portenon vérifiée

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

Des fautes différentes, des verdicts différents

Un mauvais nombre, une mauvaise couleur et une chose inventée sont des fautes différentes. La chose inventée est la pire, car la réponse parle de quelque chose qui n’existe pas.

La décision suit donc le pire verdict. Une seule affirmation inventée, et on rejette. Une affirmation fausse ou non vérifiée, et une personne relit. Seule une réponse sans défaut est acceptée.

Une erreur courante

Attention

Beaucoup acceptent une réponse parce que la plupart de ses éléments sont justes. Quatre affirmations vraies ne rendent pas la cinquième vraie. Contrôlez chaque affirmation. Une seule chose inventée peut suffire à rejeter toute la réponse.

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

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { demander } = require(\"./model\");' 'const grille = [\"R..V..\", \".B.R..\", \"..V...\", \"R....B\"];' 'const affirmations = [' '  { genre: \"compte\", chose: \"R\", valeur: 3 },' '  { genre: \"compte\", chose: \"V\", valeur: 3 },' '  { genre: \"compte\", chose: \"J\", valeur: 1 },' '  { genre: \"existe\", chose: \"B\" },' '];' > verif5.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 de contrôle, partie 2

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function faits(g) {' '  const comptes = {};' '  for (const ligne of g) {' '    for (const c of ligne) {' '      if (c === \".\") continue;' '      comptes[c] = (comptes[c] || 0) + 1;' '    }' '  }' '  return comptes;' '}' >> verif5.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 de contrôle, partie 3

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function verdict(comptes, a) {' '  if (a.genre === \"existe\") return a.chose in comptes ? \"confirmée\" : \"inventée\";' '  if ((a.chose in comptes) === false) return \"inventée\";' '  return comptes[a.chose] === a.valeur ? \"confirmée\" : \"mauvais nombre\";' '}' >> verif5.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 de contrôle, partie 4

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  const comptes = faits(grille);' '  console.log(\"faits \" + JSON.stringify(comptes));' '  for (const a of affirmations) {' '    const valeur = a.valeur === undefined ? \"\" : \" \" + a.valeur;' '    console.log(a.genre + \" \" + a.chose + valeur + \" : \" + verdict(comptes, a));' '  }' '  const q = \"En une phrase courte, pourquoi faut-il vérifier la description d’une image en la comparant à l’image ?\";' '  const reponse = await demander([{ role: \"user\", content: q }], \"Une description peut ajouter des choses ou se tromper de nombre, donc on la compare à l’image.\", 40);' '  console.log(\"réponse : \" + reponse.texte);' '}' 'main();' >> verif5.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.

Contrôler quatre affirmations enregistrées

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

Les lignes affichées

LigneCe qu’elle montre
faits {"R":3,"V":2,"B":2}Ce que le script a compté dans sa grille de lettres
compte R 3 : confirméeL’affirmation s’accorde avec le comptage
compte V 3 : mauvais nombreLe comptage donne 2
compte J 1 : inventéeIl n’y a pas de J dans la grille

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.