Quatre parties font un prompt clair
Un prompt est le texte que vous envoyez à un modèle de langage. Le modèle ne lit que ce texte. Il ne peut pas deviner ce que vous vouliez ajouter.
« Parlez-moi du match » donne une réponse différente à chaque fois. Un prompt avec un rôle, une tâche, des limites et une forme de réponse donne un résultat que vous pouvez utiliser.
À la fin de cette leçon
Remarque
Je peux transformer une demande vague en prompt avec un rôle, une tâche, des limites et une forme de réponse.
Mots clés
| Mot | Ce que ça veut dire |
|---|---|
| Prompt | le texte que vous envoyez à un modèle |
| Rôle | qui le modèle doit jouer |
| Tâche | le seul travail à faire maintenant |
| Limites | ce que la réponse ne doit pas dépasser |
| Forme de réponse | la forme que la réponse doit prendre |
| Liste de contrôle | une liste de points à cocher |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Quelles sont les quatre parties d’un prompt ?
Le rôle dit qui joue le modèle. La tâche dit le seul travail à faire. Les limites disent ce qu’il ne doit pas dépasser, comme la longueur ou les sources. La forme de réponse dit la forme voulue, comme une phrase ou une liste.
Mettez chaque partie sur sa propre ligne, avec une étiquette. Une étiquette rend le prompt facile à lire et facile à vérifier.
La même demande, mal écrite puis bien écrite
| Partie | Vague | Claire |
|---|---|---|
| Rôle | (rien) | Vous êtes journaliste d’un club de foot. |
| Tâche | Parlez-moi du match. | Écrivez une brève sur le résultat ci-dessous. |
| Limites | (rien) | Une seule phrase. Utilisez seulement les faits donnés. |
| Forme de réponse | (rien) | Texte simple, sans titre. |
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 vérificateur de prompt, partie 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { demander } = require(\"./model\");' 'const vague = \"Parlez-moi du match.\";' 'const bon = [' ' \"Rôle : Vous êtes journaliste d’un club de foot.\",' ' \"Tâche : Écrivez une brève sur le résultat ci-dessous.\",' ' \"Limites : Une seule phrase. Utilisez seulement les faits donnés.\",' ' \"Forme : Texte simple, sans titre.\",' ' \"Faits : Les Lions de Lyon 3, Les Aigles de Tours 1. Deux buts de Sami.\",' '].join(\"\n\");' > clarte1.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 vérificateur de prompt, partie 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const PARTIES = [\"Rôle\", \"Tâche\", \"Limites\", \"Forme\"];' 'function manquantes(prompt) {' ' const lignes = prompt.split(\"\n\");' ' const absentes = [];' ' for (const partie of PARTIES) {' ' const present = lignes.some(function (l) {' ' return l.startsWith(partie + \" : \") && l.trim().length > partie.length + 2;' ' });' ' if (present === false) absentes.push(partie);' ' }' ' return absentes;' '}' >> clarte1.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 vérificateur de prompt, partie 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' ' for (const p of [vague, bon]) {' ' const absentes = manquantes(p);' ' console.log(\"score \" + (4 - absentes.length) + \" sur 4, il manque : \" + (absentes.join(\", \") || \"rien\"));' ' }' ' const echantillon = \"Les Lions de Lyon ont battu Les Aigles de Tours 3 à 1, avec deux buts de Sami.\";' ' const reponse = await demander([{ role: \"user\", content: bon }], echantillon, 60);' ' console.log(\"modèle : \" + reponse.texte);' '}' 'main();' >> clarte1.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 noter deux prompts
docker exec -w /home/node/project agent node clarte1.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
Les deux premières lignes notent le prompt vague et le prompt écrit. Le vague obtient 0 sur 4 et il lui manque les quatre parties. Le prompt écrit obtient 4 sur 4.
La dernière ligne est une courte réponse du modèle du labo. Sans modèle, un Échantillon enregistré s’affiche d’abord. Les mots d’une réponse peuvent changer à chaque Run, et c’est normal.
Une erreur courante
Attention
Beaucoup pensent qu’un prompt plus long est un meilleur prompt. Ce n’est pas vrai. Un prompt est meilleur quand chaque partie est présente et dit une seule chose. Ajoutez une ligne seulement si elle limite la réponse ou lui donne une forme.