Cours Python · Module 10: IA et modèles de langage
Prompt Engineering - l'art des prompts
Dans cette leçon8
Imagine que tu disposes d'un stagiaire génial : il a lu la moitié d'internet, mais il ne lit pas dans les pensées et fera exactement ce que tu écris - ni plus, ni moins. Le Prompt Engineering, c'est l'art d'écrire des instructions efficaces pour l'IA afin qu'elle tombe juste du premier coup. Ce n'est ni de la construction de serveurs, ni de la création de bases de données, ni de la programmation en C++ : ici tu n'écris pas de code, tu écris des consignes. Trois piliers : sois précis, donne du contexte, spécifie le format.
Pilier 1 : sois précis
Une consigne vague donne une réponse vague. Plus tu décris étroitement ce que tu attends, plus le résultat tombe juste. Compare les deux versions ci-dessous : même sujet, deux niveaux de précision.
1# Mauvais - le stagiaire devra deviner ce que tu as en tete
2"Ecris quelque chose sur les animaux"
3
4# Bon - aucune place pour le doute
5"Ecris 3 paragraphes sur les comportements de chasse des lions africains,
6en te concentrant sur la cooperation au sein de la meute."La différence ne tient pas à la longueur mais à la précision : un nombre de paragraphes, un sujet délimité, un angle imposé. Bonne règle : si, après avoir lu ton prompt, un humain pouvait rédiger dix réponses complètement différentes, le modèle aussi devra deviner.
Pilier 2 : fournis du contexte
Ce même stagiaire t'aidera bien mieux s'il sait qui tu es et où tu en es. Le contexte réduit le champ des réponses possibles à ta situation à toi, et non à un cas d'école.
1# Mauvais - de quoi parle-t-on au juste ?
2"Comment est-ce que je corrige ca ?"
3
4# Bon - le modele sait qui demande et ce qui se passe
5"Je suis developpeur Python junior. Mon code FastAPI renvoie une erreur 422
6sur une requete POST. Voici le code : [code]. Comment le corriger ?"Qui pose la question, quelle technologie, quel symptôme exact : ces trois informations transforment un cours magistral générique en une réponse taillée sur mesure. Le modèle ne connaît pas ton projet, et tout ce que tu passes sous silence, il devra l'inventer.
Pilier 3 : spécifie le format
Si le résultat doit être relu par un programme, ne demande pas une « description » - montre la forme exacte que tu attends. Le modèle recopie fidèlement le gabarit que tu lui donnes.
1prompt = """
2Analyse le texte et renvoie le resultat au format JSON :
3{
4 "species": "nom scientifique",
5 "habitat": "milieu de vie",
6 "diet": "regime alimentaire",
7 "threats": ["liste des menaces"]
8}
9
10Texte : le lion africain vit dans les savanes...
11"""En fournissant le squelette JSON tout prêt, tu garantis presque que la réponse sera lisible par ton code sans nettoyage manuel. Remarque le champ threats : une valeur entre crochets annonce une liste, et le modèle respectera ce détail aussi. C'est la manière la plus simple de brancher une sortie de modèle directement dans une application.
Technique : le few-shot, ou enseigner par l'exemple
Quand tu veux un format de réponse reproductible, ne l'explique pas avec des mots - montre quelques exemples. Le few-shot prompting consiste précisément à fournir des exemples dans le prompt pour que le modèle comprenne le motif.
1prompt = """
2Classe les animaux :
3
4Animal : Lion
5Classification : Predateur
6
7Animal : Zebre
8Classification : Herbivore
9
10Animal : Elephant
11Classification :
12"""Deux exemples résolus en disent plus au modèle qu'un paragraphe d'instructions : il y lit le format, le style et le niveau de détail. En laissant la dernière classification vide, tu lui demandes de compléter le motif. Attention au nom : « few-shot » ne veut dire ni envoyer plusieurs requêtes, ni utiliser des prompts courts, et encore moins tirer sur une cible - le « shot » désigne ici un exemple résolu, et ils tiennent tous dans un seul prompt.
Technique : la chain of thought, ou penser à voix haute
Sur les tâches qui demandent du raisonnement, le modèle se trompe plus souvent quand il répond d'un seul trait. Demande-lui de détailler les étapes, comme un élève qui pose son calcul au tableau.
1prompt = """
2Resous le probleme etape par etape :
3
4Probleme : le Safari compte 15 lions et 23 elephants.
5Chaque jour, 2 lions arrivent et 1 elephant part.
6Quel sera le nombre total apres 5 jours ?
7
8Solution :
9Etape 1 : compter le total au depart...
10"""La Chain of Thought (CoT), c'est exactement cela : demander au modèle de « réfléchir étape par étape » au lieu de le laisser lâcher un résultat au hasard. Malgré le mot « chain », elle n'a rien à voir avec une blockchain pour l'IA, une chaîne de serveurs ou un type de base de données - la seule chaîne dont on parle est celle des étapes de raisonnement. En maths et en logique, cette seule astuce améliore nettement la justesse.
Technique : le role prompting, ou attribuer un rôle
Tu peux fixer au modèle le point de vue depuis lequel il doit répondre. Cela se joue dans le message système, celui qui donne le ton de toute la conversation.
1system_prompt = """
2Tu es un guide de Safari experimente avec 20 ans de terrain.
3Tu reponds avec enthousiasme, en partageant des anecdotes vecues.
4Tu privilegies toujours la securite des touristes.
5"""Attribuer un rôle ne change pas les faits, mais le style et les priorités de la réponse : le même modèle sonne tantôt comme une encyclopédie sèche, tantôt comme un conteur du bush. C'est le moyen le plus rapide d'adapter le ton à ton public.
Les modèles de prompts - un prompt réutilisable
Quand tu lances le même prompt sur des dizaines de données, ne colle pas des chaînes à la main : construis un modèle de prompt avec des placeholders, c'est-à-dire des trous à remplir. En Python, le string Template fait exactement ce travail.
1from string import Template
2
3template = Template("""
4Tu es expert en $field. Analyse le $data_type suivant :
5
6$data
7
8Renvoie : 1. Observations 2. Problemes 3. Recommandations
9""")
10
11prompt = template.substitute(
12 field="ecologie du Safari",
13 data_type="rapport de population",
14 data="Lions : 45, Elephants : 120, Girafes : 78"
15)Template remplace $field, $data_type et $data par les valeurs passées à substitute() - tu gardes ainsi un seul prompt éprouvé pour de nombreuses entrées, au lieu de dix variantes recollées à la main.
ChatPromptTemplate - le modèle version LangChain
Les bibliothèques d'IA ont leur propre version du même principe. Dans LangChain, que tu découvriras dans la leçon suivante, on écrit d'abord l'import from langchain.prompts import ChatPromptTemplate, puis on appelle ChatPromptTemplate.from_messages(...) en lui passant une liste de tuples [(...)] - un tuple par message, avec son rôle.
1from langchain.prompts import ChatPromptTemplate
2
3template = ChatPromptTemplate.from_messages([
4 ("system", "Tu es un guide de Safari experimente."),
5 ("human", "Parle-moi de {animal}.")
6])L'ordre à retenir est toujours le même : le nom de la classe, puis .from_messages(, puis la liste [(...)], puis la parenthèse fermante. Le rôle system fixe le personnage - c'est le role prompting du paragraphe précédent - et {animal} est le placeholder rempli au moment de l'exécution.
Bonnes habitudes pour finir
Quelques règles qui t'épargneront de la frustration : traite-les comme une checklist au moment d'écrire un prompt.
1# 1. Separe les sections pour que le prompt reste lisible par le modele
2prompt = """
3### Instructions ###
4Analyse le code ci-dessous et trouve le bug.
5
6### Code ###
7def calculate(): pass
8
9### Format de reponse ###
10- En quoi consiste le bug
11- La version corrigee
12"""
13
14# 2. Dis aussi ce que tu NE veux PAS
15"Reponds brievement, sans preambule du type Bien sur, voici..."
16
17# 3. Adapte la temperature a la tache :
18# temperature=0 -> code et faits (reproductible)
19# temperature=0.7 -> texte creatif (varie)Les en-têtes ### ... ### aident le modèle à distinguer l'instruction des données, et préciser ce que tu ne veux pas compte souvent autant que la consigne elle-même. La température, elle, règle la part de hasard : pour du code tu veux toujours la même réponse correcte, pour une histoire une pincée de fantaisie. En revanche, aucune règle du Prompt Engineering ne consiste à compiler les prompts en code machine - un prompt n'est jamais compilé, il part tel quel, en texte, vers le modèle.
Retiens l'essentiel de cette leçon : tu écris à un stagiaire doué qui ne lit pas dans les pensées. Sois précis, donne du contexte, spécifie le format - et quand la tâche devient difficile, ajoute des exemples ou fais-le réfléchir étape par étape.
Tu as repéré une erreur dans cette leçon ?
Teste tes connaissances
Réponds aux questions de cette leçon. Choisis une réponse pour voir tout de suite si elle est correcte.
1. Qu'est-ce que le Prompt Engineering ?
2. Qu'est-ce que la technique du Few-shot prompting ?
Voici 2 des 4 questions de cette leçon. Réponds aux autres dans le jeu.
Tâches pratiques dans le jeu
- Éditeur de code
Utilise un string Template pour créer un modèle avec des variables.
- Tri horizontal
Range les éléments :
- Clique dans l'ordre
Clique dans le bon ordre :