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

Transformer les retours en cas de test

Après cette leçon: Je peux transformer ce que disent les utilisateurs des réponses en meilleurs cas.

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

Un pouce bas est un cas gratuit

Une boucle de retours transforme ce que les utilisateurs disent des réponses en cas que vous rejouez à chaque changement. Elle compte, car les utilisateurs trouvent les questions auxquelles vous n’aviez pas pensé. Un pouce vers le bas avec une correction est le meilleur cas de test qui soit.

Elle contient aussi des mots personnels : il faut décider qui peut la voir et combien de temps on la garde.

À la fin de cette leçon

Remarque

Je peux transformer ce que disent les utilisateurs des réponses en meilleurs cas.

Mots clés

MotCe que ça veut dire
Retourune note ou une correction donnée à une réponse
Correctionla réponse que l’utilisateur dit attendre
Casune question avec la réponse attendue
Conservationla durée avant la suppression d’un enregistrement
Accèsqui a le droit de lire un enregistrement

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

Une correction devient un cas

Tous les retours ne sont pas des cas. Un pouce vers le bas sans correction dit que quelque chose ne va pas, pas ce qui serait juste. Un pouce vers le haut n’a rien à corriger.

Gardez la question et la réponse corrigée. Laissez de côté l’auteur. Un cas qui contient un identifiant ou une adresse mail est une donnée personnelle que vous devez désormais protéger.

Exemple détaillé : trois retours

NoteCorrectionDevient un cas ?
basÀ 18 h le dimanche.Oui : la question et cette réponse
bas(aucune)Non : rien à attendre
haut(aucune)Non : rien à corriger

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

Décider qui voit et combien de temps

Les retours bruts sont réservés aux quelques personnes qui améliorent la fonction. Les cas qui en sont tirés peuvent aller à toute l’équipe, car ils ne contiennent personne.

Fixez une durée de conservation et supprimez les retours bruts au-delà. Dans le Run, l’âge est un nombre dans chaque enregistrement, donc tout le monde voit le même résultat. Un vrai système compare des dates.

Une erreur courante

Attention

Beaucoup pensent que garder plus de retours plus longtemps est toujours mieux. Les retours bruts contiennent ce que les gens ont tapé, parfois du personnel. Gardez le cas, supprimez le reste selon un calendrier, et écrivez la durée.

É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 boucle de retours, partie 1

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { demander } = require(\"./model\");' '' 'const JOURS_MAX = 30; // un retour plus ancien est supprimé' 'const retours = [' '  { id: \"f1\", note: \"bas\", question: \"À quelle heure ferme le magasin ?\", correction: \"À 18 h le dimanche.\", utilisateur: \"u17\", age: 3 },' '  { id: \"f2\", note: \"haut\", question: \"Où est ma commande ?\", correction: \"\", utilisateur: \"u22\", age: 5 },' '  { id: \"f3\", note: \"bas\", question: \"Puis-je rendre des chaussures ?\", correction: \"\", utilisateur: \"u31\", age: 12 },' '  { id: \"f4\", note: \"bas\", question: \"Livrez-vous en Corse ?\", correction: \"Oui, en 3 jours.\", utilisateur: \"u40\", age: 45 },' '];' > retours.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 boucle de retours, partie 2

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' '// Un cas contient la question et la réponse attendue, jamais l’utilisateur.' 'function enCas(f) {' '  if (f.note === \"bas\" && f.correction.length > 0) return { id: f.id, question: f.question, attendu: f.correction };' '  return null;' '}' >> retours.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 boucle de retours, partie 3

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  retours.forEach(function (f) {' '    if (f.age > JOURS_MAX) {' '      console.log(f.id + \" : plus ancien que \" + JOURS_MAX + \" jours, supprimé\");' '      return;' '    }' '    const c = enCas(f);' '    console.log(f.id + \" : \" + (c ? \"nouveau cas : \" + c.question + \" -> \" + c.attendu : \"pas de cas\"));' '  });' '  const q = \"En une phrase, que doit vérifier un test de ce cas ? Question : À quelle heure ferme le magasin ? Attendu : À 18 h le dimanche.\";' '  const r = await demander([{ role: \"user\", content: q }], \"Il doit vérifier que la réponse dit 18 h et qu’elle mentionne le dimanche.\", 60);' '  console.log(\"Une vérification possible : \" + r.texte);' '}' 'main();' >> retours.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 boucle de retours

Commande
docker exec -w /home/node/project agent node retours.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
f1 : nouveau cas : À quelle heure ferme le magasin ? -> ...Un pouce bas récent avec une correction
f2 : pas de cas et f3 : pas de casUn pouce haut, et un pouce bas sans correction
f4 : plus ancien que 30 jours, suppriméLa règle de conservation appliquée
Une vérification possible : ...Votre propre appel. Il change à chaque exécution, ou affiche Échantillon enregistré

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.