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)curl https://api.cloudzir.com/v1/chat/completions \
-H "Authorization: Bearer $CLOUDZIR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"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
}'Le SDK OpenAI transmet les champs inconnus tels quels : prefix passe sans
adaptation.
Règles#
- Le message marqué
prefixdoit être le dernier de la liste et avoir le rôleassistant. - 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#
| Besoin | Préfixe à imposer |
|---|---|
| Recevoir du code brut | ```python\n + stop: ["```"] |
| Forcer un JSON | {" (voir aussi Sortie JSON) |
| Imposer une langue | Réponse en français : |
| Reprendre une génération coupée | le texte déjà reçu, pour continuer là où finish_reason: "length" s'est arrêté |
| Imposer un verdict | Dé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
503plutô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é.