Aller au contenu principal

N Completions et Stop Sequences

Générer plusieurs réponses en une seule requête

Le paramètre N completions permet de demander au modèle de générer plusieurs réponses à partir d’un même prompt en un seul appel API. C’est un outil puissant pour comparer des alternatives, augmenter vos chances d’obtenir une réponse optimale ou alimenter un processus de sélection automatique.

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. Chaque réponse est un choix (choice) distinct dans l’objet de retour.

Point important pour la facturation : les tokens d’entrée (votre prompt) ne sont facturés qu’une seule fois, mais les tokens de sortie sont facturés pour chaque completion. Avec n=5, vous payez 5 fois les tokens de sortie.

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 produira 5 slogans différents, vous permettant de choisir le meilleur.

Quand utiliser N completions

  • Génération créative : obtenir plusieurs options pour un slogan, un titre, un nom de produit
  • Classification avec vote : générer N classifications et prendre la réponse majoritaire
  • Exploration : tester plusieurs approches d’un même problème
  • Contrôle qualité : vérifier la cohérence du modèle en comparant ses réponses

Limites à connaître

  • Tous les modèles Mistral ne supportent pas le paramètre n supérieur à 1. Vérifiez la documentation du modèle que vous utilisez.
  • La latence augmente avec n car le modèle génère plus de tokens au total
  • Combinez toujours n > 1 avec une température suffisante (0.5+), sinon les réponses seront quasi identiques

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.

response = client.chat.complete(
    model="mistral-large-latest",
    messages=[
        {"role": "user", "content": "Listez les jours de la semaine, un par ligne."}
    ],
    stop=["Samedi"]
)

Dans cet exemple, le modèle s’arrêtera dès qu’il générera le mot « Samedi », produisant une liste tronquée. C’est un exemple simplifié — en pratique, les stop sequences sont plus utiles avec des délimiteurs structurels.

Cas d’usage pratiques des stop sequences

Extraire une seule section :

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

Limiter la génération à un bloc JSON :

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

Empêcher le modèle de continuer après sa réponse :

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 modèle s'arrête après la première ligne (OUI ou NON)

Le paramètre max_tokens

Complémentaire aux stop sequences, le paramètre 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 : max_tokens coupe la réponse brutalement, potentiellement au milieu d’une phrase. Il est préférable de l’utiliser comme filet de sécurité plutôt que comme moyen principal de contrôler la longueur. 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

Voici un exemple qui combine N completions, stop sequences et max_tokens :

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}")

Ce code génère 5 titres différents, chacun limité à une seule ligne et 50 tokens maximum.

Points clés à retenir

  • Le paramètre n génère plusieurs réponses en un seul appel (tokens d’entrée facturés une fois)
  • Combinez n > 1 avec une température suffisante pour obtenir de vraies variations
  • Les stop sequences arrêtent la génération à un délimiteur précis
  • max_tokens est 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