Chapitre 414 minDébutant
Écrire un bon prompt : méthode et exemples
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- construire un prompt avec un contexte, une tâche, des contraintes et un format ;
- guider le modèle avec des exemples (few-shot) ;
- écrire le prompt système d'une application ;
- améliorer un prompt par itérations.
3 exercices corrigés
Un prompt est la demande que tu adresses à un modèle d'IA générative : la consigne, le contexte et les données qu'il doit traiter. Le prompt engineering, ou ingénierie de prompt, est la méthode qui consiste à écrire puis améliorer cette demande pour obtenir une réponse juste, au bon format, sans dix allers-retours. Ce chapitre te donne une structure en six éléments, des prompts complets pour le SLAM et le SISR, et les erreurs à éviter.
Les six éléments d'un bon prompt
Un modèle ne connaît ni ton entreprise, ni tes versions, ni ce que tu as déjà essayé. Tout ce qu'il ne lit pas dans le prompt, il le devine, et il devine la situation la plus courante, pas la tienne.
| Élément | La question à laquelle il répond | Exemple |
|---|---|---|
| Contexte | Qui demande, dans quelle situation, avec quel environnement et quelles versions ? | « Je suis technicien dans une PME. Contrôleur de domaine sous Windows Server 2025, PowerShell 5.1 avec le module ActiveDirectory. » |
| Tâche | Que faut-il produire ? Un verbe d'action précis | « Écris un script qui… », « Explique cette erreur… », « Propose trois cas de test… » |
| Données | Sur quoi travailler ? | Le message d'erreur complet, le code, le schéma de la base, un extrait de documentation |
| Contraintes | Ce qu'il faut respecter ou éviter | « Aucun mot de passe dans le script », « Uniquement les colonnes fournies », « Niveau débutant » |
| Format | La forme de la réponse | « Le code seul, puis une explication bloc par bloc », « Un tableau à trois colonnes », « Du JSON valide » |
| Exemples | À quoi ressemble une bonne réponse ? | Deux ou trois couples entrée → sortie attendue |
Ajoute un critère de réussite quand c'est possible : « Le script doit pouvoir être relancé sans créer de doublons. » Il guide le modèle et te donne de quoi tester la réponse.
Un prompt SISR, avant et après
Avant :
Fais-moi un script pour créer des utilisateurs dans l'AD.
L'assistant va inventer un format de fichier, une OU, peut-être écrire un mot de passe en clair dans le script, et ne gérera pas les comptes qui existent déjà.
Après :
Contexte : je suis technicien au service informatique d'une PME. Domaine Active Directory
ad.sorbier.example, contrôleur de domaine sous Windows Server 2025, PowerShell 5.1 avec le
module ActiveDirectory.
Tâche : écris un script PowerShell qui crée les comptes des nouveaux arrivants à partir d'un
fichier CSV.
Données : le fichier arrivees.csv, séparateur point-virgule, encodé en UTF-8 :
Prenom;Nom;Service;Fonction
Paul;Martin;Comptabilite;Comptable
Contraintes :
- login = initiale du prénom + nom, en minuscules, sans accents ni espaces ;
- compte créé dans OU=<Service>,OU=Utilisateurs,OU=Sorbier,DC=ad,DC=sorbier,DC=example ;
- si le login existe déjà, ne rien créer et afficher un avertissement ;
- mot de passe initial aléatoire de 16 caractères, à changer à la première connexion,
jamais écrit en clair dans le script ;
- le script doit accepter -WhatIf pour un essai à blanc.
Format : le script complet et commenté, puis une explication de chaque bloc en une phrase,
puis la liste des droits AD nécessaires pour l'exécuter.
La réponse sera plus longue à lire, mais elle correspondra à ton domaine, à ton fichier et à tes règles. Compare-la au script du cours Windows Server : c'est un bon exercice de relecture.
Un prompt SLAM, avant et après
Avant :
Donne-moi la requête SQL pour avoir les tickets ouverts par service.
L'assistant va inventer des noms de tables et de colonnes. La requête aura l'air juste et échouera sur ta base.
Après :
Contexte : base MySQL 8.4 de gestion de parc. Schéma utile :
service (id_service, code, libelle, etage)
employe (id_employe, nom, prenom, email, telephone, date_embauche, #id_service, #id_responsable)
ticket (id_ticket, titre, date_ouverture, date_cloture, priorite, statut, #id_demandeur, #id_poste)
ticket.id_demandeur référence employe.id_employe. statut vaut 'ouvert', 'en_cours' ou 'resolu'.
Tâche : écris la requête qui donne, pour chaque service, le nombre de tickets non résolus
de ses employés, y compris les services qui n'en ont aucun.
Contraintes : utilise uniquement les tables et colonnes ci-dessus. Pas de sous-requête.
Format : la requête seule, puis une phrase pour chaque jointure, puis le piège à éviter
avec COUNT.
Le schéma fourni empêche l'invention de colonnes, et « y compris les services qui n'en ont aucun » oriente vers une jointure externe. Tu reconnais la base parc du cours SQL : vérifie la requête proposée en l'exécutant.
Le prompt système d'une application
Quand tu intègres un modèle dans une application (chapitre 7), tu écris un prompt système : des consignes envoyées avant chaque conversation, que l'utilisateur ne voit pas. Il fixe le rôle, le périmètre, le ton et le format.
Tu es l'assistant du support informatique de Sorbier Logistique. Tu aides les salariés,
qui ne sont pas informaticiens, à résoudre les problèmes courants de leur poste de travail.
Règles :
- Réponds en français, en cinq étapes au plus, avec des phrases courtes.
- Ne donne que des manipulations sans risque pour un utilisateur : redémarrer, vérifier
un câble, vider la file d'impression. Jamais de commande d'administration.
- Si le problème demande un technicien, ou si tu n'es pas sûr, dis-le et propose
d'ouvrir un ticket.
- Ne demande jamais de mot de passe et n'en accepte aucun.
- Si la question ne concerne pas l'informatique du poste de travail, réponds que tu ne
peux pas aider sur ce sujet.
Donner des exemples : le few-shot
Sans exemple, on parle de prompt zero-shot : le modèle comprend la tâche à partir de la consigne seule. Avec quelques exemples, on parle de few-shot : le modèle imite leur forme. C'est la méthode la plus fiable pour obtenir un format strict, comme une classification que ton code va lire.
Classe chaque demande d'assistance. Réponds uniquement par un objet JSON avec deux clés :
"categorie" (poste, imprimante, reseau, compte, logiciel) et "priorite" (basse, normale,
haute, critique).
Demande : Je n'arrive plus à me connecter à ma session depuis ce matin.
Réponse : {"categorie": "compte", "priorite": "haute"}
Demande : L'imprimante du 1er étage imprime des pages blanches.
Réponse : {"categorie": "imprimante", "priorite": "normale"}
Demande : Plus personne n'a Internet à l'entrepôt de Mâcon.
Réponse : {"categorie": "reseau", "priorite": "critique"}
Demande : Mon écran clignote quand je déplace une fenêtre.
Réponse :
Choisis des exemples variés, qui couvrent les cas limites, et vérifie que ton code accepte une réponse mal formée : un modèle peut ajouter une phrase avant le JSON. Les API proposent aussi des sorties structurées qui forcent le respect d'un schéma JSON ; avec Ollama, c'est le champ format.
Structurer un long prompt
Quand tu fournis un long document, sépare clairement les données des consignes, par exemple avec des balises :
<procedure>
(le texte de la procédure de sauvegarde, 3 pages)
</procedure>
<journal>
(les 40 dernières lignes du journal de la sauvegarde de cette nuit)
</journal>
Compare le journal à la procédure. Liste les étapes de la procédure qui n'apparaissent pas
dans le journal, avec pour chacune la ligne de la procédure concernée.
Mets les documents d'abord et la question à la fin, comme dans cet exemple : les modèles traitent mieux une longue entrée quand la demande arrive après les données. Les balises ont un second intérêt : elles aident le modèle à traiter le contenu d'un document comme des données, pas comme des consignes. C'est une protection partielle contre l'injection de prompt, pas une garantie.
Faire réfléchir, faire poser des questions
Trois formules changent souvent la qualité de la réponse :
- « Avant de répondre, pose-moi les questions qui te manquent. » Le modèle liste ce qu'il aurait deviné : la version, le nombre d'utilisateurs, la contrainte de budget.
- « Propose deux solutions et compare-les sur la sécurité, la complexité et le coût. » Tu évites de prendre la première idée pour la seule.
- « Liste les hypothèses que tu fais. » Les erreurs se cachent souvent dans une hypothèse fausse : « je suppose que le serveur est sous Debian ».
Avec un modèle de raisonnement (chapitre 3), inutile d'écrire « réfléchis étape par étape » : il le fait déjà. Décris plutôt précisément le problème et le résultat attendu.
Itérer
La première réponse est un brouillon. Quand elle ne convient pas, demande-toi quel élément manquait au prompt plutôt que de répéter « non, refais » :
| Ce qui ne va pas | Ce qu'il faut ajouter au prompt |
|---|---|
| La réponse est générique | Le contexte : versions, environnement, contraintes de l'entreprise |
| Elle utilise des noms qui n'existent pas chez toi | Les données : schéma, extrait de code, nom exact des objets |
| Elle est trop longue ou mal présentée | Le format attendu, avec un exemple |
| Elle fait autre chose que ce que tu voulais | Une tâche plus précise, découpée en étapes |
| Elle invente des détails | « Si l'information manque, dis-le » et une source fournie |
Au bout d'une dizaine d'échanges qui patinent, repars d'une conversation neuve avec un prompt complet : l'historique encombré gêne plus qu'il n'aide. Garde les prompts qui fonctionnent dans un fichier prompts.md de ton dépôt : ce sont des outils, comme des scripts.
Les erreurs classiques
- Plusieurs tâches dans un seul prompt : le modèle en traite une bien et bâcle les autres.
- Des contraintes contradictoires : « explique en détail, en trois lignes ».
- Des données sensibles : un mot de passe, un fichier de clients, une configuration réelle (chapitre 12).
- Une prémisse fausse dans la question (chapitre 3).
- « Fais comme un expert » sans dire ce qu'un expert ferait ici : un rôle seul n'apporte presque rien, le contexte et les contraintes font le travail.
Exercices
Exercice 1 sur 3 Améliorer un prompt SLAM Réussi À revoir
Inès écrit à un assistant : « Mon formulaire de connexion ne marche pas, corrige. » Son application est en PHP 8.4 avec PDO et MySQL. Quand elle saisit un identifiant et un mot de passe justes, la page affiche « Identifiants incorrects ». Les mots de passe sont enregistrés hachés avec password_hash.
Réécris son prompt avec les six éléments de la méthode.
Voir la réponseMasquer la réponse de l'exercice 1
Une version possible :
Contexte : application web en PHP 8.4, connexion à MySQL 8.4 avec PDO. Les mots de passe
sont enregistrés avec password_hash() dans la colonne mdp_hash (VARCHAR(255)) de la table
utilisateur.
Problème : avec un identifiant et un mot de passe justes, la page affiche « Identifiants
incorrects ». Aucun message d'erreur PHP.
Données : voici le code du traitement du formulaire (login.php) :
(le code)
Tâche : trouve la cause la plus probable et propose la correction.
Contraintes : garde la requête préparée ; n'affiche jamais si c'est l'identifiant ou le
mot de passe qui est faux.
Format : la cause en une phrase, la ou les lignes corrigées, puis comment vérifier la
correction.
Le contexte (versions, password_hash), le comportement observé et attendu, le code et les contraintes de sécurité permettent au modèle de chercher les causes classiques : une comparaison directe au lieu de password_verify(), ou une colonne trop courte qui tronque le hachage.
Tu avais trouvé ?
Exercice 2 sur 3 Un prompt few-shot Réussi À revoir
Moussa veut qu'un modèle lise les objets des courriels arrivés sur l'adresse du support et dise s'il s'agit d'une demande (une personne a besoin de quelque chose), d'un incident (quelque chose ne marche plus) ou d'autre chose. Son script lira la réponse. Écris le prompt few-shot, avec trois exemples.
Voir la réponseMasquer la réponse de l'exercice 2
Classe l'objet de chaque courriel envoyé au support informatique en "demande",
"incident" ou "autre". Réponds uniquement par un de ces trois mots, en minuscules,
sans ponctuation.
Objet : Création d'un compte pour le stagiaire de lundi
Type : demande
Objet : Le VPN coupe toutes les dix minutes
Type : incident
Objet : Pot de départ de Nadia vendredi
Type : autre
Objet : {objet du courriel à classer}
Type :
Les trois exemples couvrent les trois classes et imposent le format. Le script doit quand même vérifier que la réponse est l'un des trois mots attendus, et ranger dans « à trier à la main » tout le reste.
Tu avais trouvé ?
Exercice 3 sur 3 Ce qui manque Réussi À revoir
Voici le prompt de Lucas : « Tu es un expert réseau. Explique-moi comment configurer le DHCP. » Cite trois informations qui manquent pour obtenir une réponse utilisable, et dis ce que l'assistant risque de faire sans elles.
Voir la réponseMasquer la réponse de l'exercice 3
Parmi les informations manquantes :
- le système et le logiciel : DHCP de Windows Server, de pfSense,
isc-dhcp-serverou Kea sous Linux, d'une box ? Sans cela, l'assistant choisit l'outil le plus courant dans ses données, qui n'est peut-être pas le tien ; - le plan d'adressage : réseau, plage à distribuer, passerelle, serveurs DNS, baux réservés ;
- l'architecture : un seul réseau ou des VLAN avec un relais DHCP sur la passerelle ? Un serveur ou deux en basculement ?
- le format attendu : une procédure pas à pas, des commandes, une explication du protocole ?
Sans ces informations, il produit une explication générique, souvent pour un autre logiciel, avec un plan d'adressage inventé. Le rôle « expert réseau » n'y change rien.
Tu avais trouvé ?