Essayer un prompt avant d’entraîner
Adapter un modèle, c’est changer le modèle lui-même avec vos propres exemples. Cela coûte du temps, des données et de l’attention. Beaucoup de problèmes qui semblent l’exiger se règlent avec un meilleur prompt.
Une équipe qui entraîne d’abord et teste un prompt ensuite paie souvent une correction dont elle n’avait pas besoin.
À la fin de cette leçon
Remarque
Je peux montrer qu’un prompt ne règle pas un problème avant d’avoir recours à l’entraînement.
Mots clés
| Mot | Ce que ça veut dire |
|---|---|
| Référence | les résultats obtenus avant tout changement |
| Cas | une entrée dont on connaît la bonne réponse |
| Taux de réussite | le pourcentage de cas bien traités |
| Adapter | changer un modèle avec vos propres exemples |
| Objectif | le taux de réussite qui vous satisfait |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Commencer par une référence
Écrivez d’abord une série de cas. Un cas est une entrée avec la réponse voulue. Lancez votre prompt actuel sur chaque cas et comptez les réussites.
Ce compte est la référence. Sans elle, vous ne pouvez pas dire qu’un changement a aidé. Gardez les cas fixes, pour que chaque essai suivant reste équitable.
Exemple : un tri de messages de clients
| Genre de message | Cas | Réussis au départ | Réussis avec le meilleur prompt |
|---|---|---|---|
| facturation | 2 | 2 | 2 |
| livraison | 2 | 1 | 2 |
| remboursement | 2 | 0 | 2 |
| ton | 2 | 0 | 0 |
| total | 8 | 3 (37 %) | 6 (75 %) |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Que peut régler un prompt ?
Un prompt peut régler une consigne manquante, un exemple manquant ou une mauvaise forme de réponse. Il coûte peu et s’annule en une seconde.
Il peine quand le modèle doit suivre un style jamais montré, ou connaître des faits que la fenêtre ne peut pas contenir. L’adaptation vaut alors la peine. Le module 79 enseigne le prompt lui-même.
Une erreur courante
Attention
Beaucoup pensent qu’une mauvaise réponse prouve que le modèle doit être entraîné. Souvent, le prompt n’a jamais dit ce qu’on voulait. Vérifiez le prompt et quelques exemples d’abord, et n’entraînez que si un test équitable ne montre aucun vrai progrès.
É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 rapport de départ, partie 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { demander } = require(\"./model\");' '// Résultats enregistrés : 1 veut dire que le tri a mis le message dans le bon tas.' 'const genres = [\"facturation\", \"facturation\", \"livraison\", \"livraison\", \"remboursement\", \"remboursement\", \"ton\", \"ton\"];' 'const depart = [1, 1, 1, 0, 0, 0, 0, 0];' 'const ameliore = [1, 1, 1, 1, 1, 1, 0, 0];' > adapt1.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 rapport de départ, partie 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function taux(liste) {' ' let bons = 0;' ' for (const r of liste) bons = bons + r;' ' return Math.floor((bons * 100) / liste.length);' '}' 'function echecs(liste) {' ' const sortie = [];' ' liste.forEach(function (r, i) {' ' if (r === 0 && sortie.includes(genres[i]) === false) sortie.push(genres[i]);' ' });' ' return sortie;' '}' >> adapt1.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 rapport de départ, partie 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' ' console.log(\"séries enregistrées, 8 cas\");' ' console.log(\"départ \" + taux(depart) + \" %, échecs restants : \" + echecs(depart).join(\", \"));' ' console.log(\"meilleur prompt \" + taux(ameliore) + \" %, échecs restants : \" + echecs(ameliore).join(\", \"));' ' const q = \"En une phrase, un prompt peut-il apprendre à un modèle un style maison qu’il n’a jamais vu ?\";' ' const echantillon = \"Un prompt peut montrer quelques exemples du style, mais il ne change pas ce que le modèle fait par défaut.\";' ' const reponse = await demander([{ role: \"user\", content: q }], echantillon, 60);' ' console.log(\"le modèle dit : \" + reponse.texte);' '}' 'main();' >> adapt1.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 le rapport de départ
docker exec -w /home/node/project agent node adapt1.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 résultats sont enregistrés, pas en direct
Les deux listes de résultats sont enregistrées et écrites dans le script. Aucun modèle ne les produit : tous les étudiants voient donc les mêmes nombres. Seule la dernière ligne appelle le modèle du labo, et sans modèle elle affiche un Échantillon enregistré.