N Completions et Stop Sequences
Mis à jour le 28 juillet 2026
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 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": "{"}
],
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