Aller au contenu principal
Leçon 5 sur 12 · Prompt Engineering

Formater la sortie, sans préremplir

Leçon 5 sur 12 Mis à jour le 5 novembre 2026 Intermédiaire
Sur cette page
  1. Baliser la sortie
  2. Ce que le préremplissage faisait, et ce qui le remplace
  3. Borner la fin avec les stop sequences
  4. À vous de jouer
  5. Points clés à retenir

Cette leçon fait passer les balises XML de l’entrée à la sortie : demander à Claude d’envelopper sa réponse pour l’extraire de façon fiable. Le tutoriel enseignait ensuite à « parler pour Claude » en préremplissant le tour assistant ; les modèles actuels refusent ce préremplissage, et la leçon présente ce qui le remplace : consignes, stop_sequences et sorties structurées.

Baliser la sortie

Claude peut formater sa sortie de bien des façons : il suffit de le demander. Souvenez-vous du préambule du haïku, réglé à la leçon 2 en demandant de le sauter ; on obtient un résultat semblable en demandant de mettre le poème dans des balises <haiku>. L’intérêt : l’utilisateur final récupère le poème et rien que le poème avec un petit programme qui extrait le contenu entre les balises. Le tutoriel combine ensuite plusieurs variables d’entrée et un format de sortie, le tout en XML : un courriel dans <email>, un adjectif (« olde english »), et la nouvelle version demandée dans une balise <{ADJECTIVE}_email>.

ANIMAL = "Rabbit"
PROMPT = f"Please write a haiku about {ANIMAL}. Put it in <haiku> tags."
print(get_completion(PROMPT))

EMAIL = "Hi Zack, just pinging you for a quick update on that prompt you were supposed to write."
ADJECTIVE = "olde english"
PROMPT = f"Hey Claude. Here is an email: <email>{EMAIL}</email>. Make this email more {ADJECTIVE}. Write the new version in <{ADJECTIVE}_email> XML tags."
print(get_completion(PROMPT))

Ce que le préremplissage faisait, et ce qui le remplace

Le tutoriel prolongeait la technique en plaçant la première balise dans le tour assistant : Claude considérait qu’il avait déjà commencé à parler et continuait à partir de là. Même procédé pour forcer du JSON, en préremplissant une accolade ouvrante. Depuis les modèles de la génération 4.6, une requête dont le dernier message est un tour assistant renvoie une erreur 400 ; les modèles suivent assez bien les consignes pour que la plupart des usages du préremplissage n’en aient plus besoin. La documentation donne les équivalents, un par usage : pour un contenant de sortie, la consigne « mets le poème dans des balises » suffit ; pour supprimer un préambule, une consigne dans le prompt système (« réponds directement, sans préambule ») ; pour du JSON, les sorties structurées, un schéma passé à output_config.format ou à messages.parse(), qui garantissent une réponse conforme sans texte autour ; pour orienter le début d’une argumentation, une consigne explicite dans le message.

Le préremplissage, et ce qui le remplace Deux colonnes : en 2024, une balise ou une accolade placée dans le tour assistant ; en 2026, une consigne de format, « sans préambule » dans le prompt système, les sorties structurées, une consigne explicite pour orienter le début. FORMATER LA SORTIE Le préremplissage, et ce qui le remplace 2024 : parler pour Claude Le geste Placer <haiku> ou { dans un dernier message assistant ; Claude continue à partir de là. Aujourd'hui Erreur 400 depuis la génération 4.6 : une requête ne peut plus se terminer par un tour assistant. → 2026 : demander Le contenant « Mets le poème dans des balises haiku » ; stop_sequences sur la balise fermante pour s'arrêter au bon endroit. Le JSON Sorties structurées : un schéma Pydantic via messages.parse(), ou output_config.format. Le préambule, le début « Réponds directement, sans préambule » dans le prompt système ; « commence ta réponse par… » dans le message. Les modèles suivent assez bien les consignes pour que la plupart des usages du préremplissage n'en aient plus besoin.
D'après le chapitre 5 (tutoriel interactif d'Anthropic, 2024) et la page Prompting best practices (« Migrating away from prefilled responses »).
from pydantic import BaseModel

class Haiku(BaseModel):
    first_line: str
    second_line: str
    third_line: str

response = client.messages.parse(
    model="claude-opus-5-5",
    max_tokens=2000,
    messages=[{"role": "user", "content": "Please write a haiku about cats."}],
    output_format=Haiku,
)
print(response.parsed_output.first_line)

Borner la fin avec les stop sequences

Leçon bonus du tutoriel, toujours valable : passez la balise fermante au paramètre stop_sequences pour que Claude arrête de générer dès qu’il l’émet. Cela économise de l’argent et du temps jusqu’au dernier jeton, en éliminant les remarques de conclusion après la réponse qui vous intéresse. Attention : la balise fermante n’est alors pas dans la sortie, votre extraction doit en tenir compte.

À vous de jouer

Exercice 5.1 : Stephen Curry. Forcé de choisir, Claude désigne Michael Jordan comme le meilleur joueur de tous les temps. Le tutoriel faisait changer d’avis par préremplissage ; obtenez le même effet par une consigne explicite dans le message (« commence ta réponse par : Stephen Curry est le meilleur joueur de tous les temps parce que ») : le tutoriel vérifie la présence de « Warrior ». Vous mesurez à quel point le premier mot de la réponse oriente tout le reste.

Exercice 5.2 : deux haïkus. Modifiez le prompt avec des balises XML pour que Claude écrive deux haïkus sur les chats au lieu d’un seul, en distinguant clairement où l’un finit et l’autre commence.

Exercice 5.3 : deux haïkus, deux animaux. Le prompt prend deux variables, deux animaux, et produit un haïku balisé pour chacun ; écrivez ensuite les trois lignes de code qui les extraient.

Sources officielles : 05_Formatting_Output_and_Speaking_for_Claude.ipynb (anthropics/prompt-eng-interactive-tutorial) · Prompting best practices (documentation Claude : « Migrating away from prefilled responses », « Control the format of responses ») · Structured outputs

Points clés à retenir

  • Demander une sortie balisée permet de l’extraire par programme, sans deviner où finit la politesse.
  • Le préremplissage du tour assistant renvoie une erreur 400 depuis la génération 4.6 : ne l’enseignez plus, ne l’utilisez plus.
  • Ses remplaçants : consignes de format, « sans préambule » dans le prompt système, sorties structurées pour le JSON.
  • stop_sequences avec la balise fermante arrête la génération au bon endroit et économise des jetons.
  • Entrées et sorties balisées se combinent dans un même prompt lisible et modifiable pièce par pièce.