Aller au contenu principal
Leçon 29 sur 95 · Construire avec l'API Claude

Exercice : ingénierie de prompts

Leçon 29 sur 95 Mis à jour le 5 novembre 2026 Développeur
Sur cette page
  1. Les trois produits de test
  2. Les cinq versions
  3. À vous de jouer
  4. Points clés à retenir

Cet exercice, complément de notre adaptation, applique les quatre techniques de la section, une par une, à un autre sujet que le plan de repas : un générateur de descriptions de produits. À chaque version, vous observez ce qui change, puis vous mesurez l’ensemble avec le pipeline de la section 2.

Les trois produits de test

products = [
    {
        "name": "SoundWave Pro X",
        "type": "casque audio sans fil",
        "price": "179 €",
        "features": "réduction de bruit active, 40 h d'autonomie, Bluetooth 5.3, pliable, microphones intégrés, codec LDAC",
        "target": "professionnels en télétravail et audiophiles",
        "brand_tone": "haut de gamme mais accessible",
    },
    {
        "name": "BrewMaster 3000",
        "type": "machine à café automatique",
        "price": "449 €",
        "features": "broyeur céramique, 15 boissons, écran tactile, réservoir de 1,8 L, système lait intégré, mode éco",
        "target": "amateurs de café exigeants",
        "brand_tone": "expert et passionné",
    },
    {
        "name": "TrailBlazer 45L",
        "type": "sac à dos de randonnée",
        "price": "129 €",
        "features": "45 litres, dos ventilé, housse de pluie intégrée, poches latérales en filet, sangles de compression, compatible poche à eau",
        "target": "randonneurs réguliers, treks de 2 à 5 jours",
        "brand_tone": "aventurier et fiable",
    },
]
from anthropic import Anthropic

client = Anthropic()
MODEL = "claude-sonnet-5-5"

def generate_description(prompt: str, product: dict) -> str:
    message = client.messages.create(
        model=MODEL,
        max_tokens=4096,
        messages=[{"role": "user", "content": prompt.format(**product)}],
    )
    return "".join(block.text for block in message.content if block.type == "text")
Cinq versions d'un même prompt Frise à cinq jalons : V1 naïve, V2 claire et directe, V3 spécifique, V4 balisée, V5 avec un exemple commenté. EXERCICE Cinq versions d'un même prompt V1 Naïve « Écris une description de produit » V2 Directe verbe d'action, objectif, cible V3 Spécifique longueur, structure, ton, exclusions V4 Balisée instructions, produit, cible séparés V5 Exemple une description idéale commentée On lit les sorties côte à côte, puis on mesure : une version qui ne fait pas monter la note ne se garde pas.
Exercice complémentaire de l'adaptation Corsen, d'après la section « Prompt engineering techniques » (Claude Academy).

Les cinq versions

V1, le prompt naïf. Attendez-vous à des descriptions génériques, d’une longueur imprévisible, sans structure, qui exploitent mal les caractéristiques.

PROMPT_V1 = "Écris une description de produit pour {name}."

V2, claire et directe. Une première ligne avec un verbe d’action et l’objectif : la description vise la vente, le prix et la cible sont pris en compte ; longueur, structure et ton restent flous.

PROMPT_V2 = """Rédige une description commerciale du produit {name} ({type}).
Elle doit convaincre un client potentiel de l'acheter au prix de {price}. Cible : {target}."""

V3, spécifique. Des consignes de sortie : longueur, structure, ton, contenu obligatoire, exclusions.

PROMPT_V3 = """Rédige une description commerciale du produit {name} ({type}), au prix de {price}.
Consignes :
- 150 à 200 mots ;
- une accroche d'une phrase, un paragraphe sur les bénéfices, une liste de trois ou quatre fonctionnalités clés, une phrase de conclusion avec un appel à l'action ;
- ton : {brand_tone} ; cible : {target} ;
- cite au moins trois fonctionnalités parmi : {features} ;
- mets en avant les bénéfices pour l'utilisateur, pas seulement les caractéristiques techniques ;
- ne commence ni par « Découvrez » ni par « Voici »."""

V4, balisée. Les consignes, les données du produit et la cible dans des balises séparées.

PROMPT_V4 = """<instructions>
Rédige une description commerciale du produit ci-dessous, de 150 à 200 mots :
une accroche, un paragraphe sur les bénéfices, trois ou quatre fonctionnalités en liste, un appel à l'action.
Mets en avant les bénéfices, pas seulement les caractéristiques. Ne commence ni par « Découvrez » ni par « Voici ».
</instructions>

<produit>
Nom : {name}
Type : {type}
Prix : {price}
Fonctionnalités : {features}
</produit>

<cible>
Public : {target}
Ton éditorial : {brand_tone}
</cible>"""

V5, avec un exemple commenté. On ajoute avant le produit un exemple de description idéale, et pourquoi elle l’est.

EXEMPLE = """<exemple>
<sample_input>
Nom : AeroLite Runner ; type : chaussure de running ; prix : 139 € ;
fonctionnalités : semelle en carbone, 195 g, mesh respirant, drop de 6 mm, amorti réactif ;
public : coureurs réguliers, 10 à 50 km par semaine ; ton : dynamique et technique.
</sample_input>
<ideal_output>
Chaque kilomètre compte. L'AeroLite Runner est faite pour les coureurs qui refusent de choisir entre performance et confort.
Avec 195 grammes au pied, vous oubliez vos chaussures pour ne penser qu'à votre foulée : la semelle en carbone transforme chaque appui en propulsion, et le mesh respirant garde vos pieds au sec, sortie après sortie.
- Semelle en carbone : une restitution d'énergie à chaque foulée.
- 195 grammes : l'une des plus légères de sa catégorie.
- Amorti réactif : vos articulations protégées sans perdre en vivacité.
- Drop de 6 mm : un équilibre naturel entre attaque talon et médio-pied.
À 139 €, votre prochain record personnel n'attend plus que vous.
</ideal_output>
Cet exemple respecte la structure demandée, traduit chaque caractéristique en bénéfice et termine par un appel à l'action.
</exemple>
"""

PROMPT_V5 = PROMPT_V4.replace("<produit>", EXEMPLE + "\n<produit>")

À vous de jouer

Faites tourner les cinq versions sur les trois produits et lisez les sorties côte à côte. Puis mesurez : branchez generate_description dans le pipeline de la section 2, avec un notateur par modèle sur trois critères (structure respectée, bénéfices plutôt que caractéristiques, ton conforme) et un notateur par code qui compte les mots. Une version qui ne fait pas monter la note ne mérite pas d’être gardée.

Voir la boucle de comparaison
versions = {"V1": PROMPT_V1, "V2": PROMPT_V2, "V3": PROMPT_V3, "V4": PROMPT_V4, "V5": PROMPT_V5}
for nom, prompt in versions.items():
    print(f"\n========== {nom} ==========")
    for product in products:
        description = generate_description(prompt, product)
        print(f"\n--- {product['name']} ({len(description.split())} mots) ---\n{description}")

Points à observer : la V3 apporte le plus gros changement, comme dans la démonstration du cours officiel ; la V4 change peu sur des fiches aussi courtes ; la V5 stabilise le format et le style d’un produit à l’autre, mais vérifiez qu’elle ne recopie pas des tournures de l’exemple.

Sources officielles : Being clear and direct, Being specific, Structure with XML tags et Providing examples (Claude Academy)

Points clés à retenir

  • Une technique à la fois : clarté, spécificité, balises, exemple.
  • La spécificité apporte souvent le plus ; les balises comptent surtout quand le contenu grossit ; l’exemple stabilise le format.
  • On lit les sorties côte à côte, puis on mesure avec un pipeline d’évaluation avant de garder une version.