Zapewnianie kontekstu w celu zwiększenia dokładności

Ukończone

Udostępniając kontekst modelowi sztucznej inteligencji, umożliwia modelowi lepsze zrozumienie, o co prosisz lub o co należy wiedzieć, aby zapewnić najlepszą odpowiedź. Kontekst można udostępnić na kilka sposobów.

Kompozycja danych wyjściowych żądania

Określenie struktury danych wyjściowych może mieć duży wpływ na wyniki. Może to obejmować coś takiego, jak prośba modelu o przytaczanie ich źródeł, napisanie odpowiedzi jako wiadomości e-mail, sformatowanie odpowiedzi jako zapytania SQL, sklasyfikowanie tonacji w określonej strukturze itd. Na przykład:

Monit

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 |

Ta technika może być używana z formatami niestandardowymi, takimi jak struktura JSON:

Monit

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

Komunikat systemowy

Komunikat systemowy jest dołączany na początku monitu i jest przeznaczony do udzielania instrukcji dotyczących modelu, perspektywy odpowiedzi lub innych informacji pomocnych w prowadzeniu odpowiedzi modelu. Ten komunikat systemowy może zawierać ton lub osobowość, tematy, które nie powinny być uwzględnione, lub szczegółowe informacje (takie jak formatowanie) sposobu odpowiadania.

Można na przykład nadać mu niektóre z następujących komunikatów systemowych:

  • "Chcę, abyś działał jak terminal wiersza polecenia. Odpowiadanie na polecenia dokładnie tak, jak cmd.exe, w jednym unikatowym bloku kodu i nic innego.
  • "Chcę, aby być tłumaczem, od angielskiego do hiszpańskiego. Nie odpowiadaj na coś, co mówię lub pytam, tłumacz tylko między tymi dwoma językami i odpowiadaj przetłumaczonym tekstem.
  • "Działać jako mówca motywacyjny, swobodnie rozdając zachęcające porady na temat celów i wyzwań. Należy uwzględnić wiele pozytywnych afirmacji i sugerowane działania w celu osiągnięcia celu końcowego użytkownika.

Inne przykładowe komunikaty systemowe są dostępne w górnej części okna czatu w usłudze Azure AI Studio , wybierając przycisk Monituj przykłady . Spróbuj zdefiniować własny monit systemowy, który określa unikatową odpowiedź, i porozmawiaj z modelem, aby zobaczyć, jak różnią się odpowiedzi.

Punkt ChatCompletion końcowy umożliwia dołączenie komunikatu systemowego przy użyciu roli czatu 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"
      }
    }
  ],
  ...
}

Komunikaty systemowe mogą znacząco zmienić odpowiedź zarówno w formacie, jak i w zawartości. Spróbuj zdefiniować jasny komunikat systemowy dla modelu, który wyjaśnia dokładnie, jakiego rodzaju odpowiedzi oczekujesz, i co robisz lub nie chcesz, aby zawierał.

Historia konwersacji

Wraz z komunikatem systemowym inne komunikaty mogą być udostępniane modelowi w celu ulepszenia konwersacji. Historia konwersacji umożliwia modelowi dalsze odpowiadanie w podobny sposób (na przykład ton lub formatowanie) i umożliwia użytkownikowi odwołowanie się do poprzedniej zawartości w kolejnych zapytaniach. Tę historię można udostępnić na dwa sposoby: na podstawie rzeczywistej historii czatu lub z przykładowej konwersacji zdefiniowanej przez użytkownika.

Interfejsy czatów korzystające z modeli OpenAI, takich jak ChatGPT i plac zabaw czatu w usłudze Azure AI Studio, zawierają historię konwersacji automatycznie, co powoduje bogatszą, bardziej znaczącą konwersację. W sekcji Parametry placu zabaw dla czatów możesz określić liczbę wcześniejszych wiadomości, które mają zostać dołączone. Spróbuj zmniejszyć tę liczbę do 1 lub maksymalnie, aby zobaczyć, jak różne ilości historii wpływają na konwersację.

Uwaga

Więcej historii konwersacji zawartych w wierszu polecenia oznacza, że jest używana większa liczba tokenów wejściowych. Musisz określić, jaka jest prawidłowa równowaga dla twojego przypadku użycia, biorąc pod uwagę limit tokenu używanego modelu.

Systemy czatów mogą również korzystać z możliwości podsumowania modelu w celu zaoszczędzenia na tokenach wejściowych. Aplikacja może wybrać podsumowywanie przeszłych wiadomości i dołączenie tego podsumowania w historii konwersacji, a następnie podać tylko poprzednie komunikaty par dosłowne do modelu.

Niewiele uczenia strzałów

Użycie przykładowej konwersacji zdefiniowanej przez użytkownika jest nazywane uczeniem kilku strzałów, który udostępnia przykłady modelu, w jaki sposób powinien odpowiadać na dane zapytanie. Te przykłady służą do trenowania modelu sposobu reagowania.

Na przykład, podając modelowi kilka monitów i oczekiwanej odpowiedzi, kontynuuje w tym samym wzorcu bez poinstruowania, co należy zrobić:

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:

Jeśli model jest dostarczany tylko You can't miss this bez dodatkowego kontekstu z kilku uczenia strzałów, odpowiedź prawdopodobnie nie będzie przydatna.

W praktyce historia konwersacji i kilka uczenia strzałów są wysyłane do modelu w taki sam sposób; każda odpowiedź komunikatu użytkownika i asystenta jest dyskretnym komunikatem w obiekcie komunikatu. Punkt ChatCompletion końcowy jest zoptymalizowany pod kątem uwzględnienia historii komunikatów, niezależnie od tego, czy ta historia komunikatów jest udostępniana jako niewiele nauki lub rzeczywistej historii konwersacji.

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

Podział złożonego zadania

Inną techniką ulepszonej interakcji jest podzielenie złożonych monitów na wiele zapytań. Dzięki temu model może lepiej zrozumieć poszczególne elementy i poprawić ogólną dokładność. Podzielenie monitów umożliwia również uwzględnienie odpowiedzi z poprzedniego monitu w przyszłym wierszu polecenia oraz użycie tych informacji oprócz możliwości modelu w celu wygenerowania interesujących odpowiedzi.

Możesz na przykład zapytać 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?. Wynik jest prawdopodobny 3, co jeśli Doug rozpoczyna się w górnej części linii zip jest niepoprawne.

Bardziej informacyjna odpowiedź może pochodzić z zadawania mu wielu pytań, o czasie podróży okrężnej, aby wrócić do góry linii zip i jak uwzględnić fakt, że Doug zaczyna się na górze. Rozbicie tego problemu ujawnia, że Doug może, w rzeczywistości, jeździć zip linii cztery razy.

Łańcuch myśli

Jedną z przydatnych metod ułatwiania efektywnego podziału zadania jest zwrócenie się do modelu o wyjaśnienie łańcucha myśli.

Prośba o odpowiedź modelu za pomocą procesu krok po kroku, w którym ustalono, że odpowiedź jest pomocnym sposobem zrozumienia, w jaki sposób model interpretuje monit. Dzięki temu możesz zobaczyć, gdzie model dokonał nieprawidłowego zwrotu logicznego i lepiej zrozumieć, jak zmienić monit, aby uniknąć błędu. Ta technika może obejmować prośbę o przytaczanie swoich źródeł, takich jak czat Bing (który używa modelu generacji GPT-4) i uzasadnienie, dlaczego określiła swoją odpowiedź.

Łańcuch technik monitowania myśli najlepiej używać do iterowania i ulepszania monitów o uzyskanie najwyższej jakości odpowiedzi z modelu.

Na przykład pytanie modelu What sport is easiest to learn but hardest to master? powoduje odpowiedź i niewielkie wyjaśnienie przyczyny. Jednak po wyświetleniu monitu z What sport is easiest to learn but hardest to master? Give a step by step approach of your thoughts, ending in your answerpoleceniem odpowiedź jest kompletnym wyjaśnieniem sposobu, w jaki dotarła do odpowiedzi.

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.

Znajomość kroków przyczyn, dla których model użył do utworzenia odpowiedzi, pozwala nam określić, gdzie musimy podzielić monit, podać więcej informacji lub wyjaśnić instrukcje.