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
| Mot | Ce que ça veut dire |
|---|---|
| Affirmation | une chose que dit une réponse sur l’entrée |
| Preuve | le fait connu qui permet de contrôler une affirmation |
| Inventée | qui parle de quelque chose d’absent de l’entrée |
| Non vérifiée | sans fait pour la contrôler |
| Verdict | le 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
| Affirmation | Fait connu | Verdict |
|---|---|---|
| Il y a 2 chats | chats : 2 | confirmée |
| Il y a 3 chats | chats : 2 | mauvais nombre |
| Il y a un chien | aucun chien listé | inventée |
| La porte est rouge | pas de couleur pour la porte | non 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
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
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
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
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
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
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
docker exec -w /home/node/project agent node verif5.jsAffiché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
| Ligne | Ce 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ée | L’affirmation s’accorde avec le comptage |
| compte V 3 : mauvais nombre | Le comptage donne 2 |
| compte J 1 : inventée | Il n’y a pas de J dans la grille |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.