Aller au contenu principal

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

BesoinTechnique
Formatage cohérentPrefill avec le début du format attendu
Longueur contrôléeStop séquence à un marqueur de fin
Réponses orientéesPrefill 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 bavardagePrefill direct, sans laisser place aux préambules

Points clés

  1. Le pré-remplissage oriente Claude sans le contraindre totalement — il peut toujours dévier si le contenu l’exige
  2. Les séquences d’arrêt sont absolues — Claude s’arrête immédiatement quand il les génère
  3. La combinaison des deux donne un contrôle précis sur le début et la fin de la sortie
  4. Le texte retourné par l’API exclut le prefill et la séquence d’arrêt — pensez à les rajouter si nécessaire