Aller au contenu principal

Formater la sortie et pré-remplir

Mis à jour le 29 juillet 2026

Baliser la sortie, pas seulement l’entrée

Nous avons utilisé les balises XML pour délimiter les données entrantes. Le même outil sert dans l’autre sens : vous pouvez demander à Claude d’envelopper sa réponse dans des balises spécifiques.

prompt = "Écris un poeme sur l'automne. Mets le poeme entre les balises <poeme></poeme>."

L’avantage est immédiat dès que la réponse n’est pas lue par un humain mais consommée par un programme : celui-ci peut extraire le contenu entre les balises de manière fiable, sans deviner où s’arrête la politesse et où commence le livrable. Une expression régulière sur <poeme>(.*?)</poeme> remplace avantageusement toute tentative de nettoyage heuristique.

Parler à la place de Claude

Le pré-remplissage — le prefill — exploite la structure user/assistant vue en première leçon. En plaçant du texte dans le tour assistant, vous indiquez à Claude qu’il a déjà commencé à parler : il continuera à partir de ce point exact.

messages = [
    {"role": "user", "content": "Écris un poeme sur l'automne entre des balises <poeme>."},
    {"role": "assistant", "content": "<poeme>"}
]

Claude enchaîne directement avec le contenu du poème. La balise ouvrante n’est plus une consigne qu’il doit se rappeler de suivre, c’est un fait accompli qu’il ne peut que prolonger. La nuance est de taille : une instruction peut être partiellement suivie, un début de phrase ne peut pas être défait.

Le cas du JSON

C’est la même logique qui permet d’obtenir du JSON de manière quasi déterministe. Plutôt que de répéter « réponds uniquement en JSON, sans texte autour », pré-remplissez avec l’accolade ouvrante.

messages = [
    {"role": "user", "content": "Donne-moi les infos de cette personne en JSON."},
    {"role": "assistant", "content": "{"}
]

Le modèle se retrouve à l’intérieur d’un objet JSON ; la seule continuation cohérente est une clé. Pensez simplement à réinsérer l’accolade dans la chaîne récupérée avant de la parser, puisqu’elle vient de vous et non du modèle.

Borner la réponse avec les stop sequences

Le prefill contrôle le début ; les stop_sequences contrôlent la fin. Si Claude doit générer du contenu entre <poeme> et </poeme>, utilisez </poeme> comme stop séquence : la génération s’arrête à cet endroit précis. Cela économise des tokens et élimine les commentaires superflus qui suivraient la balise fermante. Combinés, les deux mécanismes vous donnent des réponses parfaitement bornées, sans dépendre de la bonne volonté du modèle sur la forme.

Empiler les techniques

Rien n’oblige à choisir. Un prompt de production combine généralement plusieurs variables d’entrée délimitées en XML, un format de sortie spécifié lui aussi en XML, et un prefill pour démarrer la réponse au bon endroit.

prompt = f"""Voici un email et le nom de son auteur. Extrais les informations cles.
<email>{email_content}</email>
<auteur>{author_name}</auteur>
Réponds dans des balises <analyse></analyse>."""

Chaque bloc a un rôle identifiable : deux entrées nommées, une consigne, un contenant de sortie. Un collègue qui reprend ce prompt six mois plus tard comprend sa structure en quelques secondes, et surtout il peut en modifier une partie sans casser les autres.

Deux essais pour éprouver le prefill

Utilisez d’abord le prefill pour forcer Claude à argumenter qu’un joueur spécifique est le meilleur de tous les temps, au lieu de le laisser choisir : c’est le contre-pied de l’exercice de la leçon précédente, et il montre à quel point le premier mot de la réponse oriente tout le reste. Demandez ensuite deux haïkus séparés, un sur les chats et un sur les chiens, en utilisant des balises XML distinctes pour chacun — puis écrivez les trois lignes de code qui les extraient. C’est en écrivant l’extraction qu’on comprend pourquoi le balisage n’est pas une coquetterie.