Controler la sortie du modele
Claude genere du texte librement par defaut. Mais dans beaucoup de cas, vous voulez orienter ou contraindre sa reponse. Deux techniques puissantes permettent cela : le pre-remplissage du message assistant et les sequences d’arret.
Technique 1 : Pre-remplir la reponse de l’assistant
L’API Claude vous permet de fournir le debut de la reponse de l’assistant. Claude continuera a partir de la ou vous l’avez laisse, au lieu de partir de zero.
Le principe
Normalement, vous envoyez un message utilisateur et Claude repond 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-4-20250514",
max_tokens=1024,
messages=messages
)
# Le texte retourne est la SUITE du prefill
return response.content[0].text
Exemple : orienter une preference
Imaginons que vous demandez a Claude de choisir entre cafe et the :
# 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 preferences, mais je peux vous parler des deux..."
# Avec prefill : on oriente la reponse vers le cafe
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 retourne par l’API est la suite du prefill, pas la reponse complete. Pensez a concatener le prefill avec la reponse si necessaire.
Applications du pre-remplissage
- Forcer un format : prefill avec
{pour obtenir du JSON - Choisir une langue : prefill avec un debut de phrase dans la langue voulue
- Orienter le ton : prefill avec un debut formel ou decontracte
- Eviter les preambules : prefill avec le debut direct de la reponse
Technique 2 : Sequences d’arret
Les sequences d’arret (stop sequences) forcent Claude a s’arreter des qu’il genere une chaine de caracteres specifique. Le texte produit ne contiendra pas la sequence d’arret elle-meme.
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-4-20250514",
"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 a Claude de compter, mais arretons-le a un moment precis :
# 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’arrete juste avant de produire le “6”. La sequence d’arret n’apparait pas dans la sortie.
Plusieurs sequences d’arret
Vous pouvez specifier plusieurs sequences. Claude s’arrete a la premiere rencontree :
reponse = chat_with_stop(
"Ecris 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
La vraie puissance vient de la combinaison des deux approches. Vous pouvez a la fois demarrer la reponse la ou vous voulez et l’arreter ou vous voulez :
reponse = chat_with_stop(
"Genere 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 apres.
Applications pratiques
| Besoin | Technique |
|---|---|
| Formatage coherent | Prefill avec le debut du format attendu |
| Longueur controlee | Stop sequence a un marqueur de fin |
| Reponses orientees | Prefill avec le debut de la reponse souhaitee |
| Sortie structuree (JSON, XML, CSV) | Prefill + stop sequence (voir lecon suivante) |
| Eviter le bavardage | Prefill direct, sans laisser place aux preambules |
Points cles
- Le pre-remplissage oriente Claude sans le contraindre totalement — il peut toujours devier si le contenu l’exige
- Les sequences d’arret sont absolues — Claude s’arrete immediatement quand il les genere
- La combinaison des deux donne un controle precis sur le debut et la fin de la sortie
- Le texte retourne par l’API exclut le prefill et la sequence d’arret — pensez a les rajouter si necessaire