Bereitstellen von Kontext zur Verbesserung der Genauigkeit
Bei Bereitstellung von Kontext für das KI-Modell kann das Modell besser verstehen, wonach Sie fragen, oder was es wissen sollte, um die beste Antwort zu liefern. Kontext kann auf verschiedene Arten bereitgestellt werden.
Zusammensetzung der Anforderungsausgabe
Das Angeben der Struktur Ihrer Ausgabe kann große Auswirkungen auf Ihre Ergebnisse haben. Dazu könnte gehören, dass das Modell aufgefordert wird, seine Quellen zu nennen, die Antwort als E-Mail zu verfassen, die Antwort als SQL-Abfrage zu formatieren, die Stimmung in eine bestimmte Struktur einzuordnen usw. Beispiel:
Eingabeaufforderung
Write a table in markdown with 6 animals in it, with their genus and species
Antwort
| 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 |
Dieses Verfahren kann mit benutzerdefinierten Formaten wie einer JSON-Struktur verwendet werden:
Eingabeaufforderung
Put two fictional characters into JSON of the following format
{
firstNameFictional:
jobFictional:
}
Antwort
Here's an example of how you can put two fictional characters into JSON format:
{
"firstNameFictional": "Henry",
"jobFictional": "Wizard"
},
{
"firstNameFictional": "Frank",
"jobFictional": "Hero"
}
Systemnachricht
Die Systemmeldung ist am Anfang einer Eingabeaufforderung enthalten und dient dazu, dem Modell Anweisungen, eine Antwortperspektive oder andere Informationen zu geben, die hilfreich sind, um die Antwort des Modells zu steuern. Diese Systemmeldung kann Informationen zur Art und Weise der Antwort wie Ton oder Persönlichkeit, Themen, die nicht eingeschlossen werden sollten, oder Besonderheiten (z. B. Formatierung) enthalten.
Sie könnten beispielsweise einige der folgenden Systemmeldungen angeben:
- „Ich möchte, dass du dich wie ein Befehlszeilenterminal verhältst. Auf Befehle genau wie cmd.exe reagieren, in einem eindeutigen Codeblock und sonst nichts.“
- „Ich möchte, dass du ein Übersetzer vom Englischen ins Spanische bist. Antworte nicht auf etwas, was ich sage oder frage, übersetze nur zwischen diesen beiden Sprachen, und antworte mit dem übersetzten Text.“
- „Agiere als Motivationsredner und formuliere frei ermutigende Ratschläge zu Zielen und Herausforderungen. Du solltest viele positive Bestätigungen und Vorschläge für Aktivitäten einschließen, damit die Benutzer*innen ihre Ziele erreichen.“
Andere Beispielsystemnachrichten sind oben im Chatfenster in Azure KI Studio verfügbar, indem Sie die Schaltfläche Beispieleingabeaufforderungen auswählen. Versuchen Sie, Ihre eigene Systemeingabeaufforderung zu definieren, die eine eindeutige Antwort angibt, und chatten Sie mit dem Modell, um zu sehen, wie sich die Antworten unterscheiden.
Der ChatCompletion
-Endpunkt aktiviert das Einschließen der Systemmeldung mithilfe der System
-Chatrolle.
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?")
}
};
Antwort
{
"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?"}
]
)
Antwort
{
"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"
}
}
],
...
}
Systemmeldungen können die Antwort sowohl bezüglich Format als auch Inhalt erheblich ändern. Versuchen Sie, eine klare Systemmeldung für das Modell zu definieren, die genau erläutert, welche Art von Antwort Sie erwarten, und was sie enthalten soll oder nicht.
Aufgezeichnete Unterhaltungen
Zusammen mit der Systemmeldung können andere Nachrichten für das Modell bereitgestellt werden, um die Unterhaltung zu verbessern. Der Unterhaltungsverlauf ermöglicht dem Modell, weiterhin auf ähnliche Weise (z. B. in Ton oder Formatierung) zu antworten, und Benutzer*innen können in nachfolgenden Abfragen vorherige Inhalte referenzieren. Dieser Verlauf kann auf zwei Arten bereitgestellt werden: aus einem tatsächlichen Chatverlauf oder einer benutzerdefinierten Beispielunterhaltung.
Chatschnittstellen, die OpenAI-Modelle verwenden, z. B. ChatGPT und der Chatplayground in Azure KI Studio, schließen den Konversationsverlauf automatisch ein, was zu einer umfassenderen, aussagekräftigeren Unterhaltung führt. Im Abschnitt Parameter des Chat-Playgrounds können Sie angeben, wie viele vergangene Nachrichten einbezogen werden sollen. Versuchen Sie, dies auf 1 zu reduzieren oder auf das Maximum zu erhöhen, um zu sehen, wie sich verschiedene Verlaufsumfänge auf die Unterhaltung auswirken.
Hinweis
Wenn ein umfangreicherer Unterhaltungsverlauf in der Eingabeaufforderung enthalten ist, bedeutet das, dass die Anzahl der verwendeten Eingabetoken größer ist. Sie müssen unter Berücksichtigung des Tokenlimits des Modells, das Sie verwenden, die richtige Balance für Ihren Anwendungsfall bestimmen.
Chatsysteme können auch die Zusammenfassungsfunktionen des Modells nutzen, um Eingabetoken zu speichern. Eine App kann vergangene Nachrichten zusammenfassen und diese Zusammenfassung in den Unterhaltungsverlauf aufnehmen, um dann nur die letzten paar Nachrichten wörtlich für das Modell bereitzustellen.
Few-Shot-Learning
Die Verwendung einer benutzerdefinierten Beispielunterhaltung wird als Few-Shot-Learning bezeichnet, das dem Modell Beispiele dafür liefert, wie es auf eine bestimmte Abfrage antworten sollte. Mit diesen Beispielen wird das Antworten des Modells trainiert.
Wenn Sie dem Modell z. B. ein paar Eingabeaufforderungen und die erwartete Antwort bereitstellen, fährt es ohne Anweisung, was zu tun ist, im gleichen Muster fort:
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:
Wenn dem Modell nur You can't miss this
ohne zusätzlichen Kontext aus Few-Shot-Learning bereitgestellt wird, ist die Antwort wahrscheinlich nicht sinnvoll.
Praktisch werden Unterhaltungsverlauf und Few-Shot-Learning auf gleiche Weise an das Modell gesendet. Jede Benutzernachricht und Assistentenantwort ist eine separate Nachricht im Nachrichtenobjekt. Der ChatCompletion
-Endpunkt ist so optimiert, dass er den Nachrichtenverlauf einschließt, unabhängig davon, ob dieser Nachrichtenverlauf als Few-Shot-Learning oder tatsächlicher Unterhaltungsverlauf bereitgestellt wird.
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"}
]
)
Aufschlüsseln einer komplexen Aufgabe
Die Unterteilung komplexer Eingabeaufforderungen in mehrere Abfragen ist eine weitere Technik für eine verbesserte Interaktion. Dadurch kann das Modell die einzelnen Teile besser verstehen und die Gesamtgenauigkeit verbessern. Wenn Sie Ihre Eingabeaufforderungen teilen, können Sie auch die Antwort einer vorherigen Eingabeaufforderung in eine zukünftige Eingabeaufforderung einschließen und diese Informationen zusätzlich zu den Funktionen des Modells verwenden, um interessante Antworten zu generieren.
Sie können dem Modell z. B. diese Frage stellen: 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?
. Das Ergebnis ist wahrscheinlich 3
, was falsch ist, wenn „Doug“ am oberen Rand der „zip line“ beginnt.
Eine informativere Antwort könnte daraus resultieren, mehrere Fragen zu stellen, über die Umlaufzeit, um wieder an die Spitze der „zip line“ zu gelangen, und wie die Tatsache berücksichtigt werden muss, dass „Doug“ oben beginnt. Das Aufschlüsseln dieses Problems zeigt, dass Doug tatsächlich vier Mal über die „zip line“ rutschen kann.
Gedankenkette
Eine nützliche Methode, mit der Sie Ihre Aufgabe effektiv aufschlüsseln können, besteht darin, das Modell aufzufordern, seine Gedankenkette zu erläutern.
Ein Modell zu bitten, mit dem Schritt-für-Schritt-Prozess zu antworten, mit dem es die Antwort ermittelt hat, ist eine hilfreiche Möglichkeit, zu verstehen, wie das Modell die Eingabeaufforderung interpretiert. So sehen Sie, wo das Modell eine falsche logische Wendung gemacht hat, und verstehen besser, wie Sie Ihre Eingabeaufforderung ändern können, um den Fehler zu vermeiden. Dieses Verfahren kann die Aufforderung beinhalten, seine Quellen zu zitieren, wie es der Bing-Chat tut (der ein GPT-4-Generierungsmodell verwendet), und Gründe dafür anzugeben, warum es sich für eine Antwort entschieden hat.
Das Eingabeaufforderungsverfahren mit der Gedankenkette verwenden Sie am besten, um die Eingabeaufforderungen zu wiederholen und zu verbessern, damit das Modell die bestmögliche Antwort liefert.
Wenn Sie das Modell z. B. fragen: What sport is easiest to learn but hardest to master?
, erhalten Sie eine Antwort und eine kurze Begründung der Antwort. Wenn die Eingabeaufforderung jedoch What sport is easiest to learn but hardest to master? Give a step by step approach of your thoughts, ending in your answer
lautet, erhalten Sie eine vollständige Erklärung des Weges, wie die Antwort entstanden ist.
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.
Wenn wir die Denkschritte kennen, die das Modell zur Bildung seiner Antwort verwendet hat, können wir feststellen, wo wir die Eingabeaufforderung aufteilen, mehr Informationen bereitstellen oder Anweisungen präzisieren müssen.