Structurer avec des balises XML
Sur cette page
Troisième technique : la structure. Quand un prompt contient beaucoup de contenu, Claude peut avoir du mal à savoir quelles parties vont ensemble et ce que chacune représente. Où finissent les consignes, où commencent les données ? Les balises XML ajoutent de la structure et de la clarté, surtout quand vous insérez de grandes quantités de texte dans un prompt.
Pourquoi la structure compte
Imaginez un prompt qui demande d’analyser vingt pages de relevés de ventes. Sans frontières nettes, Claude risque de confondre vos consignes avec les données : lire une ligne du rapport comme une instruction, ou manquer une consigne noyée dans les chiffres. L’erreur ne se voit pas : la réponse paraît plausible, elle repose simplement sur une lecture faussée du prompt. En encadrant les relevés avec des balises, vous séparez nettement les parties :
<releves_ventes>
{sales_records}
</releves_ventes>
Des noms libres et parlants
Les noms de balises ne suivent aucune spécification XML officielle : vous les inventez. Préférez des noms descriptifs, <releves_ventes> plutôt que <data>. La documentation d’Anthropic ajoute deux conseils : gardez les mêmes noms d’un prompt à l’autre, et imbriquez les balises quand le contenu a une hiérarchie naturelle, par exemple des documents dans <documents>, chacun dans un <document>.
Un exemple concret
Pour faire corriger du code, il faut distinguer le code fautif de la documentation qui doit guider la correction. Sans balises, les deux se ressemblent : du Python sur du Python. Avec balises :
<mon_code>
from datavortex import Pipeline, DataSource
def process_data(input_file, output_file):
pipeline = Pipeline()
source = DataSource.from_csv(input_file)
</mon_code>
<documentation>
# Créer une source de données avec Data Vortex
csv_source = DataSource.from_csv("data.csv")
</documentation>
Claude distingue immédiatement ce qu’il doit corriger de ce qui doit le guider. Sans les balises, rien ne l’empêchait de « corriger » la documentation, ou de citer votre code fautif comme référence.
Sur le plan de repas
Même avec peu de contenu, les balises clarifient le prompt de la leçon 19 :
def run_prompt(prompt_inputs):
prompt = f"""
Génère le plan de repas d'une journée pour un athlète, en respectant ses restrictions alimentaires.
<informations_athlete>
- Taille : {prompt_inputs["height"]}
- Poids : {prompt_inputs["weight"]}
- Objectif : {prompt_inputs["goal"]}
- Restrictions alimentaires : {prompt_inputs["restrictions"]}
</informations_athlete>
Consignes :
1. Donne le total calorique exact de la journée.
2. Indique les quantités de protéines, de lipides et de glucides.
3. Précise l'heure de chaque repas.
4. N'utilise que des aliments compatibles avec les restrictions.
5. Donne toutes les portions en grammes.
6. Reste économique si c'est demandé.
"""
messages = []
add_user_message(messages, prompt)
return chat(messages)
Claude sait que ce bloc contient des informations externes sur l’athlète, qui orientent le plan sans se confondre avec les consignes. C’est d’autant plus utile que ces valeurs viennent de l’utilisateur final. Les balises réduisent les confusions, mais elles ne protègent pas contre l’injection de prompt : un texte malveillant peut contenir lui-même des balises. Gardez vos contrôles applicatifs.
Les longs documents
Pour les prompts qui contiennent de longs documents, au-delà d’environ 20 000 tokens, la documentation d’Anthropic donne deux règles. Placez les documents en haut du prompt, avant la question, les consignes et les exemples : dans ses tests, une question placée à la fin améliore la qualité des réponses jusqu’à 30 %, surtout avec plusieurs documents complexes. Et décrivez chaque document par des balises, avec son contenu et ses métadonnées :
<documents>
<document index="1">
<source>rapport_annuel_2025.pdf</source>
<document_content>
{RAPPORT_ANNUEL}
</document_content>
</document>
</documents>
Quand baliser
- Vous insérez beaucoup de contexte ou de données.
- Le prompt mêle plusieurs types de contenu distincts.
- Vous voulez des frontières évidentes entre les sections.
- Le contenu inséré pourrait être confondu avec vos consignes.
Soyons honnêtes sur la portée : sur un prompt court, le gain est modeste, et une question d’une ligne n’a pas besoin de conteneurs. Le bénéfice grandit avec la taille du prompt. Et un prompt balisé se relit et se maintient bien plus facilement qu’un mur de texte.
À vous de jouer
Baliser un vrai prompt. Prenez un de vos prompts qui insère des données, un document, un courriel ou une saisie utilisateur. Encadrez chaque type de contenu par une balise parlante, placez les données longues en tête et la demande à la fin, puis évaluez les deux versions.
Sources officielles : Structure with XML tags (Claude Academy) · Prompting best practices (documentation Claude)
Points clés à retenir
- Sans délimiteurs, Claude peut confondre consignes et données, et l’erreur ne se voit pas.
- Des noms de balises libres, parlants et constants ; imbriquez-les quand le contenu a une hiérarchie.
- Balisez en priorité le contenu inséré : documents, saisies, données.
- Longs documents en tête, question à la fin, chaque document dans sa balise avec ses métadonnées.
- Les balises clarifient le prompt ; elles ne remplacent pas vos contrôles contre l’injection.