Formater la sortie, sans préremplir
Sur cette page
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.
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
assistantrenvoie 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_sequencesavec 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.