Contrôler la sortie du modèle
Mis à jour le 30 juillet 2026
Claude génère du texte librement par défaut. Mais dans beaucoup de cas, vous voulez orienter ou contraindre sa réponse. Deux techniques puissantes permettent cela : le pré-remplissage du message assistant et les séquences d’arrêt.
Technique 1 : Pré-remplir la réponse de l’assistant
Le pré-remplissage exploite une propriété simple du modèle : il ne fait que continuer un texte. Si vous écrivez vous-même le début de sa réponse, il n’a plus à décider comment commencer — donc plus l’occasion d’ajouter « Bien sûr ! Voici… » avant d’entrer dans le sujet. L’API Claude vous permet de fournir le début de la réponse de l’assistant. Claude continuera à partir de là où vous l’avez laissé, au lieu de partir de zéro.
Le principe
Normalement, vous envoyez un message utilisateur et Claude répond librement :
import anthropic
client = anthropic.Anthropic()
def chat(user_message, prefill=None):
messages = [{"role": "user", "content": user_message}]
if prefill:
messages.append({"role": "assistant", "content": prefill})
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
messages=messages
)
# Le texte retourne est la SUITE du prefill
return response.content[0].text
Exemple : orienter une préférence
Imaginons que vous demandez à Claude de choisir entre café et thé :
# Sans prefill : Claude repond librement
reponse = chat("Tu preferes le cafe ou le the ?")
print(reponse)
# -> "En tant qu'IA, je n'ai pas de préférences, mais je peux vous parler des deux..."
# Avec prefill : on oriente la réponse vers le café
reponse = chat("Tu preferes le cafe ou le the ?", prefill="Je prefere le cafe car")
print("Je prefere le cafe car" + reponse)
# -> "Je prefere le cafe car son arome riche et sa complexite gustative..."
# Avec prefill : on oriente vers le the
reponse = chat("Tu preferes le cafe ou le the ?", prefill="Je prefere le the car")
print("Je prefere le the car" + reponse)
# -> "Je prefere le the car sa douceur et sa variete de saveurs..."
Point important : le texte retourné par l’API est la suite du prefill, pas la réponse complète. Pensez à concaténer le prefill avec la réponse si nécessaire.
Applications du pré-remplissage
- Forcer un format : prefill avec
{pour obtenir du JSON - Choisir une langue : prefill avec un début de phrase dans la langue voulue
- Orienter le ton : prefill avec un début formel ou décontracté
- Éviter les préambules : prefill avec le début direct de la réponse
Technique 2 : Séquences d’arrêt
Là où le pré-remplissage agit sur le début, les séquences d’arrêt agissent sur la fin — et de façon bien plus brutale. Le pré-remplissage oriente : Claude peut s’en écarter si le contenu l’exige. Une séquence d’arrêt coupe : dès que la chaîne est générée, la production cesse, même au milieu d’une phrase. Les séquences d’arrêt (stop sequences) forcent Claude à s’arrêter dès qu’il génère une chaîne de caractères spécifique. Le texte produit ne contiendra pas la séquence d’arrêt elle-même.
Le principe
import anthropic
client = anthropic.Anthropic()
def chat_with_stop(user_message, stop_sequences=None, prefill=None):
messages = [{"role": "user", "content": user_message}]
if prefill:
messages.append({"role": "assistant", "content": prefill})
kwargs = {
"model": "claude-sonnet-5",
"max_tokens": 1024,
"messages": messages
}
if stop_sequences:
kwargs["stop_sequences"] = stop_sequences
response = client.messages.create(**kwargs)
return response.content[0].text
Exemple : limiter un comptage
Demandons à Claude de compter, mais arrêtons-le à un moment précis :
# Sans stop sequence : Claude compte jusqu'a 10
reponse = chat_with_stop("Compte de 1 a 10, un nombre par ligne.")
print(reponse)
# -> "1\n2\n3\n4\n5\n6\n7\n8\n9\n10"
# Avec stop sequence : on l'arrete au "6"
reponse = chat_with_stop(
"Compte de 1 a 10, un nombre par ligne.",
stop_sequences=["6"]
)
print(reponse)
# -> "1\n2\n3\n4\n5\n"
Claude s’arrête juste avant de produire le “6”. La séquence d’arrêt n’apparaît pas dans la sortie.
Plusieurs séquences d’arrêt
Vous pouvez spécifier plusieurs séquences. Claude s’arrête à la première rencontrée :
reponse = chat_with_stop(
"Écris une liste de fruits : pomme, banane, cerise, datte, figue.",
stop_sequences=["cerise", "datte"]
)
print(reponse)
# -> "pomme, banane, " (s'arrete avant "cerise")
Combiner les deux techniques
Combinées, les deux techniques délimitent la sortie des deux côtés, ce qui revient à un format imposé sans avoir rien à valider ensuite. C’est la manière la plus économique d’obtenir du JSON ou du HTML propre : pas de post-traitement, pas de nettoyage des préambules, pas de bloc Markdown parasite autour du code. La vraie puissance vient de la combinaison des deux approches. Vous pouvez à la fois démarrer la réponse là où vous voulez et l’arrêter où vous voulez :
reponse = chat_with_stop(
"Génère une liste HTML de 3 couleurs.",
prefill="<ul>",
stop_sequences=["</ul>"]
)
html_complet = "<ul>" + reponse + "</ul>"
print(html_complet)
# -> "<ul>\n <li>Rouge</li>\n <li>Bleu</li>\n <li>Vert</li>\n</ul>"
On obtient un HTML propre, sans texte explicatif avant ou après.
Applications pratiques
| Besoin | Technique |
|---|---|
| Formatage cohérent | Prefill avec le début du format attendu |
| Longueur contrôlée | Stop séquence à un marqueur de fin |
| Réponses orientées | Prefill avec le début de la réponse souhaitée |
| Sortie structurée (JSON, XML, CSV) | Prefill + stop séquence (voir leçon suivante) |
| Éviter le bavardage | Prefill direct, sans laisser place aux préambules |
Points clés
- Le pré-remplissage oriente Claude sans le contraindre totalement — il peut toujours dévier si le contenu l’exige
- Les séquences d’arrêt sont absolues — Claude s’arrête immédiatement quand il les génère
- La combinaison des deux donne un contrôle précis sur le début et la fin de la sortie
- Le texte retourné par l’API exclut le prefill et la séquence d’arrêt — pensez à les rajouter si nécessaire