XML et Markdown dans l'API
Structurer vos instructions pour le modèle
Quand vos prompts deviennent complexes — plusieurs blocs de contexte, des règles conditionnelles, des données à traiter — le texte brut ne suffit plus. Les tags XML et la syntaxe Markdown permettent de structurer vos instructions de manière lisible pour le modèle et maintenable pour votre équipe.
Mistral recommande explicitement l’utilisation de ces formats dans les prompts de production.
Pourquoi structurer les prompts
Les modèles de langage ont été entraînés sur des milliards de documents contenant du HTML, du XML et du Markdown. Ils reconnaissent ces formats et les interprètent correctement :
- Lisibles — faciles à scanner pour un humain qui audite le prompt
- Parsables — le modèle identifie clairement les sections et leur rôle
- Familiers — présents massivement dans les données d’entraînement
Tags XML pour délimiter les sections
Les tags XML sont idéaux pour isoler les données du prompt des instructions :
from mistralai import Mistral
import os
client = Mistral(api_key=os.getenv("MISTRAL_API_KEY"))
system_prompt = """Vous êtes un assistant d'analyse de documents.
<instructions>
Analysez le document fourni et extrayez les informations demandées.
Répondez uniquement en JSON.
Si une information est absente, utilisez null.
</instructions>
<output_schema>
{
"titre": "string",
"auteur": "string",
"date": "string (YYYY-MM-DD)",
"resume": "string (max 100 mots)",
"mots_cles": ["string"]
}
</output_schema>"""
user_prompt = """<document>
Rapport trimestriel Q1 2026 — Mistral AI
Rédigé par Arthur Mensch, CEO
Date de publication : 1er avril 2026
Ce rapport présente les résultats du premier trimestre 2026. L'entreprise a connu une croissance significative de son activité API avec une augmentation de 300% du nombre de requêtes quotidiennes.
</document>
Extrayez les métadonnées de ce document."""
response = client.chat.complete(
model="mistral-large-latest",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_prompt}
],
temperature=0.0
)
print(response.choices[0].message.content)
Tags XML courants en production
<instructions>...</instructions> <!-- Règles pour le modèle -->
<context>...</context> <!-- Informations de fond -->
<document>...</document> <!-- Texte à analyser -->
<examples>...</examples> <!-- Exemples few-shot -->
<constraints>...</constraints> <!-- Limites et interdits -->
<output_format>...</output_format> <!-- Format de sortie attendu -->
<user_data>...</user_data> <!-- Données utilisateur -->
Markdown pour les instructions lisibles
Le Markdown est excellent pour les listes de règles et les instructions hiérarchiques :
system_prompt = """# Assistant de rédaction technique
## Votre rôle
Vous rédigez de la documentation technique pour des APIs REST.
## Règles de rédaction
- **Vouvoiement** dans tout le texte
- Phrases courtes (max 25 mots)
- Un concept par paragraphe
- Code inline entre backticks : `GET /api/v1/users`
## Structure obligatoire
1. **Introduction** — Contexte et objectif de l'endpoint
2. **Requête** — Méthode, URL, headers, paramètres
3. **Réponse** — Codes HTTP, corps JSON, exemples
4. **Erreurs** — Codes d'erreur possibles et résolution
## Interdits
- Pas de jargon non défini
- Pas de "simplement" ou "facilement"
- Pas d'exemples avec des données fictives non réalistes"""
Combiner XML et Markdown
La combinaison des deux formats est la pratique la plus efficace pour les prompts complexes :
system_prompt = """# Agent de support multilingue
<persona>
Vous êtes l'assistant de la société DataFlow, éditeur de logiciels ETL.
Vous parlez français, anglais et espagnol.
</persona>
<rules>
## Règles de comportement
- Répondez dans la langue de l'utilisateur
- Identifiez la catégorie du problème : **bug**, **question**, **demande de fonctionnalité**
- Pour les bugs : collectez version du logiciel, OS, message d'erreur exact
## Escalade
- Si le problème persiste après 3 échanges → proposer un ticket support
- Si le client mentionne une perte de données → escalade immédiate (priorité haute)
</rules>
<knowledge_base>
- Version actuelle : DataFlow 4.2.1 (avril 2026)
- OS supportés : Windows 11, Ubuntu 22.04+, macOS 14+
- Documentation : docs.dataflow.io
</knowledge_base>"""
Pattern avancé : template de prompt réutilisable
def build_analysis_prompt(document: str, questions: list[str]) -> list:
"""Construit un prompt d'analyse structuré avec XML."""
system = """# Analyste de documents
<instructions>
Lisez le document fourni et répondez aux questions posées.
Chaque réponse doit citer la partie du document qui la justifie.
Si la réponse n'est pas dans le document, répondez "Non mentionné dans le document."
</instructions>
<output_format>
Pour chaque question, répondez au format :
**Q{n}** : [votre réponse]
> Citation : "[extrait du document]"
</output_format>"""
questions_formatted = "\n".join(
f"{i+1}. {q}" for i, q in enumerate(questions)
)
user = f"""<document>
{document}
</document>
<questions>
{questions_formatted}
</questions>"""
return [
{"role": "system", "content": system},
{"role": "user", "content": user}
]
# Utilisation
messages = build_analysis_prompt(
document="Contrat de prestation de services entre...",
questions=[
"Quelle est la durée du contrat ?",
"Quelles sont les pénalités de retard ?",
"Y a-t-il une clause de non-concurrence ?"
]
)
response = client.chat.complete(
model="mistral-large-latest",
messages=messages,
temperature=0.1
)
Bonnes pratiques Mistral
- Utilisez des tags XML pour séparer les données des instructions — le modèle les distingue mieux
- Utilisez Markdown pour les règles et la hiérarchie — plus lisible pour la maintenance
- Nommez vos tags de manière descriptive :
<document>plutôt que<data> - Fermez toujours vos tags XML — un tag ouvert sans fermeture peut confondre le modèle
- Indentez pour la lisibilité humaine — le modèle n’en a pas besoin mais votre équipe oui
Points clés à retenir
- Les tags XML isolent les données des instructions dans le prompt
- Le Markdown structure les règles et les listes de manière lisible
- Combinez les deux pour les prompts complexes de production
- Nommez vos tags de manière descriptive et fermez-les systématiquement
- Les prompts structurés sont plus faciles à maintenir, tester et versionner