Aller au contenu principal

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

BesoinTechnique
Formatage coherentPrefill avec le debut du format attendu
Longueur controleeStop sequence a un marqueur de fin
Reponses orienteesPrefill avec le debut de la reponse souhaitee
Sortie structuree (JSON, XML, CSV)Prefill + stop sequence (voir lecon suivante)
Eviter le bavardagePrefill direct, sans laisser place aux preambules

Points cles

  1. Le pre-remplissage oriente Claude sans le contraindre totalement — il peut toujours devier si le contenu l’exige
  2. Les sequences d’arret sont absolues — Claude s’arrete immediatement quand il les genere
  3. La combinaison des deux donne un controle precis sur le debut et la fin de la sortie
  4. Le texte retourne par l’API exclut le prefill et la sequence d’arret — pensez a les rajouter si necessaire