N Completions et Stop Sequences
Sur cette page
Générer plusieurs réponses en une seule requête
Pour clore cette section sur les paramètres de génération, nous abordons deux outils de contrôle plus opérationnels : le paramètre N completions, qui permet de demander au modèle plusieurs réponses à partir d’un même prompt en un seul appel API, et les stop sequences, qui décident où la génération s’arrête. Le premier sert à comparer des alternatives, à augmenter vos chances d’obtenir une réponse optimale ou à alimenter un processus de sélection automatique ; les secondes vous donnent la main sur la longueur et le format des sorties.
Le paramètre n : comment ça marche
Lorsque vous définissez n=5, le modèle génère 5 réponses indépendantes pour votre prompt, chacune retournée comme un choix (choice) distinct dans l’objet de réponse. Un point de facturation mérite votre attention avant de vous en servir massivement : les tokens d’entrée — votre prompt — ne sont facturés qu’une seule fois, mais les tokens de sortie le sont pour chaque completion. Avec n=5, vous payez donc cinq fois les tokens de sortie, mais une seule fois le prompt : pour un prompt long et des réponses courtes, c’est nettement plus économique que cinq appels séparés.
from mistralai.client import Mistral
client = Mistral(api_key="votre-cle-api")
response = client.chat.complete(
model="mistral-large-latest",
messages=[
{"role": "user", "content": "Proposez un slogan pour une marque de café bio français."}
],
n=5,
temperature=0.8
)
for i, choice in enumerate(response.choices):
print(f"Option {i+1} : {choice.message.content}")
Ce code produit 5 slogans différents, parmi lesquels vous choisissez le meilleur. C’est le premier grand usage de n : la génération créative, où obtenir plusieurs options pour un slogan, un titre ou un nom de produit vaut mieux qu’une seule tentative. Le deuxième est la classification avec vote : on génère N classifications du même texte et on retient la réponse majoritaire, ce qui lisse les erreurs occasionnelles. On s’en sert aussi pour l’exploration — tester plusieurs approches d’un même problème — et pour le contrôle qualité, en vérifiant la cohérence du modèle par comparaison de ses propres réponses.
Trois limites à connaître avant de déployer. D’abord, tous les modèles Mistral ne supportent pas n supérieur à 1 : vérifiez la documentation du modèle que vous utilisez. Ensuite, la latence augmente avec n, puisque le modèle génère plus de tokens au total. Enfin — et c’est l’erreur classique du débutant — combinez toujours n > 1 avec une température suffisante (0.5 et plus) : à température 0, vos cinq réponses seront quasi identiques et vous aurez payé cinq fois la même phrase.
Les stop sequences : contrôler la fin de la génération
Les stop sequences sont des chaînes de caractères qui forcent le modèle à s’arrêter dès qu’il les génère. C’est un mécanisme essentiel pour contrôler la longueur et le format des réponses. Commençons par un exemple volontairement simpliste pour fixer l’idée :
response = client.chat.complete(
model="mistral-large-latest",
messages=[
{"role": "user", "content": "Listez les jours de la semaine, un par ligne."}
],
stop=["Samedi"]
)
Ici, le modèle s’arrête dès qu’il génère le mot « Samedi », produisant une liste tronquée. En pratique, les stop sequences sont surtout utiles avec des délimiteurs structurels. Premier cas d’usage : extraire une seule section d’une réponse structurée. Si votre prompt demande une analyse en trois parties, arrêter la génération au titre de la deuxième vous donne uniquement la première :
response = client.chat.complete(
model="mistral-large-latest",
messages=[
{"role": "user", "content": """Analysez ce produit :
## Points forts
(votre analyse ici)
## Points faibles
(votre analyse ici)
## Conclusion
(votre analyse ici)"""}
],
stop=["## Points faibles"]
)
# Le modèle s'arrête après les points forts
Deuxième cas : limiter la génération à un bloc JSON, en combinant la stop sequence avec un pré-remplissage du message assistant qui ouvre l’accolade :
response = client.chat.complete(
model="mistral-large-latest",
messages=[
{"role": "user", "content": "Retournez les métadonnées de cet article en JSON."},
{"role": "assistant", "content": "{", "prefix": True}
],
stop=["}"]
)
# Le modèle génère le contenu JSON et s'arrête à la fermeture
Troisième cas : empêcher le modèle de continuer après sa réponse. Pour une question fermée, arrêter au premier retour à la ligne garantit un « OUI » ou un « NON » sec, sans paragraphe de justification que vous n’avez pas demandé :
response = client.chat.complete(
model="mistral-large-latest",
messages=[
{"role": "user", "content": "Répondez à la question suivante par OUI ou NON uniquement.\nLa Terre est-elle ronde ?"}
],
stop=["\n"]
)
Le paramètre max_tokens
Complémentaire aux stop sequences, max_tokens fixe une limite dure sur le nombre de tokens de sortie :
response = client.chat.complete(
model="mistral-large-latest",
messages=[
{"role": "user", "content": "Résumez l'histoire de France."}
],
max_tokens=200
)
Attention à son comportement : max_tokens coupe la réponse brutalement, potentiellement au milieu d’une phrase — votre résumé peut se terminer sur « et c’est ainsi que Napoléon ». Traitez-le comme un filet de sécurité contre les réponses interminables, pas comme le moyen principal de contrôler la longueur. Pour cela, préférez les instructions dans le prompt (« répondez en 3 phrases ») combinées à un max_tokens généreux.
Combiner les paramètres
Ces mécanismes prennent toute leur valeur ensemble. L’exemple suivant génère 5 titres d’articles différents, chacun limité à une seule ligne grâce à la stop sequence, avec un plafond de 50 tokens en garde-fou :
response = client.chat.complete(
model="mistral-large-latest",
messages=[
{
"role": "system",
"content": "Vous générez des titres d'articles de blog. Un seul titre par réponse."
},
{
"role": "user",
"content": "Thème : productivité au travail en 2026"
}
],
n=5,
temperature=0.8,
max_tokens=50,
stop=["\n"]
)
titres = [choice.message.content.strip() for choice in response.choices]
for i, titre in enumerate(titres):
print(f"{i+1}. {titre}")
Points clés à retenir
- Le paramètre
ngénère plusieurs réponses en un seul appel (tokens d’entrée facturés une fois) - Combinez
n > 1avec une température suffisante pour obtenir de vraies variations - Les stop sequences arrêtent la génération à un délimiteur précis
max_tokensest un filet de sécurité, pas un contrôle de longueur principal- Combinez ces paramètres pour un contrôle fin de la génération