Préfixe de chat

La complétion de préfixe impose le début de la réponse : vous écrivez les premiers caractères, le modèle poursuit exactement à partir de là. C'est le moyen le plus sûr de supprimer les préambules polis et de garantir un format.

Comment ça marche#

Ajoutez un dernier message assistant marqué "prefix": true. Le modèle ne commence pas un nouveau message : il continue celui-là.

reponse = client.chat.completions.create(
    model="mina-flash",
    messages=[
        {"role": "user", "content": "Écris une fonction Python qui inverse une chaîne."},
        {"role": "assistant", "content": "```python\n", "prefix": True},
    ],
    stop=["```"],
    max_tokens=150,
    temperature=0,
)

print(reponse.choices[0].message.content)
# → def inverser_chaine(chaine):
#       ...
# (aucune phrase d'introduction, aucune balise à nettoyer)

Le SDK OpenAI transmet les champs inconnus tels quels : prefix passe sans adaptation.

Règles#

  • Le message marqué prefix doit être le dernier de la liste et avoir le rôle assistant.
  • Un seul préfixe par requête.
  • Associez presque toujours un stop : sans lui, le modèle peut refermer le bloc puis continuer à bavarder.

À quoi ça sert vraiment#

BesoinPréfixe à imposer
Recevoir du code brut```python\n + stop: ["```"]
Forcer un JSON{" (voir aussi Sortie JSON)
Imposer une langueRéponse en français :
Reprendre une génération coupéele texte déjà reçu, pour continuer là où finish_reason: "length" s'est arrêté
Imposer un verdictDécision :

Reprendre une réponse tronquée#

def completer(client, messages, deja_recu="", tours=3):
    """Poursuit une réponse coupée par max_tokens, sans la régénérer."""
    for _ in range(tours):
        suite = list(messages)
        if deja_recu:
            suite.append({"role": "assistant", "content": deja_recu, "prefix": True})
        reponse = client.chat.completions.create(
            model="mina-low", messages=suite, max_tokens=2000,
        )
        choix = reponse.choices[0]
        deja_recu += choix.message.content or ""
        if choix.finish_reason != "length":
            break
    return deja_recu
Pourquoi c'est plus fiable qu'une consigne

« Réponds uniquement avec du code » est une demande : le modèle peut l'oublier. Un préfixe est une contrainte : les premiers caractères sont déjà écrits, il ne peut littéralement pas commencer autrement.

Limites#

  • Le préfixe compte dans les jetons d'entrée : gardez-le court.
  • Non combinable avec les appels d'outils dans la même requête.
  • Requête servie par un moteur spécifique : si celui-ci est indisponible, la requête échoue en 503 plutôt que de basculer silencieusement sur un moteur qui ignorerait le préfixe : vous ne recevrez jamais une réponse qui l'a discrètement oublié.

Paramètres

Réponse API