Aller au contenu
Développement high

Prompt Engineering : les fondamentaux pour des résultats fiables

60 min de lecture

Un prompt mal formulé produit des résultats vagues ou incorrects. Ce guide vous donne les fondamentaux du prompt engineering pour obtenir des réponses précises, cohérentes et adaptées à vos besoins. Vous apprendrez à structurer vos requêtes avec des rôles, styles et exemples stratégiques.

  • Qu'est-ce qu'un prompt et pourquoi sa formulation est critique
  • Rôles (Persona) : donner une expertise au modèle
  • Styles et tons : adapter la réponse à l'audience
  • Tâches structurées : cadrer précisément le livrable attendu
  • Zero-shot, one-shot, few-shot : quand fournir des exemples
  • Chain-of-Thought basique : déclencher le raisonnement explicite
  • Patterns réutilisables : industrialiser vos prompts

Un prompt est le texte que vous envoyez à un LLM pour obtenir une réponse. Cela peut aller d'une question simple à une instruction complexe combinant contexte, format, style et rôle.

Exemple simple :
"Quels sont les pays limitrophes de la France ?"
Exemple structuré :
"Agis comme un professeur de géographie. Fais une liste numérotée
des pays limitrophes de la France avec une brève description de chacun."

Pourquoi l'engineering est nécessaire ?

ProblèmeConséquence
Trop courtRéponse imprécise
Trop flouL'IA doit deviner vos intentions
Trop chargéConfusion ou dépassement de contexte

Un prompt bien construit réduit ces risques et améliore la qualité des réponses.

Attribuer un rôle au modèle améliore la cohérence et la pertinence. Cette technique, appelée persona prompting, consiste à demander à l'IA d'adopter l'expertise d'un professionnel.

Les trois onglets ci-dessous montrent le même mécanisme décliné pour des métiers différents. Observez leur structure commune : une identité (le métier), un niveau d'expérience chiffré, et une tâche immédiate. C'est le niveau d'expérience qui oriente le plus la réponse, car il pousse le modèle vers un vocabulaire et une profondeur d'analyse cohérents avec ce profil.

Tu es un architecte logiciel senior avec 10 ans d'expérience
en microservices. Analyse cette architecture et propose des
améliorations.
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{
"role": "system",
"content": "Tu es un expert DevOps senior avec 10 ans d'expérience."
},
{
"role": "user",
"content": "Comment configurer un HPA Kubernetes pour scaler sur la mémoire ?"
}
],
temperature=0.3
)
print(response.choices[0].message.content)

Le style et le ton influencent la présentation de l'information. Selon votre audience, demandez des réponses formelles, techniques ou vulgarisées.

Le style ne change pas le fond de la réponse, seulement sa présentation et son niveau de langue. Repérez dans chaque directive le mot qui porte la contrainte : « formelle », « références », « métriques », « 3 bullet points ». Ce sont ces termes précis, et non l'ambiance générale, qui pilotent réellement la sortie du modèle. Une directive vague comme « sois clair » produit des résultats bien moins prévisibles qu'une contrainte mesurable comme « en 3 points maximum ».

StyleExemple de directive
Académique"Rédigez une analyse formelle avec références"
Décontracté"Explique-moi simplement, sans jargon, comme dans un échange informel"
Technique"Fournissez des métriques quantitatives et du code"
Concis"Réponds en 3 bullet points maximum"

Là où le style commande la forme, le ton ajuste la posture du modèle vis-à-vis du lecteur. Ces modificateurs se combinent avec un style : on peut demander une réponse à la fois « technique » et « pédagogique ». Le plus utile en documentation reste le registre pédagogique, qui pousse le modèle à définir les termes au lieu de les présupposer connus.

  • Pédagogique : "Explique simplement", "comme à un débutant"
  • Professionnel : "En respectant les codes de l'entreprise"
  • Pragmatique : "Avec des exemples pratiques et le code"
# Style concis et technique
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{
"role": "system",
"content": "Tu es un expert Kubernetes. Réponds de manière concise avec le code nécessaire."
},
{
"role": "user",
"content": "Comment lister les pods en erreur dans tous les namespaces ?"
}
],
temperature=0.0
)

Définir explicitement la tâche cadre la réponse et améliore la qualité. Utilisez des verbes d'action clairs et spécifiez le livrable attendu.

Cadrer une tâche revient à répondre à quatre questions dans l'ordre, du plus général au plus précis. Ne sautez pas la dernière : les critères (longueur, exhaustivité) sont ce que les auteurs de prompts oublient le plus souvent, alors que leur absence explique la plupart des réponses « à côté ». Une tâche sans livrable ni critère laisse le modèle choisir à votre place le format et le niveau de détail.

  1. Verbe d'action : analyser, résumer, transformer, comparer
  2. Périmètre : quelles données, quelles contraintes
  3. Livrables : format de sortie, éléments obligatoires
  4. Critères : précision, exhaustivité, longueur

Voici les quatre dimensions réunies dans un prompt réel. Remarquez la séparation visuelle en blocs étiquetés (TÂCHE, FORMAT, CONTRAINTE) : cette mise en forme aide le modèle à ne pas confondre l'instruction principale avec ses paramètres. La contrainte de sévérité (critique/majeur/mineur) impose au passage une grille de classement, ce qui rend les réponses comparables d'une exécution à l'autre.

TÂCHE : Analysez ce code Python et identifiez :
1) Les potentiels bugs
2) Les optimisations possibles
3) Les bonnes pratiques manquantes
FORMAT : Liste numérotée avec sévérité (critique/majeur/mineur)
CONTRAINTE : Maximum 10 points

La vraie puissance vient de la combinaison des trois dimensions :

prompt = """
Tu es un consultant en transformation digitale [RÔLE]
Adopte un ton professionnel mais accessible [STYLE]
Analyse cette stratégie IT et propose un plan d'action
en 5 étapes concrètes avec budget estimatif [TÂCHE]
Stratégie : Migration vers Kubernetes d'une application monolithique
hébergée sur des VMs on-premise.
"""
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}],
temperature=0.3
)

Le shot prompting consiste à fournir des exemples pour guider la réponse. Le choix de la technique dépend de la complexité de la tâche.

Le modèle répond directement sans guidance spécifique :

# Zero-shot - tâches simples
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{
"role": "user",
"content": "Traduis 'Hello, how are you?' en français."
}]
)
# Réponse : "Bonjour, comment allez-vous ?"

Avantage : Rapide, direct, efficace pour les tâches simples. Limite : Peut mal interpréter des consignes complexes.

On fournit un seul exemple pour orienter le format :

prompt = """
Exemple :
Q : Quelle est la capitale de l'Italie ?
R : Rome
Maintenant à toi :
Q : Quelle est la capitale de l'Espagne ?
R :"""
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}]
)
# Réponse : "Madrid"

On fournit 2 à 5 exemples pour solidifier le pattern :

prompt = """
Convertis ces descriptions en commandes kubectl :
Description : Lister tous les pods
Commande : kubectl get pods -A
Description : Voir les logs du pod nginx
Commande : kubectl logs nginx
Description : Supprimer le deployment app-web
Commande :"""
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}]
)
# Réponse : "kubectl delete deployment app-web"

Ce tableau résume quand basculer d'une technique à l'autre. La logique est graduelle : commencez toujours en zero-shot, le moins coûteux en tokens, et n'ajoutez des exemples que si le résultat dérive. La colonne Risques est celle qui doit guider votre choix, car chaque technique a un défaut propre, l'ambiguïté du zero-shot ou le coût en tokens du few-shot, qu'il faut accepter en connaissance de cause.

TechniqueIdéal pourRisques
Zero-shotTâches simples, réponses génériquesAmbiguïté
One-shotFormat ou ton particulierExemple insuffisant
Few-shotStructure spécifique, logique complexeCoût en tokens

La chaîne de pensée encourage le modèle à expliciter son raisonnement avant de donner la réponse finale. Cette technique améliore la précision sur les tâches de raisonnement.

La version la plus simple : ajouter une instruction de raisonnement.

problem = """
Un serveur a 16 Go de RAM. L'application utilise 2 Go.
Si je déploie 6 instances, quelle RAM reste-t-il ?
"""
# Sans CoT
prompt_simple = f"Réponds : {problem}"
# Avec CoT
prompt_cot = f"""Résous ce problème étape par étape.
Montre ton raisonnement avant la réponse finale.
{problem}"""
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt_cot}],
temperature=0.0
)

Sortie typique :

1. RAM totale : 16 Go
2. RAM par instance : 2 Go
3. Nombre d'instances : 6
4. RAM utilisée : 6 × 2 = 12 Go
5. RAM restante : 16 - 12 = 4 Go
Réponse : Il reste 4 Go de RAM.

Fournir des exemples avec raisonnement pour guider le format :

prompt = """
Q : J'ai 5 conteneurs, j'en arrête 2, puis j'en démarre 3. Combien en ai-je ?
Raisonnement :
- Je commence avec 5 conteneurs
- J'en arrête 2 → il en reste 3
- J'en démarre 3 → total = 3 + 3 = 6
Réponse : 6
Q : J'ai 8 pods, 3 crashent, j'en redémarre 5. Combien sont actifs ?
Raisonnement :"""

Les prompt patterns sont des structures réutilisables, analogues aux design patterns en programmation. Ils permettent d'industrialiser vos prompts.

Définir l'IA comme un expert pour assurer cohérence et expertise :

Tu es un nutritionniste vétéran avec 15 ans d'expérience.
Analyse mes rapports de santé et donne des recommandations personnalisées.

L'IA propose une version améliorée de votre question :

À partir de maintenant, chaque fois que je pose une question,
propose une version plus précise et complète, puis demande-moi
si je souhaite utiliser cette version améliorée.

Générer automatiquement du code pour appliquer les suggestions :

Tu es un expert DevOps. Chaque fois que tu suggères une modification,
génère aussi un script Python ou Bash pour l'automatiser.

Le module Template de la bibliothèque standard Python remplace des variables $domain, $environment dans une chaîne, sans dépendance externe. L'intérêt ici n'est pas le code mais la séparation entre la structure fixe du prompt, écrite une fois, et les valeurs variables injectées à chaque appel. Ce découpage évite de réécrire un prompt complet pour chaque incident et garantit que tous vos diagnostics suivent le même format de sortie.

from string import Template
DEVOPS_TEMPLATE = Template("""
Tu es un expert $domain avec 10 ans d'expérience.
## Contexte
- Environnement : $environment
- Stack : $stack
## Tâche
$task
## Format de réponse
1. Diagnostic en 2 lignes
2. Solution avec commandes
3. Validation
""")
prompt = DEVOPS_TEMPLATE.substitute(
domain="Kubernetes",
environment="Production GKE",
stack="Helm, ArgoCD, Prometheus",
task="Diagnostiquer les pods en CrashLoopBackOff"
)

Pour les systèmes RAG (Retrieval-Augmented Generation), le prompt engineering définit comment le modèle doit utiliser le contexte récupéré.

Tu es un assistant expert en $domaine.
Utilise UNIQUEMENT les informations du contexte ci-dessous.
Si la réponse ne s'y trouve pas, dis-le clairement.
CONTEXTE :
{documents récupérés}
QUESTION :
{question utilisateur}
INSTRUCTIONS :
- Réponds de manière concise
- Cite les parties du contexte qui soutiennent ta réponse
- N'utilise pas tes connaissances préexistantes

Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

6 questions
6 min.
70% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

  • Rôle (Persona) : Donnez une expertise au modèle avec le system prompt
  • Style : Adaptez le ton à l'audience (technique, pédagogique, concis)
  • Tâche : Cadrez précisément avec verbe d'action + livrables + contraintes
  • Zero-shot : Tâches simples, sans exemple
  • Few-shot : Fournissez 2-5 exemples pour les formats complexes
  • CoT : Ajoutez "étape par étape" pour le raisonnement
  • Patterns : Créez des templates réutilisables pour industrialiser
  • RAG : Définissez clairement comment utiliser le contexte

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn