Ge kontext för att förbättra noggrannheten

Slutförd

Genom att ge kontext till AI-modellen gör den det möjligt för modellen att bättre förstå vad du ber om eller vad den bör veta för att ge det bästa svaret. Kontext kan tillhandahållas på flera sätt.

Komposition för begärandeutdata

Att ange strukturen för dina utdata kan ha stor inverkan på dina resultat. Detta kan vara något som att be modellen att citera sina källor, skriva svaret som ett e-postmeddelande, formatera svaret som en SQL-fråga, klassificera sentiment i en specifik struktur och så vidare. Till exempel:

Prompt

Write a table in markdown with 6 animals in it, with their genus and species

Response

| 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 |

Den här tekniken kan användas med anpassade format, till exempel en JSON-struktur:

Prompt

Put two fictional characters into JSON of the following format

{
  firstNameFictional: 
  jobFictional:
}

Response

Here's an example of how you can put two fictional characters into JSON format:

{
  "firstNameFictional": "Henry",
  "jobFictional": "Wizard"
},
{
  "firstNameFictional": "Frank",
  "jobFictional": "Hero"
}

Systemmeddelande

Systemmeddelandet ingår i början av en uppmaning och är utformat för att ge modellen instruktioner, perspektiv att svara från eller annan information som är användbar för att vägleda modellens svar. Det här systemmeddelandet kan innehålla ton eller personlighet, ämnen som inte ska ingå eller detaljer (t.ex. formatering) om hur du svarar.

Du kan till exempel ge den några av följande systemmeddelanden:

  • "Jag vill att du ska bete dig som en kommandoradsterminal. Svara på kommandon precis som cmd.exe skulle göra i ett unikt kodblock och inget annat."
  • "Jag vill att du ska vara översättare, från engelska till spanska. Svara inte på något jag säger eller frågar, bara översätta mellan dessa två språk och svara med den översatta texten."
  • "Agera som motiverande talare och ge fritt uppmuntrande råd om mål och utmaningar. Du bör inkludera många positiva bekräftelser och föreslagna aktiviteter för att nå användarens slutmål."

Andra exempel på systemmeddelanden är tillgängliga överst i chattfönstret i Azure AI Studio genom att välja knappen Fråga efter exempel . Prova att definiera din egen systemprompt som anger ett unikt svar och chatta med modellen för att se hur svaren skiljer sig åt.

Slutpunkten ChatCompletion aktiverar inklusive systemmeddelandet med hjälp av chattrollen 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?")
    }
};

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"
      }
    }
  ],
  ...
}
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"
      }
    }
  ],
  ...
}

Systemmeddelanden kan avsevärt ändra svaret, både i format och innehåll. Prova att definiera ett tydligt systemmeddelande för modellen som förklarar exakt vilken typ av svar du förväntar dig och vad du gör eller inte vill att den ska inkludera.

Konversationshistorik

Tillsammans med systemmeddelandet kan andra meddelanden tillhandahållas till modellen för att förbättra konversationen. Med konversationshistorik kan modellen fortsätta svara på ett liknande sätt (till exempel ton eller formatering) och tillåta att användaren refererar till tidigare innehåll i efterföljande frågor. Den här historiken kan anges på två sätt: från en faktisk chatthistorik eller från en användardefinierad exempelkonversation.

Chattgränssnitt som använder OpenAI-modeller, till exempel ChatGPT och chattlekplatsen i Azure AI Studio, innehåller automatiskt konversationshistorik som resulterar i en rikare och mer meningsfull konversation. I avsnittet Parametrar i chattlekplatsen kan du ange hur många tidigare meddelanden du vill ha med. Försök att minska det till 1 eller öka till max för att se hur olika mängder historik påverkar konversationen.

Kommentar

Mer konversationshistorik som ingår i prompten innebär att ett större antal indatatoken används. Du måste ta reda på vad som är rätt saldo för ditt användningsfall, med tanke på tokengränsen för den modell som du använder.

Chattsystem kan också använda sammanfattningsfunktionerna i modellen för att spara på indatatoken. En app kan välja att sammanfatta tidigare meddelanden och inkludera den sammanfattningen i konversationshistoriken och sedan endast tillhandahålla de senaste parmeddelandena ordagrant till modellen.

Få skottinlärning

Att använda en användardefinierad exempelkonversation är vad som kallas få skottinlärning, vilket ger modellexempel på hur den ska svara på en viss fråga. De här exemplen hjälper till att träna modellen hur den ska svara.

Genom att till exempel ge modellen några frågor och det förväntade svaret fortsätter den i samma mönster utan att instruera den vad den ska göra:

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:

Om modellen tillhandahålls med bara You can't miss this utan ytterligare kontext från få skottinlärning är svaret sannolikt inte användbart.

I praktiken skickas konversationshistorik och få skottinlärning till modellen på samma sätt; varje användarmeddelande och assistentsvar är ett diskret meddelande i meddelandeobjektet. Slutpunkten ChatCompletion är optimerad för att inkludera meddelandehistorik, oavsett om den här meddelandehistoriken tillhandahålls som få skottinlärning eller faktisk konversationshistorik.

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

Dela upp en komplex uppgift

En annan teknik för förbättrad interaktion är att dela upp komplexa frågor i flera frågor. På så sätt kan modellen bättre förstå varje enskild del och förbättra den övergripande noggrannheten. Genom att dela upp dina frågor kan du även inkludera svaret från en tidigare fråga i en framtida prompt och använda den informationen utöver modellens funktioner för att generera intressanta svar.

Du kan till exempel fråga modellen 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?. Resultatet är sannolikt 3, vilket om Doug börjar högst upp på zip-linjen är felaktigt.

Ett mer informativt svar kan komma från att ställa flera frågor, om tur och retur-tiden för att komma tillbaka till toppen av zip-linjen och hur man tar hänsyn till det faktum att Doug börjar högst upp. Att bryta ner detta problem avslöjar att Doug faktiskt kan rida zip-linjen fyra gånger.

Tankekedja

En användbar metod som hjälper dig att dela upp din uppgift effektivt är att be modellen att förklara sin tankekedja.

Att be en modell att svara med den steg för steg-process genom vilken den fastställde svaret är ett användbart sätt att förstå hur modellen tolkar prompten. På så sätt kan du se var modellen gjorde en felaktig logisk sväng och bättre förstå hur du ändrar din uppmaning för att undvika felet. Den här tekniken kan omfatta att be den att citera sina källor, som Bing-chatten gör (som använder en GPT-4-generationsmodell) och att ge anledning till varför den fastställde sitt svar.

Teknik för tankefråga används bäst för att hjälpa dig att iterera och förbättra dina frågor för att få svar av högsta kvalitet från modellen.

Att till exempel fråga modellen What sport is easiest to learn but hardest to master? resulterar i svar med ett svar och en liten förklaring av varför. Men när du uppmanas med What sport is easiest to learn but hardest to master? Give a step by step approach of your thoughts, ending in your answerär svaret en fullständig förklaring av hur det kom fram till sitt svar.

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.

Genom att känna till orsaksstegen som modellen använde för att bilda sitt svar kan vi identifiera var vi behöver dela upp uppmaningen, ange mer information eller förtydliga instruktioner.