Quelques exemples montrent ce que vous voulez dire
Donner quelques exemples dans un prompt, c’est le prompt « few-shot ». Le modèle copie le motif qu’il voit. Vos exemples lui apprennent donc vos étiquettes et votre style.
Des exemples peuvent aussi tromper. Un prompt avec quatre bons avis et un mauvais dit au modèle que la plupart des avis sont bons.
À la fin de cette leçon
Remarque
Je peux choisir des exemples qui montrent à un modèle ce que je veux dire.
Mots clés
| Mot | Ce que ça veut dire |
|---|---|
| Exemple | une entrée associée à la réponse voulue |
| Étiquette | la réponse donnée à un exemple |
| Classe | une des étiquettes que le modèle peut choisir |
| Équilibre | chaque classe montrée à peu près autant |
| Few-shot | un prompt avec quelques exemples |
| Zero-shot | un prompt sans aucun exemple |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Combien d’exemples faut-il dans un prompt ?
Sans exemple, le modèle se sert de sa compréhension générale de la tâche. Un exemple fixe le format. Deux ou trois montrent l’éventail. Au-delà de cinq ou six, chaque exemple ajoute des jetons et peu d’autre chose.
Choisissez des exemples différents les uns des autres. Trois quasi-copies n’apprennent pas plus qu’un seul exemple.
Les mêmes étiquettes, équilibrées ou non
| Jeu | bon | mauvais | Ce que le modèle apprend |
|---|---|---|---|
| Déséquilibré | 4 | 1 | La plupart des avis sont bons, donc répondez bon |
| Équilibré | 2 | 2 | Les deux étiquettes sont courantes |
| Classe absente | 3 | 0 | Un mauvais avis n’existe pas |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
É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 compteur d’exemples, partie 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { demander } = require(\"./model\");' 'const exemples = [' ' { texte: \"Le tram est arrivé à l’heure\", etiquette: \"bon\" },' ' { texte: \"J’ai oublié mon sac dans la rame\", etiquette: \"mauvais\" },' ' { texte: \"Conducteur très aimable\", etiquette: \"bon\" },' ' { texte: \"Trajet rapide et propre\", etiquette: \"bon\" },' ' { texte: \"Le siège était un peu mouillé\", etiquette: \"bon\" },' '];' > exemples2.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 compteur d’exemples, partie 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function compter(liste) {' ' const total = {};' ' for (const e of liste) total[e.etiquette] = (total[e.etiquette] || 0) + 1;' ' return total;' '}' 'function construire(liste, texte) {' ' const blocs = liste.map(function (e) { return \"Texte : \" + e.texte + \"\nÉtiquette : \" + e.etiquette; });' ' blocs.push(\"Texte : \" + texte + \"\nÉtiquette :\");' ' return \"Classez chaque avis sur le tram : bon ou mauvais.\n\n\" + blocs.join(\"\n\n\");' '}' >> exemples2.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 compteur d’exemples, partie 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' ' const c = compter(exemples);' ' console.log(\"comptes : bon \" + c.bon + \", mauvais \" + c.mauvais);' ' for (const nom of Object.keys(c)) {' ' if (c[nom] * 2 > exemples.length) console.log(\"attention : \" + nom + \" dépasse la moitié des exemples\");' ' }' ' const prompt = construire(exemples, \"Le conducteur était désagréable\");' ' const reponse = await demander([{ role: \"user\", content: prompt }], \"mauvais\", 5);' ' console.log(\"modèle : \" + reponse.texte);' '}' 'main();' >> exemples2.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 et compter les étiquettes
docker exec -w /home/node/project agent node exemples2.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.
Ce que le Run affiche
La première ligne compte les étiquettes : bon 4, mauvais 1. La deuxième prévient que bon dépasse la moitié des exemples. Cette vérification attrape un tel jeu avant qu’il n’arrive au modèle.
La dernière ligne est une courte réponse. Sans modèle, un Échantillon enregistré s’affiche d’abord.
Une erreur courante
Attention
Beaucoup pensent que l’ordre des exemples n’a pas d’importance. Les modèles s’appuient souvent surtout sur le dernier exemple. S’il est mauvais, le nouveau texte a plus de chances d’être jugé mauvais. Mélangez les classes, pour qu’aucune ne soit toujours en dernier.