Trois réglages qui changent une réponse
La température, la limite de jetons et le texte d’arrêt sont les trois réglages d’un appel qui changent le plus la réponse. Chacun se place dans le corps de la requête, à côté des messages.
Ils comptent, car un appel aux réglages par défaut peut être trop aléatoire pour un travail sur des données, ou trop long pour un écran. Les connaître permet de choisir exprès.
À la fin de cette leçon
Remarque
Je peux dire ce que changent la température, la limite de jetons et le texte d’arrêt dans un appel à un modèle.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Température | un réglage de la variété des réponses | 0 |
| Jeton | un petit morceau de texte que le modèle lit et écrit | |
| Limite de jetons | le plus grand nombre de jetons d’une réponse | max_tokens |
| Texte d’arrêt | un texte qui termine la réponse quand le modèle l’atteint | |
| Motif de fin | la raison pour laquelle la réponse s’est arrêtée | length |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
La température règle la variété des réponses
Un modèle choisit chaque jeton suivant dans une liste de jetons probables. Une température basse prend presque toujours le plus probable. Une température haute laisse entrer des jetons moins probables.
Choisissez donc une valeur basse, proche de 0, pour un travail à réponse unique, comme extraire une date d’un texte. Choisissez une valeur plus haute pour des idées ou des noms.
Exemple travaillé : la température de trois tâches
| Tâche | Température | Pourquoi |
|---|---|---|
| Extraire un numéro de commande d’un courriel | 0 | Il n’y a qu’une bonne réponse |
| Répondre à une question de client | 0.7 | Naturel, sans excès |
| Proposer dix noms de boutique | 1.2 | On veut de la variété |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Demander trois fois à deux températures
docker exec -w /home/node/project agent node -e 'const labo = require("./labo.js"); const question = [{ role: "user", content: "Proposez un nom pour un poisson rouge. Répondez par un seul mot." }]; const exemples = { 0: ["Bulle", "Bulle", "Bulle"], 1.2: ["Nemo", "Capitaine Splash", "Bulle"] }; (async () => { for (const temperature of [0, 1.2]) { const trouves = []; let etiquette = ""; for (let i = 0; i < 3; i++) { const obtenu = await labo.demander({ max_tokens: 8, temperature: temperature, messages: question }, exemples[temperature][i]); trouves.push(obtenu.texte.trim()); etiquette = obtenu.etiquette; } console.log("température " + temperature + " (" + etiquette + ") : " + trouves.join(" | ")); } })();'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.
La limite de jetons est un plafond strict
Un jeton est un petit morceau de texte, souvent un mot court ou un bout de mot long. max_tokens est le plus grand nombre de jetons que le modèle peut écrire. Quand il est atteint, la réponse s’arrête, même au milieu d’une phrase.
La réponse porte un motif de fin. Le mot stop veut dire que le modèle a fini. Le mot length veut dire que le plafond l’a coupé.
Couper une réponse exprès
docker exec -w /home/node/project agent node -e 'const labo = require("./labo.js"); const question = [{ role: "user", content: "Expliquez ce qu’est une API en deux phrases." }]; const exemple = { court: "Une API est un moyen pour un programme de demander", long: "Une API est un ensemble de règles qui permet à un programme d’en solliciter un autre. L’appelant envoie une requête et reçoit une réponse." }; (async () => { for (const limite of [12, 80]) { const obtenu = await labo.demander({ max_tokens: limite, messages: question }, limite === 12 ? exemple.court : exemple.long); const motif = obtenu.donnees ? obtenu.donnees.choices[0].finish_reason : (limite === 12 ? "length" : "stop"); console.log("max_tokens " + limite + " (" + obtenu.etiquette + "), finish_reason " + motif + " :"); console.log(" " + obtenu.texte.trim()); } })();'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 erreur fréquente
Attention
Beaucoup pensent qu’un petit max_tokens pousse le modèle à écrire plus court. Non : il coupe la réponse, souvent en pleine phrase. Pour une réponse plus courte, demandez-la dans la consigne. Gardez le plafond comme garde-fou, au-dessus de ce que vous attendez.
Le texte d’arrêt termine une réponse plus tôt
Un texte d’arrêt est un texte que vous choisissez. Quand le modèle s’apprête à l’écrire, la réponse se termine à la place, et le texte d’arrêt lui-même n’y figure pas.
Servez-vous-en pour garder une réponse à une ligne ou à un élément de liste. La plupart des API de modèles acceptent plusieurs textes d’arrêt à la fois.
Arrêter une liste avant le point trois
docker exec -w /home/node/project agent node -e 'const labo = require("./labo.js"); const question = [{ role: "user", content: "Écrivez les nombres de un à cinq en lettres, un par ligne, chaque ligne commençant par 1. 2. 3. et ainsi de suite." }]; (async () => { const obtenu = await labo.demander({ max_tokens: 60, stop: ["3."], messages: question }, "1. un\n2. deux\n"); console.log("Réponse (" + obtenu.etiquette + ") : " + JSON.stringify(obtenu.texte)); console.log("Contient-elle 3. ? " + obtenu.texte.includes("3.")); })();'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.
Pour aller plus loin : essayez vos réglages
Dans le Run de la longueur, remplacez la question par une des vôtres et essayez un max_tokens de 5, de 30 et de 200. Notez chaque fois le motif de fin.
Dites ensuite quelle valeur vous mettriez dans un vrai programme. Dites aussi pourquoi un plafond trop petit coûte plus cher qu’un plafond trop grand.