Prompting
Lorsque vous commencez à utiliser les modèles Mistral, votre première interaction tournera autour des prompts. Maîtriser l'art de concevoir des prompts efficaces est essentiel pour générer des réponses de haute qualité à partir des modèles Mistral ou d'autres LLM.
Concepts principaux
L'art de concevoir des prompts
Ci-dessous, nous couvrons les concepts fondamentaux du prompting et comment concevoir des prompts efficaces pour maximiser les capacités de nos modèles.
Prompt système
system et user.
- Le prompt
systemest fourni au début de la conversation. Il définit le contexte général et les instructions pour le comportement du modèle et est généralement géré par le développeur. - Le prompt
userest fourni pendant la conversation pour donner au modèle un contexte ou des instructions spécifiques pour l'interaction en cours.
En tant que développeur, vous pouvez toujours utiliser des prompts user pour fournir du contexte ou des instructions supplémentaires pendant la conversation si nécessaire.
Si vous ne pouvez pas contrôler le prompt system, vous pouvez toujours inclure le contexte général et les instructions dans le prompt user en les concaténant avec la requête réelle.
Exemple avec séparation des rôles :
{
"role": "system",
"content": "system_prompt"
},
{
"role": "user",
"content": "user_prompt"
}Exemple avec concaténation :
{
"role": "user",
"content": "system_prompt\n\nUser: user_prompt"
}Définir un objectif
Structure
Vous êtes un modèle de détection de langue, votre tâche est de détecter la langue du texte donné.
# Langues disponibles
Sélectionnez la langue dans la liste suivante :
- Anglais : "en"
- Français : "fr"
- Espagnol : "es"
- Allemand : "de"
Toute langue non répertoriée doit être classée comme "autre" avec le code "on".
# Format de réponse
Votre réponse doit suivre ce format :
{"language_iso": <code_langue>}
# Exemples
Voici des exemples d'entrées et de sorties attendues :
## Anglais
User: Hello, how are you?
Answer: {"language_iso": "en"}
## Français
User: Bonjour, comment allez-vous?
Answer: {"language_iso": "fr"}Formatage
- Lisibles : faciles à parcourir pour les humains.
- Analysables : simples pour extraire des informations par programmation.
- Familiers : probablement vus massivement pendant l'entraînement du modèle. Un bon formatage aide non seulement le modèle à comprendre le prompt, mais facilite également l'itération et la maintenance de l'application par les développeurs.
Prompting par exemples
Few-shot prompting
[...]
# Exemples
Input: Hello, how are you?
Output: {"language_iso": "en"}
[...]Structure standard du few-shot prompting :
[
{
"role": "system",
"content": "Vous êtes un modèle de détection de langue. Votre tâche est de détecter la langue du texte donné.\n[...]"
},
{
"role": "user",
"content": "Hello, how are you?"
},
{
"role": "assistant",
"content": "{\"language_iso\": \"en\"}"
},
{
"role": "user",
"content": "Bonjour, comment allez-vous?"
},
{
"role": "assistant",
"content": "{\"language_iso\": \"fr\"}"
}
]Sorties structurées
Conseils
Ce qu'il faut éviter
Ce qu'il faut éviter
Ci-dessous, nous fournissons une liste de conseils « bons à savoir » sur ce qu'il faut éviter de faire. La liste n'est pas exhaustive et peut dépendre de votre cas d'usage — mais ces points sont à garder à l'esprit lors de la construction de vos prompts.
Éviter les termes subjectifs et flous
- Évitez les adjectifs quantitatifs flous : « trop long », « trop court », « beaucoup », « peu », etc.
- Fournissez plutôt des mesures objectives.
- Évitez les termes flous comme « choses », « trucs », « rédiger un rapport intéressant », « améliorer cela », etc.
- Précisez exactement ce que vous entendez par « intéressant », « meilleur », etc.
Éviter les contradictions
- « Si les nouvelles données sont liées à un enregistrement existant dans la base de données, mettez à jour cet enregistrement. »
- « Si les données sont nouvelles, créez un nouvel enregistrement. »
- Cela manque de clarté car de nouvelles données pourraient soit mettre à jour un enregistrement existant, soit créer un nouvel enregistrement.
Utilisez plutôt un arbre de décision :
## Comment mettre à jour les enregistrements de base de données
Suivez ces étapes :
- Si les données n'incluent pas de nouvelles informations (c'est-à-dire qu'elles existent déjà dans un enregistrement) :
- Ignorez ces données.
- Sinon, si les données ne sont liées à aucun enregistrement existant dans la même table :
- Créez un nouvel enregistrement.
- Sinon, si l'enregistrement lié fait plus de 100 caractères :
- Créez un nouvel enregistrement.
- Sinon, si les données contredisent directement l'enregistrement existant :
- Supprimez l'enregistrement existant et créez-en un nouveau.
- Sinon :
- Mettez à jour l'enregistrement existant pour inclure les nouvelles données.Ne faites pas compter les mots aux LLM
- Évitez : « Si l'enregistrement est trop long, divisez-le en plusieurs enregistrements. »
- Évitez : « Si l'enregistrement fait plus de 100 caractères, divisez-le en plusieurs enregistrements. »
- Fournissez plutôt le nombre de caractères en entrée :
Enregistrements existants : - { record: "User: Alice, Age: 30", charCount: 15 } - { record: "User: Bob, Age: 25", charCount: 13 } Nouvelles données : - { data: "User: Charlie, Age: 35", charCount: 17 }
Ne générez pas trop de tokens
- Générer le contenu complet d'un enregistrement pour une opération
NO_OP. - Générer un livre entier en une seule fois.
Générez uniquement la mise à jour ou les données nécessaires.
Privilégier les échelles verbales
« Évaluez ces options sur une échelle de 1 à 5, 1 étant très peu pertinent et 5 étant très pertinent. »Utilisez :
Évaluez ces options en utilisant cette échelle :
- Très faible : si l'option est très peu pertinente
- Faible : si l'option n'est pas suffisamment bonne
- Neutre : si l'option n'est pas particulièrement intéressante
- Bon : si l'option mérite d'être considérée
- Très bon : pour les options très pertinentesVous pouvez convertir cette échelle verbale en échelle numérique si nécessaire.
Exemples de prompts
- Classification
- Résumé
- Personnalisation
- Évaluation
Les modèles Mistral peuvent facilement catégoriser du texte en classes distinctes. Prenons l'exemple d'un chatbot de support client pour une banque : nous pouvons établir une série de catégories prédéfinies dans le prompt, puis demander aux modèles Mistral AI de catégoriser la question du client en conséquence.
Dans l'exemple suivant, lorsqu'on lui présente la demande du client, les modèles Mistral AI la catégorisent correctement comme « country_support » :
Demande du client : « Je souhaiterais savoir si vos cartes sont disponibles dans l'UE, car je réside en France et je serais intéressé par l'utilisation de vos cartes. » Réponse de l'assistant : « country_support »
Prompt système
Le prompt de classification doit être soigneusement conçu pour garantir que le modèle catégorise correctement la demande du client. Pour la classification, il existe 2 stratégies principales :
- Demander directement le label : le modèle doit alors répondre par un seul mot ou une seule chaîne de caractères.
- Efficace, rapide et économique, cette stratégie utilise le moins de tokens de sortie mais peut manquer de fiabilité et de flexibilité.
- Demander une sortie json : le modèle doit alors répondre par un objet json facilement traitable en aval.
- Fiable, flexible et pratique, cette stratégie génère légèrement plus de tokens mais permet des cas d'usage plus complexes et davantage de flexibilité.
Ce prompt est conçu pour que le modèle réponde avec un seul terme composé en très peu de tokens.
Vous êtes un bot de service client bancaire. Votre tâche consiste à évaluer l'intention du client et à catégoriser sa demande dans l'une des catégories prédéfinies.
# Catégories
Les catégories principales disponibles sont les suivantes :
- card_arrival : Demandes concernant l'arrivée de la carte ou si elle est perdue.
- change_pin : Demandes concernant la modification du code PIN de la carte.
- exchange_rate : Demandes concernant le taux de change de la carte.
- country_support : Demandes concernant les pays pris en charge par la carte.
- cancel_transfer : Demandes concernant l'annulation d'un virement.
- charge_dispute : Demandes concernant la contestation d'un débit.
Si le texte ne correspond à aucune des catégories ci-dessus, classez-le comme :
- customer_service : Demandes concernant le service client en général qui ne correspondent pas aux catégories précédentes.
# Format de réponse
Vous répondrez uniquement avec la catégorie parmi celles listées ci-dessus, sans aucune explication ni note, sous forme d'un seul terme composé autonome.
## Exemples
Voici quelques exemples de demandes clients et leurs catégories correspondantes. Vous recevrez une nouvelle demande client et répondrez avec la catégorie correspondante.
User: Comment savoir si je vais recevoir ma carte ou si elle est perdue ? Je suis préoccupé par le processus de livraison et j'aimerais m'assurer que je recevrai ma carte comme prévu. Pourriez-vous s'il vous plaît fournir des informations sur le processus de suivi de ma carte, ou confirmer s'il existe des indicateurs permettant d'identifier si la carte a été perdue pendant la livraison ?
Answer: card_arrival
User: Je prévois un voyage international à Paris et j'aimerais me renseigner sur les taux de change actuels pour les euros ainsi que sur les frais éventuels pour les transactions à l'étranger.
Answer: exchange_rate
User: Quels sont les pays pris en charge ? Je vais voyager et vivre à l'étranger pendant une période prolongée, notamment en France et en Allemagne, et j'apprécierais toute information concernant la compatibilité et la fonctionnalité dans ces régions.
Answer: country_support
User: Pouvez-vous m'aider à démarrer mon ordinateur ? J'ai des difficultés à démarrer mon ordinateur et j'apprécierais votre expertise pour m'aider à résoudre le problème.
Answer: customer_service