Le prompting avancé qui fait vraiment la différence
Vous utilisez ChatGPT, Claude ou Gemini depuis des mois, mais vous avez l'impression de ne pas en tirer le maximum ? Vous avez raison. La différence entre un utilisateur moyen et un expert en IA tient souvent en un seul mot : le prompting.
Le prompting, c'est l'art de communiquer avec un modèle de langage pour obtenir exactement ce que vous voulez. Et en 2026, avec des modèles de plus en plus puissants, maîtriser le prompting avancé est devenu un véritable super-pouvoir.
Dans cet article, on va explorer les techniques qui font vraiment la différence : system prompts structurés, few-shot learning, chain-of-thought, structured output en JSON, et bien plus. Avec des exemples concrets avant/après pour chaque technique.
🎯 Pourquoi le prompting compte (encore) en 2026
On pourrait croire qu'avec des modèles toujours plus intelligents, le prompting devient moins important. C'est l'inverse. Plus un modèle est puissant, plus il est capable de suivre des instructions complexes — et donc plus le prompting avancé fait une différence.
Voici ce que change un bon prompting :
| Aspect | Prompting basique | Prompting avancé |
|---|---|---|
| Qualité des réponses | Correcte, générique | Précise, adaptée, exploitable |
| Consistance | Variable d'une requête à l'autre | Stable et prévisible |
| Format | Texte libre, reformatage nécessaire | Structuré, prêt à l'emploi |
| Hallucinations | Fréquentes | Réduites drastiquement |
| Coût | Gaspillage de tokens en allers-retours | Bonne réponse du premier coup |
Un prompt bien conçu peut transformer un modèle « moyen » en assistant expert. Un mauvais prompt peut faire halluciner même les meilleurs modèles.
📝 Les system prompts structurés
Le system prompt est la fondation de toute interaction avec un LLM. C'est le texte qui définit qui est le modèle, comment il doit se comporter, et quelles sont ses contraintes.
Avant : le system prompt naïf
Tu es un assistant utile qui aide les utilisateurs.
Ce prompt est tellement vague qu'il ne sert à rien. Le modèle va produire des réponses génériques, sans personnalité ni contraintes.
Après : le system prompt structuré
# Rôle
Tu es un expert en développement Python senior avec 15 ans d'expérience.
Tu travailles comme tech lead dans une startup SaaS.
# Style de communication
- Réponses directes et concises
- Tu utilises le tutoiement
- Tu donnes toujours des exemples de code fonctionnels
- Tu mentionnes les edge cases et les pièges courants
# Contraintes
- Python 3.11+ uniquement
- Tu privilégies la lisibilité à la performance (sauf si demandé)
- Tu utilises les type hints systématiquement
- Tu ne proposes JAMAIS de code sans gestion d'erreur
# Format de réponse
1. Explication courte (2-3 phrases max)
2. Code avec commentaires
3. Exemple d'utilisation
4. ⚠️ Points d'attention (si pertinent)
La différence est radicale. Avec le second prompt, chaque réponse sera structurée, cohérente, et adaptée à votre contexte.
L'approche SOUL.md et AGENTS.md
Si vous utilisez OpenClaw, vous connaissez déjà le concept : le fichier SOUL.md définit la personnalité de l'agent, et AGENTS.md définit ses règles de travail. C'est exactement le même principe que le system prompt structuré, mais poussé à l'extrême.
Voici un exemple inspiré de la structure OpenClaw :
# SOUL.md — Personnalité de l'agent
## Identité
Je suis Max, un assistant spécialisé en data science.
Je travaille pour une équipe de 5 data scientists.
## Valeurs
- Rigueur scientifique avant tout
- Transparence sur les limites des analyses
- Reproductibilité du code
## Ton
- Professionnel mais décontracté
- J'utilise des analogies pour expliquer les concepts complexes
- Je pose des questions quand la demande est ambiguë
## Ce que je ne fais PAS
- Je ne fais pas de prédictions sans intervalle de confiance
- Je ne recommande pas de modèle sans validation croisée
- Je ne dis jamais "c'est simple" (rien ne l'est en data science)
# AGENTS.md — Règles de travail
## Processus de réponse
1. Comprendre la question (reformuler si ambiguë)
2. Vérifier les hypothèses
3. Proposer une approche
4. Coder et tester
5. Documenter les limitations
## Standards de code
- Pandas > loops manuels
- Toujours seed les random states
- Graphiques avec labels, titres et légendes
- Requirements.txt pour chaque snippet
## Quand escalader
- Dataset > 10GB → suggérer Spark/Dask
- Modèle complexe → suggérer MLflow pour le tracking
- Question business → demander le contexte métier
Pour configurer ces fichiers dans OpenClaw, consultez le guide Configurer OpenClaw : SOUL, AGENTS et Skills.
Les 5 composants d'un system prompt efficace
Voici la structure que je recommande pour tout system prompt :
| Composant | Description | Exemple |
|---|---|---|
| Rôle | Qui est le modèle ? | "Expert en sécurité web" |
| Contexte | Dans quel environnement ? | "Startup fintech, stack Node.js" |
| Style | Comment communiquer ? | "Concis, technique, tutoiement" |
| Contraintes | Qu'est-ce qui est interdit ? | "Jamais de code sans validation" |
| Format | Comment structurer la réponse ? | "1. Explication, 2. Code, 3. Tests" |
🔄 Le Few-Shot Learning : apprendre par l'exemple
Le few-shot learning consiste à donner des exemples de paires input/output au modèle avant de lui poser votre question. C'est la technique la plus sous-estimée et la plus efficace.
Avant : zero-shot (pas d'exemple)
Extrais les entités nommées de ce texte :
"Apple a annoncé son nouveau MacBook Pro lors de la WWDC 2026 à Cupertino."
Réponse typique (variable, inconsistante) :
Les entités nommées sont : Apple (entreprise), MacBook Pro (produit),
WWDC 2026 (événement), Cupertino (lieu).
Le format change à chaque requête. Parfois c'est une liste, parfois un paragraphe, parfois avec des parenthèses, parfois sans.
Après : few-shot (avec exemples)
Extrais les entités nommées au format JSON.
Exemple 1 :
Input: "Google a racheté DeepMind en 2014 à Londres."
Output: {"entities": [{"text": "Google", "type": "ORG"}, {"text": "DeepMind", "type": "ORG"}, {"text": "2014", "type": "DATE"}, {"text": "Londres", "type": "LOC"}]}
Exemple 2 :
Input: "Elon Musk a fondé SpaceX pour coloniser Mars."
Output: {"entities": [{"text": "Elon Musk", "type": "PER"}, {"text": "SpaceX", "type": "ORG"}, {"text": "Mars", "type": "LOC"}]}
Maintenant, extrais les entités de :
Input: "Apple a annoncé son nouveau MacBook Pro lors de la WWDC 2026 à Cupertino."
Output:
Réponse (consistante, formatée) :
{"entities": [{"text": "Apple", "type": "ORG"}, {"text": "MacBook Pro", "type": "PRODUCT"}, {"text": "WWDC 2026", "type": "EVENT"}, {"text": "Cupertino", "type": "LOC"}]}
Combien d'exemples faut-il ?
| Nombre d'exemples | Usage | Qualité |
|---|---|---|
| 0 (zero-shot) | Tâches simples et évidentes | Variable |
| 1-2 (few-shot) | Définir le format de sortie | Bonne |
| 3-5 (few-shot) | Tâches complexes, classification | Très bonne |
| 5+ | Cas ambigus, nuances fines | Excellente |
💡 Règle d'or : incluez toujours au moins un exemple « edge case » (cas limite) dans vos few-shots. Ça montre au modèle comment gérer les situations ambiguës.
Few-shot pour la classification
messages = [
{"role": "system", "content": "Tu classifies les tickets de support."},
# Exemple 1
{"role": "user", "content": "Mon paiement a été débité deux fois"},
{"role": "assistant", "content": '{"category": "billing", "priority": "high", "sentiment": "negative"}'},
# Exemple 2
{"role": "user", "content": "Comment exporter mes données en CSV ?"},
{"role": "assistant", "content": '{"category": "feature_question", "priority": "low", "sentiment": "neutral"}'},
# Exemple 3 (edge case)
{"role": "user", "content": "Votre app est géniale mais le dark mode a un bug"},
{"role": "assistant", "content": '{"category": "bug_report", "priority": "medium", "sentiment": "mixed"}'},
# La vraie requête
{"role": "user", "content": "Je n'arrive plus à me connecter depuis la mise à jour"}
]
Chaque réponse sera parfaitement formatée en JSON, avec les bonnes catégories, parce que le modèle a compris le pattern grâce aux exemples.
🧠 Chain-of-Thought : faire réfléchir le modèle
Le Chain-of-Thought (CoT) est la technique qui a le plus d'impact sur la qualité du raisonnement. L'idée est simple : demander au modèle de montrer son raisonnement étape par étape avant de donner sa réponse finale.
Avant : réponse directe
Combien de fois la lettre "r" apparaît dans le mot "strawberry" ?
Réponse (souvent fausse) :
La lettre "r" apparaît 2 fois dans "strawberry".
Après : avec Chain-of-Thought
Combien de fois la lettre "r" apparaît dans le mot "strawberry" ?
Réfléchis étape par étape : analyse chaque lettre du mot une par une.
Réponse (correcte) :
Analysons chaque lettre de "strawberry" :
s - non
t - non
r - OUI (1)
a - non
w - non
b - non
e - non
r - OUI (2)
r - OUI (3)
y - non
La lettre "r" apparaît 3 fois dans "strawberry".
Les variantes du Chain-of-Thought
1. CoT explicite (le plus simple)
Ajoutez simplement « Réfléchis étape par étape » ou « Montre ton raisonnement » à la fin de votre prompt.
2. CoT structuré
Analyse cette situation en suivant ces étapes :
1. OBSERVATION : Que voit-on dans les données ?
2. HYPOTHÈSE : Quelles explications possibles ?
3. VÉRIFICATION : Comment valider chaque hypothèse ?
4. CONCLUSION : Quelle est la réponse la plus probable ?
3. CoT avec auto-critique
Résous ce problème en 3 phases :
1. PREMIÈRE RÉPONSE : ta réponse initiale
2. CRITIQUE : cherche les erreurs dans ta réponse
3. RÉPONSE FINALE : corrige et donne la réponse définitive
Cette technique est particulièrement puissante pour les problèmes de logique, de maths et de code.
Quand utiliser le Chain-of-Thought ?
| Tâche | CoT utile ? | Pourquoi |
|---|---|---|
| Maths / Logique | ✅ Très | Réduit les erreurs de calcul |
| Code / Debug | ✅ Très | Force l'analyse systématique |
| Analyse de texte | ✅ Modérément | Améliore la nuance |
| Rédaction créative | ❌ Rarement | Peut rendre le texte trop analytique |
| Classification simple | ❌ Non | Overhead inutile, ralentit |
| Traduction | ❌ Non | Le modèle le fait déjà bien |
⚠️ Attention au coût : le CoT génère plus de tokens de sortie. Si vous payez au token, ça peut doubler ou tripler le coût. Utilisez-le stratégiquement.
📦 Structured Output : des réponses en JSON
Le structured output est la technique la plus utile pour les développeurs. Au lieu de recevoir du texte libre qu'il faut parser, vous recevez directement du JSON exploitable.
Avant : texte libre
Analyse ce CV et donne-moi les compétences du candidat.
Réponse :
Le candidat maîtrise Python, JavaScript et SQL. Il a aussi de l'expérience
avec React et Node.js. En termes de soft skills, il mentionne le travail
d'équipe et la gestion de projet.
Comment extraire ces données programmatiquement ? C'est un cauchemar de parsing.
Pour aller plus loin sur ce sujet, consultez notre guide Claude, GPT, Gemini, Llama : quel modèle choisir en 2026 ?.
Après : structured output JSON
Pour aller plus loin sur ce sujet, consultez notre guide Utiliser des modèles gratuits sans sacrifier la qualité.
Analyse ce CV et extrais les compétences.
Réponds UNIQUEMENT en JSON valide avec ce schéma :
{
"hard_skills": [{"name": "string", "level": "junior|mid|senior", "years": number}],
"soft_skills": [{"name": "string", "context": "string"}],
"languages": [{"name": "string", "level": "A1|A2|B1|B2|C1|C2"}],
"certifications": [{"name": "string", "year": number}]
}
Réponse :
{
"hard_skills": [
{"name": "Python", "level": "senior", "years": 8},
{"name": "JavaScript", "level": "mid", "years": 5},
{"name": "SQL", "level": "senior", "years": 7},
{"name": "React", "level": "mid", "years": 3},
{"name": "Node.js", "level": "mid", "years": 4}
],
"soft_skills": [
{"name": "Travail d'équipe", "context": "Équipes de 5-10 personnes"},
{"name": "Gestion de projet", "context": "Méthodologie Agile/Scrum"}
],
"languages": [
{"name": "Français", "level": "C2"},
{"name": "Anglais", "level": "C1"}
],
"certifications": [
{"name": "AWS Solutions Architect", "year": 2024}
]
}
Forcer le JSON avec l'API
La plupart des API modernes supportent le mode « JSON » natif :
# OpenAI / OpenRouter
response = client.chat.completions.create(
model="gpt-4.1",
messages=[...],
response_format={"type": "json_object"}
)
# Anthropic Claude
response = client.messages.create(
model="claude-sonnet-4-20250514",
messages=[...],
# Claude n'a pas de mode JSON natif, mais suit très bien
# les instructions de format dans le system prompt
)
# Google Gemini
response = model.generate_content(
"...",
generation_config={"response_mime_type": "application/json"}
)
JSON Schema pour la validation
Pour les cas critiques, définissez un JSON Schema complet :
schema = {
"type": "object",
"required": ["summary", "sentiment", "key_topics"],
"properties": {
"summary": {
"type": "string",
"maxLength": 500,
"description": "Résumé en 2-3 phrases"
},
"sentiment": {
"type": "string",
"enum": ["positive", "negative", "neutral", "mixed"]
},
"key_topics": {
"type": "array",
"items": {"type": "string"},
"minItems": 1,
"maxItems": 5
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
}
}
# Dans le system prompt
system = f"""Analyse le texte fourni.
Réponds en JSON respectant ce schéma :
{json.dumps(schema, indent=2)}"""
🏗️ Techniques avancées combinées
Les techniques les plus puissantes combinent plusieurs approches.
Le Meta-Prompt : un prompt qui génère des prompts
Tu es un expert en prompt engineering. Je vais te décrire une tâche,
et tu vas générer le prompt optimal pour un LLM.
Le prompt généré doit inclure :
1. Un system prompt structuré (rôle, contexte, contraintes, format)
2. Des exemples few-shot (au moins 2)
3. Des instructions de chain-of-thought si pertinent
4. Un format de sortie JSON si la tâche s'y prête
Tâche : [VOTRE DESCRIPTION]
Cette technique est incroyablement puissante pour créer des prompts complexes. Vous utilisez le LLM pour optimiser sa propre utilisation.
Le prompt à étapes multiples (Multi-Step)
Au lieu de tout faire en une seule requête, découpez en étapes :
# Étape 1 : Extraction
extract_prompt = """Extrais les faits clés de cet article.
Format : liste JSON de faits."""
facts = await manager.complete([
{"role": "system", "content": extract_prompt},
{"role": "user", "content": article_text}
])
# Étape 2 : Analyse
analyze_prompt = """Analyse ces faits et identifie :
- les tendances
- les contradictions
- les informations manquantes
Format : JSON structuré."""
analysis = await manager.complete([
{"role": "system", "content": analyze_prompt},
{"role": "user", "content": facts}
])
# Étape 3 : Synthèse
synthesis_prompt = """À partir de cette analyse, rédige un résumé
exécutif de 200 mots max pour un décideur non-technique."""
summary = await manager.complete([
{"role": "system", "content": synthesis_prompt},
{"role": "user", "content": analysis}
])
Chaque étape utilise le contexte de la précédente, mais avec un prompt optimisé pour sa tâche spécifique.
Le prompt conditionnel
Analyse cette requête utilisateur et agis selon son type :
SI c'est une question technique :
→ Réponds avec du code et des explications
→ Format : explication + code + exemple
SI c'est un bug report :
→ Demande les infos manquantes (OS, version, logs)
→ Format : checklist de questions
SI c'est une demande de feature :
→ Évalue la faisabilité et propose un plan
→ Format : faisabilité + estimation + étapes
SI c'est autre chose :
→ Reformule la question pour clarifier
→ Format : "J'ai compris que... Est-ce correct ?"
Ce pattern est excellent pour les chatbots et les agents qui doivent gérer des types de requêtes variés.
❌ Les erreurs de prompting les plus courantes
Erreur 1 : trop de politesse, pas assez de structure
# ❌ Mauvais
Bonjour ! Pourrais-tu s'il te plaît analyser ce texte et me dire
ce que tu en penses ? Ce serait vraiment gentil de ta part. Merci
beaucoup d'avance !
# ✅ Bon
Analyse ce texte. Identifie : thème principal, ton, public cible.
Format : JSON avec ces 3 clés.
Les LLM ne sont pas vexés par un ton direct. Ils performent mieux avec des instructions claires et concises.
Erreur 2 : instructions contradictoires
# ❌ Mauvais
Sois concis mais détaillé. Donne une réponse courte avec beaucoup d'exemples.
Reste simple mais couvre tous les cas edge.
# ✅ Bon
Réponse en 3 parties :
1. Résumé (2 phrases max)
2. Détail (5-10 lignes)
3. Exemples (2 cas, dont 1 edge case)
Erreur 3 : ne pas spécifier le format
# ❌ Mauvais
Donne-moi les avantages et inconvénients de React vs Vue.
# ✅ Bon
Compare React et Vue en tableau markdown :
| Critère | React | Vue | Gagnant |
Critères : courbe d'apprentissage, performance, écosystème, emploi, TypeScript.
Erreur 4 : ignorer le négatif
Dire au modèle ce qu'il ne doit PAS faire est souvent aussi important que ce qu'il doit faire :
# Contraintes négatives (très efficaces)
- Ne commence JAMAIS par "Bien sûr !" ou "Excellente question !"
- N'utilise pas de bullet points pour les explications narratives
- Ne répète pas la question dans ta réponse
- Ne donne pas d'avertissements non demandés sur l'éthique
Erreur 5 : le prompt « one-size-fits-all »
# ❌ Un seul prompt pour tout
system = "Tu es un assistant utile."
# ✅ Des prompts spécialisés
code_system = "Expert Python. Code propre, typé, testé. Pas de blabla."
writing_system = "Rédacteur web SEO. Ton conversationnel, H2 accrocheurs, CTA."
analysis_system = "Analyste data. Chiffres, graphiques, intervalles de confiance."
📊 Mesurer l'impact du prompting
Comment savoir si votre prompting s'améliore ? Mesurez !
Métriques clés
| Métrique | Comment mesurer | Objectif |
|---|---|---|
| Taux de première réponse correcte | % de réponses utilisables sans relance | >90% |
| Tokens par réponse | Nombre moyen de tokens générés | Stable ou en baisse |
| Consistance du format | % de réponses au bon format | >95% |
| Taux d'hallucination | % de réponses avec des infos fausses | <5% |
| Satisfaction utilisateur | Note de 1-5 par les utilisateurs | >4 |
A/B testing de prompts
import random
prompts = {
"v1": "Résume ce texte en 3 phrases.",
"v2": "Résume ce texte. Format : exactement 3 phrases. "
"Phrase 1 = contexte. Phrase 2 = fait principal. Phrase 3 = implication.",
}
# Sélection aléatoire
version = random.choice(["v1", "v2"])
prompt = prompts[version]
# Log pour analyse
log_prompt_test(version=version, prompt=prompt, response=response, quality_score=score)
🛠️ Boîte à outils : templates de prompts prêts à l'emploi
Template : Extraction de données
Extrais les informations suivantes du texte ci-dessous.
Réponds UNIQUEMENT en JSON valide.
Champs à extraire :
- name (string, requis)
- date (string ISO 8601, ou null)
- amount (number, ou null)
- currency (string 3 lettres, ou null)
- category (enum: "income" | "expense" | "transfer" | "other")
Si une information est absente ou ambiguë, utilise null.
Ne devine JAMAIS — préfère null à une approximation.
Texte : {input}
Template : Rédaction avec contraintes
Rédige un {type_contenu} sur le sujet : {sujet}
Contraintes :
- Longueur : {min_mots}-{max_mots} mots
- Ton : {ton}
- Public : {audience}
- Mots-clés à inclure naturellement : {keywords}
- Structure : {structure}
NE PAS :
- Utiliser de clichés ("dans un monde où...", "il est important de noter...")
- Commencer par une question rhétorique
- Utiliser le passif quand l'actif est possible
Template : Debug de code
Ce code a un bug. Trouve-le et corrige-le.
Processus :
1. Lis le code attentivement
2. Identifie le bug (1-2 phrases)
3. Explique POURQUOI c'est un bug
4. Donne le code corrigé (seulement les lignes modifiées)
5. Donne un test qui prouve que le fix marche
Code :
```{language}
{code}
Erreur observée : {error_message}
Comportement attendu : {expected}
```
✅ Résumé : les règles d'or du prompting avancé
- Structurez votre system prompt : rôle, contexte, style, contraintes, format
- Utilisez le few-shot : 2-3 exemples valent mieux que 200 mots d'explication
- Activez le Chain-of-Thought pour le raisonnement complexe
- Demandez du JSON quand vous avez besoin de données structurées
- Dites ce que vous ne voulez PAS — les contraintes négatives sont puissantes
- Testez et mesurez — le prompting est un processus itératif
- Spécialisez vos prompts — un prompt par tâche, pas un prompt pour tout
- Inspirez-vous de SOUL.md/AGENTS.md — la structure d'OpenClaw est un excellent modèle
Le prompting n'est pas de la magie — c'est de l'ingénierie. Comme tout en ingénierie, ça s'apprend, ça se pratique, et ça s'améliore avec le temps.
📚 Articles liés
- Configurer OpenClaw : SOUL, AGENTS et Skills — Maîtrisez les system prompts avec SOUL.md et AGENTS.md
- Claude (Anthropic) — Le modèle qui suit le mieux les instructions complexes
- OpenRouter : accéder à tous les LLM — Testez vos prompts sur différents modèles
- Qu'est-ce qu'OpenClaw ? — L'assistant IA qui utilise ces techniques de prompting
- Automatiser sa vie avec OpenClaw — Mettez vos prompts au service de l'automatisation