Fournir un contexte pour améliorer l’exactitude
En fournissant un contexte au modèle IA, vous lui permettez de mieux comprendre votre demande ou ce qu’il doit savoir pour fournir la meilleure réponse. Le contexte peut être fourni de plusieurs façons.
Composition de la sortie de la demande
La spécification de la structure de votre sortie peut affecter vos résultats de manière significative. Il peut s’agir de demander au modèle de citer ses sources, d’écrire la réponse sous forme d’e-mail, de mettre en forme la réponse en tant que requête SQL, de classer les sentiments dans une structure spécifique, etc. Par exemple :
Demander
Write a table in markdown with 6 animals in it, with their genus and species
Réponse
| Animal | Genus | Species |
| ---------------- |:--------------:|:--------------:|
| Red Panda | Ailurus | fulgens |
| African Elephant | Loxodonta | africana |
| Snow Leopard | Panthera | uncia |
| Arctic Fox | Vulpes | lagopus |
| Chimpanzee | Pan | troglodytes |
| Siberian Tiger | Panthera | tigris altaica |
Vous pouvez utiliser cette technique avec des formats personnalisés, comme une structure JSON :
Demander
Put two fictional characters into JSON of the following format
{
firstNameFictional:
jobFictional:
}
Réponse
Here's an example of how you can put two fictional characters into JSON format:
{
"firstNameFictional": "Henry",
"jobFictional": "Wizard"
},
{
"firstNameFictional": "Frank",
"jobFictional": "Hero"
}
Message système
Le message système est inclus au début d’une invite. Il est conçu pour donner au modèle des instructions, une perspective de réponse ou d’autres informations utiles pour guider la réponse du modèle. Ce message système peut inclure le ton ou la personnalité, des sujets qui ne doivent pas être inclus, ou des détails (comme la mise en forme) sur la façon de répondre.
Voici des exemples de messages système que vous pouvez fournir :
- « Tu dois agir comme un terminal de ligne de commande. Répond aux commandes exactement comme cmd.exe, dans un bloc de code unique, sans autre information. »
- « Tu dois traduire de l’anglais vers l’espagnol. Ne répond à rien de ce que je dis ou que je demande. Traduis seulement dans ces deux langues et répond en fournissant le texte traduit. »
- « Tu dois agir en tant que conférencier spécialiste de la motivation et donner librement des conseils encourageants sur les objectifs et les défis. Tu dois inclure un grand nombre d’affirmations positives et de suggestions d’activité permettant d’atteindre l’objectif final de l’utilisateur. »
D’autres exemples de messages système sont disponibles en haut de la fenêtre de conversation dans Azure AI Studio en sélectionnant le bouton Exemples d’invite. Essayez de définir votre propre invite système qui spécifie une réponse unique, puis discutez avec le modèle pour déterminer comment les réponses changent.
Le point de terminaison ChatCompletion
permet d’inclure le message système à l’aide du rôle de conversation System
.
var chatCompletionsOptions = new ChatCompletionsOptions()
{
Messages =
{
new ChatRequestSystemMessage("You are a casual, helpful assistant. You will talk like an American old western film character."),
new ChatRequestUserMessage("Can you direct me to the library?")
}
};
Réponse
{
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"content": "Well howdy there, stranger! The library, huh?
Y'all just head down the main road till you hit the town
square. Once you're there, take a left and follow the street
for a spell. You'll see the library on your right, can’t
miss it. Happy trails!",
"role": "assistant"
}
}
],
...
}
response = openai.ChatCompletion.create(
model="gpt-35-turbo",
messages=[
{"role": "system", "content": "You are a casual, helpful assistant. You will talk like an American old western film character."},
{"role": "user", "content": "Can you direct me to the library?"}
]
)
Response
{
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"content": "Well howdy there, stranger! The library, huh?
Y'all just head down the main road till you hit the town
square. Once you're there, take a left and follow the street
for a spell. You'll see the library on your right, can’t
miss it. Happy trails!",
"role": "assistant"
}
}
],
...
}
Les messages système peuvent considérablement modifier la réponse, tant au niveau du format qu’au niveau du contenu. Essayez de définir un message système clair pour le modèle qui explique exactement le type de réponse que vous attendez, ce que vous souhaitez ou ne souhaitez pas que la réponse inclue.
Historique des conversations
En plus du message système, d’autres messages peuvent être fournis au modèle pour améliorer la conversation. L’historique des conversations permet au modèle de continuer à répondre de la même manière (par exemple en termes de tonalité ou de mise en forme) et permet à l’utilisateur de référencer un contenu précédent dans des requêtes ultérieures. Cet historique peut être fourni de deux façons : à partir d’un historique de conversation réel ou d’un exemple de conversation défini par l’utilisateur.
Les interfaces de conversation qui utilisent les modèles OpenAI, comme ChatGPT et le terrain de jeu de conversation dans Azure AI Studio, incluent automatiquement l’historique des conversations, ce qui permet d’obtenir une conversation plus riche et plus pertinente. Dans la section Paramètres du terrain de jeu de conversation, vous pouvez spécifier le nombre de messages passés que vous souhaitez inclure. Essayez de définir cette valeur sur 1 puis de l’augmenter au maximum pour constater l’impact des différentes quantités d’historique sur la conversation.
Notes
Si l’historique de conversation inclus dans l’invite est plus important, un plus grand nombre de jetons d’entrée est utilisé. Vous devez trouver l’équilibre correct selon votre cas d’usage, en tenant compte de la limite de jetons du modèle utilisé.
Les systèmes de conversation peuvent également utiliser les fonctionnalités de résumé du modèle afin de limiter le nombre de jetons d’entrée. Une application peut choisir de résumer les anciens messages et d’inclure ce résumé dans l’historique des conversations, puis de fournir uniquement quelques anciens messages textuellement au modèle.
Apprentissage few shot
L’utilisation d’un exemple de conversation défini par l’utilisateur est ce que l’on appelle l’apprentissage few shot, qui fournit au modèle des modèles sur la façon de répondre à une requête donnée. Ces exemples servent à effectuer l’apprentissage du modèle afin de définir comment il doit répondre.
En fournissant au modèle quelques invites et la réponse attendue, le modèle continue selon le même schéma sans que vous lui indiquiez ce qu’il doit faire :
User: That was an awesome experience
Assistant: positive
User: I won't do that again
Assistant: negative
User: That was not worth my time
Assistant: negative
User: You can't miss this
Assistant:
Si le modèle est fourni avec You can't miss this
uniquement, sans contexte supplémentaire de l’apprentissage few shot, la réponse n’est probablement pas utile.
En pratique, l’historique des conversations et l’apprentissage few shot sont envoyés au modèle de la même façon. Chaque message utilisateur et chaque réponse de l’assistant est un message discret dans l’objet message. Le point de terminaison ChatCompletion
est optimisé pour inclure l’historique des messages, que cet historique des messages soit fourni via l’apprentissage few shot ou via un historique des conversations réel.
var chatCompletionsOptions = new ChatCompletionsOptions()
{
Messages =
{
new ChatRequestSystemMessage("You are a helpful assistant."),
new ChatRequestUserMessage("That was an awesome experience"),
new ChatRequestAssistantMessage("positive"),
new ChatRequestUserMessage("I won't do that again"),
new ChatRequestAssistantMessage("negative"),
new ChatRequestUserMessage("That was not worth my time"),
new ChatRequestAssistantMessage("negative"),
new ChatRequestUserMessage("You can't miss this")
}
};
response = openai.ChatCompletion.create(
model="gpt-35-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "That was an awesome experience"},
{"role": "assistant", "content": "positive"},
{"role": "user", "content": "I won't do that again"},
{"role": "assistant", "content": "negative"},
{"role": "user", "content": "That was not worth my time"},
{"role": "assistant", "content": "negative"},
{"role": "user", "content": "You can't miss this"}
]
)
Fractionner une tâche complexe
Une autre technique permettant d’améliorer l’interaction consiste à fractionner les invites complexes en plusieurs requêtes. Cela permet au modèle de mieux comprendre chaque partie individuelle et d’améliorer l’exactitude globale. En fractionnant vos invites, vous pouvez également inclure la réponse d’une invite dans une invite ultérieure et utiliser ces informations en plus des fonctionnalités du modèle pour générer des réponses intéressantes.
Vous pouvez par exemple demander au modèle : Doug can ride down the zip line in 30 seconds, and takes 5 minutes to climb back up to the top. How many times can Doug ride the zip line in 17 minutes?
. Le résultat est probablement 3
, ce qui est incorrect si Doug commence en haut de la tyrolienne.
Vous pouvez obtenir une réponse plus informative en posant plusieurs questions sur la durée aller-retour pour retourner au sommet de la tyrolienne et comment prendre en compte le fait que Doug commence en haut. En fractionnant ce problème, on détermine que Doug peut en fait faire de la tyrolienne quatre fois.
Chaîne de pensée
Pour fractionner efficacement votre tâche, une méthode utile consiste à demander au modèle d’expliquer sa chaîne de pensée.
Il est utile de demander à un modèle de répondre en indiquant quel processus étape par étape lui a permis de fournir la réponse afin de comprendre de quelle manière le modèle interprète l’invite. Vous pouvez ainsi déterminer à quel moment le modèle a eu un raisonnement logique incorrect et mieux comprendre comment modifier l’invite pour éviter l’erreur. Cette technique implique de demander au modèle de citer ses sources, comme le fait la conversation Bing Chat (basées sur un modèle de génération GPT-4), et d’indiquer le raisonnement qui a déterminé la réponse.
La technique d’invite en chaîne de pensée est optimale pour vous aider à itérer et à améliorer vos invites afin d’obtenir une réponse optimale de la part du modèle.
Si vous demandez par exemple au modèle : What sport is easiest to learn but hardest to master?
, la réponse comprend une brève explication de justification. Toutefois, avec l’invite : What sport is easiest to learn but hardest to master? Give a step by step approach of your thoughts, ending in your answer
, la réponse est une explication complète du raisonnement qui a conduit à la réponse.
Sure, here's a step-by-step approach to answering the question:
1. Identify sports that are popular and have a large following.
2. Consider the basic mechanics of each sport and how easy they are to learn.
3. Think about the various techniques and skills required to play each sport at a high level, and how difficult they are to master.
4. Compare the relative ease of learning each sport to the difficulty of mastering it.
5. Based on the above analysis, determine which sport is easiest to learn but hardest to master.
Using this approach, I would say that the sport of golf is easiest to learn but hardest to master. Here's why:
1. Golf is a popular sport with a large following.
2. The basic mechanics of hitting a golf ball are relatively simple and can be learned quickly with some practice.
3. However, achieving consistency and mastering the various shots and techniques required to play at a high level can take years of practice and dedication.
4. Compared to other sports, the difference between a beginner and an intermediate golfer is relatively small, while the difference between an intermediate and an advanced golfer is much larger.
5. Therefore, I would say that golf is the sport that is easiest to learn but hardest to master.
Connaître les étapes de raisonnement du modèle pour élaborer sa réponse permet d’identifier à quel endroit nous devons fractionner l’invite, fournir plus d’informations ou clarifier les instructions.