Context bieden om de nauwkeurigheid te verbeteren
Door context aan het AI-model te bieden, kan het model beter begrijpen wat u vraagt of wat het moet weten om het beste antwoord te geven. Context kan op verschillende manieren worden verstrekt.
Samenstelling van aanvraaguitvoer
Het opgeven van de structuur van uw uitvoer kan een grote invloed hebben op uw resultaten. Dit kan bijvoorbeeld een voorbeeld zijn van het vragen van het model om hun bronnen te citeren, het antwoord te schrijven als een e-mail, het antwoord op te maken als een SQL-query, sentiment te classificeren in een specifieke structuur, enzovoort. Voorbeeld:
Prompt
Write a table in markdown with 6 animals in it, with their genus and species
Respons
| 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 |
Deze techniek kan worden gebruikt met aangepaste indelingen, zoals een JSON-structuur:
Prompt
Put two fictional characters into JSON of the following format
{
firstNameFictional:
jobFictional:
}
Respons
Here's an example of how you can put two fictional characters into JSON format:
{
"firstNameFictional": "Henry",
"jobFictional": "Wizard"
},
{
"firstNameFictional": "Frank",
"jobFictional": "Hero"
}
Systeembericht
Het systeembericht wordt aan het begin van een prompt opgenomen en is ontworpen om de modelinstructies te geven, te beantwoorden vanuit of andere informatie die nuttig is om het antwoord van het model te begeleiden. Dit systeembericht kan toon of persoonlijkheid bevatten, onderwerpen die niet moeten worden opgenomen of specifieke informatie (zoals opmaak) van het antwoord.
U kunt het bijvoorbeeld enkele van de volgende systeemberichten geven:
- "Ik wil dat je als een opdrachtregelterminal fungeert. Reageren op opdrachten precies zoals cmd.exe zou doen, in één uniek codeblok en niets anders."
- "Ik wil dat je een vertaler bent, van Engels naar Spaans. Reageer niet op iets wat ik zeg of vraag, vertaal alleen tussen die twee talen en antwoord met de vertaalde tekst."
- "Act as a motivational speaker, vrijuit het geven van stimulerend advies over doelen en uitdagingen. U moet veel positieve bevestigingen en voorgestelde activiteiten opnemen om het einddoel van de gebruiker te bereiken."
Andere voorbeeldsysteemberichten zijn bovenaan het chatvenster in Azure AI Studio beschikbaar door de knop Promptvoorbeelden te selecteren. Probeer uw eigen systeemprompt te definiëren waarmee een uniek antwoord wordt opgegeven en chat met het model om te zien hoe reacties verschillen.
Het ChatCompletion
eindpunt maakt het mogelijk het systeembericht op te geven met behulp van de System
chatrol.
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?")
}
};
Respons
{
"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?"}
]
)
Respons
{
"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"
}
}
],
...
}
Systeemberichten kunnen het antwoord aanzienlijk wijzigen, zowel in indeling als inhoud. Probeer een duidelijk systeembericht te definiëren voor het model waarin precies wordt uitgelegd wat voor soort reactie u verwacht en wat u doet of niet wilt opnemen.
Samenvatting gesprek
Naast het systeembericht kunnen andere berichten aan het model worden verstrekt om het gesprek te verbeteren. Met de gespreksgeschiedenis kan het model op een vergelijkbare manier reageren (zoals toon of opmaak) en kan de gebruiker verwijzen naar eerdere inhoud in volgende query's. Deze geschiedenis kan op twee manieren worden opgegeven: vanuit een werkelijke chatgeschiedenis of vanuit een door de gebruiker gedefinieerd voorbeeldgesprek.
Chatinterfaces die gebruikmaken van OpenAI-modellen, zoals ChatGPT en de chatspeeltuin in Azure AI Studio, bevatten automatisch gespreksgeschiedenis die resulteert in een uitgebreider, zinvoller gesprek. In de sectie Parameters van de chatspeeltuin kunt u opgeven hoeveel eerdere berichten u wilt opnemen. Probeer dat te verminderen tot 1 of maximaal te verhogen om te zien hoe verschillende hoeveelheden geschiedenis van invloed zijn op het gesprek.
Notitie
Meer gespreksgeschiedenis in de prompt betekent dat een groter aantal invoertokens wordt gebruikt. U moet bepalen wat het juiste saldo is voor uw use-case, rekening houdend met de tokenlimiet van het model dat u gebruikt.
Chatsystemen kunnen ook gebruikmaken van de samenvattingsmogelijkheden van het model om op invoertokens op te slaan. Een app kan ervoor kiezen om eerdere berichten samen te vatten en die samenvatting op te nemen in de gespreksgeschiedenis en vervolgens alleen de exacte bewoordingen van de afgelopen paar berichten aan het model op te geven.
Weinig schoten leren
Het gebruik van een door de gebruiker gedefinieerd voorbeeldgesprek is wat weinig shot learning wordt genoemd, wat de modelvoorbeelden biedt van hoe het moet reageren op een bepaalde query. Deze voorbeelden dienen om het model te trainen hoe ze moeten reageren.
Als u bijvoorbeeld het model een paar prompts en het verwachte antwoord opgeeft, wordt het in hetzelfde patroon voortgezet zonder het te instrueren wat u moet doen:
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:
Als het model wordt geleverd met alleen You can't miss this
geen extra context van weinig shot learning, is het antwoord waarschijnlijk niet nuttig.
In praktische termen worden gespreksgeschiedenis en weinig shot learning op dezelfde manier naar het model verzonden; elk antwoord van gebruikersberichten en assistenten is een discreet bericht in het berichtobject. Het ChatCompletion
eindpunt is geoptimaliseerd om berichtgeschiedenis op te nemen, ongeacht of deze berichtgeschiedenis is opgegeven als weinig schermafbeeldingen of werkelijke gespreksgeschiedenis.
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"}
]
)
Een complexe taak opsplitsen
Een andere techniek voor verbeterde interactie is het verdelen van complexe prompts in meerdere query's. Hierdoor kan het model elk afzonderlijk onderdeel beter begrijpen en de algehele nauwkeurigheid verbeteren. Door uw prompts te verdelen, kunt u ook het antwoord van een vorige prompt opnemen in een toekomstige prompt en deze informatie gebruiken naast de mogelijkheden van het model om interessante antwoorden te genereren.
U kunt bijvoorbeeld het model 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?
vragen. Het resultaat is waarschijnlijk 3
, wat als Doug boven aan de zip-lijn begint onjuist is.
Een meer informatief antwoord kan afkomstig zijn van het stellen van meerdere vragen, over de retourtijd om terug te gaan naar de bovenkant van de zip-lijn en hoe u rekening moet houden met het feit dat Doug bovenaan begint. Het opsplitsen van dit probleem laat zien dat Doug de ritslijn vier keer kan berijden.
Keten van gedachte
Een handige methode om uw taak effectief op te splitsen, is door het model te vragen de keten van gedachten uit te leggen.
Het vragen van een model om te reageren met het stapsgewijze proces waarmee het antwoord is vastgesteld, is een handige manier om te begrijpen hoe het model de prompt interpreteert. Als u dit doet, kunt u zien waar het model een onjuiste logische draai heeft gemaakt en beter begrijpt hoe u de prompt wijzigt om de fout te voorkomen. Deze techniek kan bestaan uit het vragen om bronnen te citeren, zoals Bing-chat doet (dat gebruikmaakt van een GPT-4-generatiemodel) en het geven van redenering waarom het antwoord is bepaald.
De keten van gedachteprompttechniek wordt het beste gebruikt om u te helpen uw prompts te herhalen en te verbeteren om het antwoord van de hoogste kwaliteit van het model te krijgen.
Als u bijvoorbeeld het model What sport is easiest to learn but hardest to master?
vraagt, resulteert dit in een antwoord met een antwoord en een kleine uitleg van waarom. Wanneer u hierom wordt gevraagd What sport is easiest to learn but hardest to master? Give a step by step approach of your thoughts, ending in your answer
, is het antwoord echter een volledige uitleg van hoe het antwoord is aangekomen.
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.
Als u de stappen kent van de reden waarom het model wordt gebruikt om het antwoord te vormen, kunnen we vaststellen waar we de prompt moeten splitsen, meer informatie moeten verstrekken of instructies verduidelijken.