درس 2 — Anatomie d'un bon prompt

Séparateurs et balises XML

30min

هذا المحتوى غير مترجم بعد. تُعرض النسخة الأصلية.

Le problème : instructions et données mélangées

Quand vous collez un mail de client au milieu de vos consignes, le modèle doit deviner où s'arrête votre texte et où commence celui du client. Si le mail contient « réponds en anglais » ou « ignore ce qui précède », la confusion devient un risque (on y reviendra avec l'injection de prompt au module 4).

flowchart LR
  subgraph AVANT["Avant : un seul bloc"]
    A1["Consignes + mail du client + exemples, tout mélangé"]
  end
  subgraph APRES["Après : des zones balisées"]
    B1["instructions"]
    B2["mail_client"]
    B3["exemples"]
  end
  AVANT --> APRES

Les balises XML, simplement

Il n'existe pas de « balises officielles » : choisissez des noms parlants et restez cohérent. Claude est entraîné à bien exploiter cette structure ; Gemini et les autres modèles en profitent aussi.

AvantAprès
Voici le mail : Bonjour, je n'ai pas reçu mon colis... Réponds poliment et propose un remboursement.<mail_client>Bonjour, je n'ai pas reçu mon colis...</mail_client> puis : Réponds au mail contenu dans <mail_client> : ton poli, proposition de remboursement.
Compare ces deux contrats : [contrat A] [contrat B]<contrat_a>...</contrat_a> <contrat_b>...</contrat_b> puis : Liste les différences de durée et de résiliation entre <contrat_a> et <contrat_b>.
Résume ces 3 avis clients : ...<avis id="1">...</avis> <avis id="2">...</avis> <avis id="3">...</avis> puis : Pour chaque avis, cite son id.
prompt-balise.txt
<politique_retour>
Retours acceptés sous 30 jours, produit non utilisé, frais de retour offerts.
</politique_retour>

<message_client>
{message}
</message_client>

Réponds au message contenu dans <message_client> en appliquant uniquement
<politique_retour>. Écris ta réponse dans des balises <reponse>.

Pourquoi entourer le message d'un client par des balises `<message_client>` ?

Autres délimiteurs

DélimiteurQuand l'utiliserLimite
Balises XML <doc>...</doc>Plusieurs blocs, sortie à extraire par codeAucune, c'est le choix par défaut
Triple guillemets """..."""Un seul texte courtAmbigu si le texte contient lui-même des guillemets
Titres Markdown ## ContextePrompts système longs, lisibles par des humainsMoins net pour extraire une sortie
Blocs de code ```Code source ou JSON en entréeÀ réserver au code

Baliser aussi la sortie

Demander <reponse>...</reponse> ou <analyse> puis <reponse> permet à votre code de récupérer uniquement la partie utile :

extraire.py
import re

def extraire(balise: str, texte: str) -> str | None:
    m = re.search(rf"<{balise}>(.*?)</{balise}>", texte, re.S)
    return m.group(1).strip() if m else None

sortie = "<analyse>Client calme, demande simple.</analyse><reponse>Bonjour, ...</reponse>"
assert extraire("reponse", sortie) == "Bonjour, ..."
assert extraire("absent", sortie) is None

Vous avez 40 pages de conditions générales et une question précise. Quel ordre est recommandé ?

Exercice

Restructurez ce prompt avec des balises, de façon à pouvoir extraire automatiquement la catégorie et la réponse :

« Voici un message d'un client : "Bonjour, ma facture de septembre est fausse, on m'a facturé deux fois." Dis-moi de quelle catégorie il s'agit parmi livraison, facturation, produit, et rédige une réponse. »

Voir la solution
<categories>livraison, facturation, produit</categories>

<message_client>
Bonjour, ma facture de septembre est fausse, on m'a facturé deux fois.
</message_client>

1. Classe le message de <message_client> dans une seule des <categories>.
2. Rédige une réponse de 3 phrases maximum, vouvoiement.

Réponds exactement dans ce format :
<categorie>...</categorie>
<reponse>...</reponse>

Avec extraire("categorie", sortie) vous obtenez facturation, que votre code peut router vers la bonne équipe.

Je sais faire

  • Séparer instructions et données avec des balises XML.
  • Placer un long document avant la question.
  • Demander une sortie balisée et l'extraire en Python.
  • Traiter l'absence de balise comme une erreur.
التالي