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
| Mot | Ce que ça veut dire |
|---|---|
| Retour | une note ou une correction donnée à une réponse |
| Correction | la réponse que l’utilisateur dit attendre |
| Cas | une question avec la réponse attendue |
| Conservation | la durée avant la suppression d’un enregistrement |
| Accès | qui 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
| Note | Correction | Devient 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
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 la boucle de retours, partie 1
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
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
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
docker exec -w /home/node/project agent node retours.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.
Une sortie possible
| Ligne | Ce 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 cas | Un 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.