Aller au contenu

L'Art du Prompt Engineering

10 min de lecture

Source : L’art du prompting selon Lee Boonstra — Tech Lead chez Google

Décris le prompt engineering sous forme de haiku en français.

Un prompt n’est pas une simple phrase. Pour structurer vos prompts, on va utiliser des techniques de prompting — des frameworks mnémoniques. La méthode ACTIF de Matthieu Corthesy (actif.numedu.org) propose un cadre simple et efficace :

ÉlémentDescriptionExemple
ActionL’objectif, ce que vous voulez”Rédige un article de blog”
ContexteLes informations de fond”Mon entreprise vend des chaussures éco-responsables”
TonalitéLe style, l’ambiance”Ton professionnel mais accessible”
IdentitéLe rôle de l’IA”Tu es un expert en marketing digital”
FormatLa structure de sortie”Article de 500 mots avec 3 sections”

Exemple complet :

[Identité] Tu es un expert en marketing digital spécialisé dans l'éco-responsabilité.
[Action] Rédige un article de blog pour promouvoir notre nouvelle collection.
[Contexte] Mon entreprise vend des chaussures fabriquées à partir de matériaux recyclés.
[Tonalité] Utilise un ton professionnel mais accessible, engageant.
[Format] Article de 500 mots avec introduction, 3 bénéfices clés, et conclusion.

Ressource : Guide complet de la méthode ACTIF

  • Le prompt doit être clair et précis : le choix des mots est essentiel
  • Le prompt inclut un contexte, des informations de fond pertinentes
  • Le prompt définit la sortie attendue, via un template par exemple
  • Le prompt définit la profondeur de raisonnement et de réflexion

Un guide complet pour approfondir le sujet : promptingguide.ai

Il existe deux types de prompts : le System Prompt et le User Prompt.

  • Le System Prompt définit le rôle du modèle et les règles à respecter. C’est l’instruction invisible, définie par le développeur, qui conditionne le modèle avant même que l’utilisateur ne parle.
  • Le User Prompt définit la demande de l’utilisateur — ce que vous tapez dans le chat.

Pour des exemples de system prompts :

Au final, les deux prompts sont concaténés pour former le prompt final :

[CONTEXTE TOTAL = Limite technique (ex: 128K tokens)]
├── 📜 SYSTEM PROMPT
│ (Instructions permanentes : rôle, style, règles)
├── ❓ USER PROMPT
│ (Requête actuelle)
└── 💬 OUTPUT
(Réponse générée en cours, token par token)

Imaginez la Context Window comme la “mémoire vive” du modèle à un instant T : le nombre maximum d’informations (mesuré en tokens) que l’IA peut traiter en une seule fois.

Ce “budget” de tokens est partagé entre trois éléments :

  • Votre entrée (Prompt) : Ce que vous demandez
  • La sortie (Output) : Ce que l’IA répond
  • L’historique : Tous les messages précédents de la conversation

La taille de cette fenêtre varie selon les modèles. Par exemple, GPT-4 Turbo possède une fenêtre de 128K tokens — l’équivalent d’un livre de 300 pages (votre prompt + l’historique + sa réponse) traité comme un seul bloc cohérent.

  • Contexte trop court : L’IA “oublie” le début de la conversation → perte d’informations
  • Contexte trop long : Le modèle se noie, confond les instructions contradictoires (“bruit”), et son adhérence diminue

Si ta fenêtre est petite (disons 4K tokens), au bout de quelques échanges, le modèle doit “éjecter” les premiers messages pour faire de la place.

Exemple concret : Tu commences par “Je suis végétarien et allergique aux noix”. Après 10 échanges, tu demandes “Qu’est-ce que je pourrais cuisiner ce soir ?” → L’IA te propose un poulet aux noix de cajou.

Le problème du contexte trop long (le plus subtil)

Section intitulée « Le problème du contexte trop long (le plus subtil) »

Même avec une grande fenêtre (128K tokens), tout n’est pas rose. Imagine qu’on te donne un livre de 300 pages à lire, puis qu’on te pose une question sur un détail de la page 47.

Pour le modèle :

  • Le “bruit” : plus il y a d’informations, plus certaines peuvent se contredire ou diluer l’importance de tes instructions principales
  • L’adhérence qui diminue : le modèle “perd le fil” et accorde moins d’attention à tes consignes initiales noyées dans la masse

1. Le Hors-Sujet (Incompréhension globale) — L’IA n’a pas compris la nature même de la tâche.

  • ❌ La réponse est totalement à côté de la plaque
  • 💡 Vous demandez de traduire un texte, et le modèle vous en fait un résumé

2. L’Oubli de Contrainte (Dérapage contextuel) — L’IA comprend la tâche principale mais ignore les détails techniques.

  • ❌ Le fond est bon, mais la forme est fausse
  • 💡 Vous demandez du code en TypeScript, et le modèle vous répond en Python

3. Le “Radotage” ou l’Hallucination (Incohérence interne) — L’IA tourne en rond ou invente des faits.

  • ❌ Elle répète une erreur que vous venez de signaler
  • 💡 Vous demandez de corriger un bug spécifique, et l’IA vous renvoie le code avec exactement le même bug

Nous sommes habitués à discuter avec ChatGPT comme avec un humain. Mais attention, c’est une illusion technique.

Comment ça marche vraiment ?

L’IA n’a pas de mémoire persistante d’une phrase à l’autre. À chaque nouvelle question, le système renvoie tout l’historique de la conversation + votre nouvelle question. C’est comme si, pour chaque réplique d’un film, on obligeait l’acteur à relire tout le scénario depuis le début avant de parler.

Le piège de la longueur

SituationConséquence
Contexte trop courtLe système coupe le début de la conversation. L’IA oublie les consignes initiales.
Contexte trop longL’IA se noie dans trop d’informations, d’erreurs passées ou de contradictions → hallucinations.

Quand utiliser le mode discussion ?

Malgré ses défauts, la conversation est excellente pour deux cas précis :

  1. La “Recherche Google” (Tâche simple) — Je veux une réponse factuelle et rapide. L’historique n’a pas d’importance.

    • Exemple : “Quel est le débit du Rhône ?” → Réponse immédiate, fin de la discussion.
  2. L’Exploration (Découverte) — Je veux dégrossir un sujet inconnu. L’historique est utile car l’IA se souvient du contexte général.

    • Exemple : “Je connais Python, explique-moi les différences avec Scala.” Puis : “Et pour les bases de données ?” (L’IA sait qu’on parle toujours de Scala vs Python).

Exemple 1 — Email pour une augmentation :

Version 1 du prompt :
Écris-moi un email professionnel pour demander une augmentation.
Itération 1 : Le ton est trop agressif
→ Ajouter "sur un ton diplomate"
Itération 2 : Il manque du contexte
→ Ajouter "Je suis dans l'entreprise depuis 3 ans, j'ai géré 2 projets majeurs"
Itération 3 : Préciser le format
→ Ajouter "Maximum 150 mots, avec une phrase d'accroche percutante"
Prompt final :
Écris-moi un email professionnel de maximum 150 mots, sur un ton diplomate,
pour demander une augmentation. Contexte : je suis dans l'entreprise depuis
3 ans et j'ai géré 2 projets majeurs. Commence par une phrase d'accroche
percutante.

Exemple 2 — Microservice Go :

Génère le code source complet d'un microservice Go.
Le microservice doit :
1. Gérer les alertes client (id_client, niveau_priorite, date_reception...)
2. Utiliser PostgreSQL pour la persistance
3. Utiliser Kafka pour la messagerie asynchrone
4. Intégrer Redis pour le cache
5. Implémenter une authentification OIDC
6. Exposer une API RESTful (CRUD)
7. Suivre une architecture en couches (handler, service, repository, model)
Itérations possibles :
"Utilise le framework Gin plutôt que Echo"
"Ajoute un middleware de logging"
"Renomme la variable alerteClient en clientAlert"

Pourquoi cette approche est puissante ?

AvantageExplication
ReproductibilitéTu peux réutiliser ton prompt perfectionné pour des besoins similaires
PartageTu peux le transmettre à des collègues comme un “template”
VariabilisationTu peux créer des “trous” à remplir : [NOM_PROJET], [LANGAGE], etc.
Meilleure adhérenceL’IA a tout le contexte d’un coup, pas de risque d’oubli

Exemple 1 — Organiser un voyage :

ChatTypeObjectif
Chat 1ExplorationDéfinir les destinations possibles selon mon budget
Chat 2ExplorationRechercher les meilleures périodes pour partir
Chat 3ExplorationComparer les options de transport
Chat 4RédactionCréer mon itinéraire jour par jour
Chat 5RédactionRédiger ma checklist de bagages
Chat 6RédactionÉcrire les emails de réservation

Comment ça fonctionne : tu demandes une synthèse dans le Chat 1, puis tu la colles dans le Chat 4 pour que l’IA construise l’itinéraire avec ces informations.

Exemple 2 — Créer un microservice :

ChatTypeObjectif
Chat 1ExplorationBesoins clients et fonctionnalités attendues
Chat 2ExplorationTechnologies et dépendances
Chat 3ExplorationArchitecture logicielle et technique
Chat 4ExplorationRédaction de prompts réutilisables
Chat 5RédactionContrat de service OpenAPI
Chat 6RédactionCode source de la librairie Go
Chat 7RédactionCode source du microservice HTTP
Chat 8RédactionTests unitaires
Chat 9RédactionTests d’intégration
Chat 10RédactionPipeline CI/CD
┌─────────────┐ Synthèse ┌─────────────┐
│ Chat 1 │ ──────────────► │ Chat 5 │
│ Exploration │ "Voici les │ Rédaction │
│ (besoins) │ besoins..." │ (OpenAPI) │
└─────────────┘ └─────────────┘
┌─────────────┐ Code source ┌─────────────┐
│ Chat 7 │ ──────────────► │ Chat 8 │
│ Rédaction │ "Voici le │ Rédaction │
│ (code) │ code à tester" │ (tests) │
└─────────────┘ └─────────────┘

En pratique :

  • Dans les chats d’exploration → tu demandes des synthèses à copier ailleurs
  • Dans les chats de rédaction → tu colles le contexte nécessaire (code, specs, décisions)
AvantagesLimites actuelles
Pas de mélange entre les contextesBeaucoup d’onglets à gérer manuellement
Chaque chat reste focaliséCopier-coller entre fenêtres = fastidieux
Idéal pour les projets complexesObtenir des formats précis (JSON, YAML) reste difficile
Approche méthodique et structuréeFaire respecter des normes de code demande de l’insistance