Merge pull request #346 from behrends/chapter_improvement

chapter improvement (German translation)
This commit is contained in:
Elvis Saravia 2024-01-13 08:01:35 -06:00 committed by GitHub
commit 98a6637545
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 49 additions and 21 deletions

View File

@ -1,8 +1,11 @@
# Grundlagen des Promptings
## Grundlegende Prompts
import {Screenshot} from 'components/screenshot'
import INTRO1 from '../../img/introduction/sky.png'
Mit einfachen Prompts können Sie viel erreichen, aber die Qualität der Ergebnisse hängt davon ab, wie viele Informationen Sie bereitstellen und wie gut diese formuliert sind. Ein Prompt kann Informationen wie die *Anweisung* oder *Frage* enthalten, die Sie an das Modell weitergeben, und weitere Details wie *Kontext*, *Eingaben* oder *Beispiele* umfassen. Sie können diese Elemente nutzen, um das Modell besser zu instruieren und als Ergebnis bessere Resultate zu erzielen.
## Prompts an ein LLM stellen
Mit einfachen Prompts können Sie viel erreichen, aber die Qualität der Ergebnisse hängt davon ab, wie viele Informationen Sie bereitstellen und wie gut der Prompt formuliert ist. Ein Prompt kann Informationen wie die *Anweisung* oder *Frage* enthalten, die Sie an das Modell weitergeben, und weitere Details wie *Kontext*, *Eingaben* oder *Beispiele* umfassen. Sie können diese Elemente nutzen, um das Modell effektiver zu instruieren und somit die Qualität der Ergebnisse zu erhöhen.
Beginnen wir mit einem grundlegenden Beispiel für einen einfachen Prompt:
@ -14,14 +17,16 @@ Der Himmel ist
*Ausgabe:*
```md
blau
Der Himmel ist blau an einem klaren Tag. An einem bewölktem Tag kann der Himmel grau oder weiß sein.
blau.
```
Wie Sie sehen können, produziert das Sprachmodell eine Fortsetzung der Zeichenkette, die angesichts des Kontextes `"Der Himmel ist"` Sinn macht. Die Ausgabe kann unerwartet oder weit entfernt von der Aufgabe sein, die Sie erreichen wollen.
Wenn Sie den OpenAI Playground oder einen anderen Playground verwenden, dann können Sie dem Modell einen Prompt stellen, wie im folgenden Screenshot zu sehen:
Dieses grundlegende Beispiel unterstreicht auch die Notwendigkeit, mehr Kontext oder Anweisungen darüber zu geben, was genau Sie erreichen möchten.
<Screenshot src={INTRO1} alt="INTRO1" />
Zu beachten ist, dass man bei der Verwendung der OpenAI-Chatmodelle wie `gtp-3.5-turbo` oder `gpt-4` die Struktur des Prompts mit drei verschiedenen Rollen gestalten kann: `system`, `user` und `assistant`. Eine Eingabe mit `system` ist nicht erforderlich, hilft aber, das Gesamtverhalten des Assistenten festzulegen. Das obige Beispiel beinhaltet nur eine Nutzernachricht, mit der man das Modell direkt auffordern kann. Zur Vereinfachung wird in allen Beispielen, außer es ist ausdrücklich erwähnt, nur die `user`-Nachricht verwendet, um das `gtp-3.5-turbo` Modell zu prompten. Die `assistant`-Nachricht im obigen Beispiel entspricht der Modellantwort. Man kann auch eine Assistentennachricht definieren, um Beispiele für das gewünschte Verhalten zu übermitteln, das man erreichen möchte. Mehr über das Arbeiten mit Chatmodellen kann man [hier](https://www.promptingguide.ai/models/chatgpt) erfahren.
Man kann aus dem obigen Beispielprompt erkennen, dass das Sprachmodell mit einer Sequenz von Token antwortet, die im Kontext `"Der Himmel ist"` Sinn ergeben. Die Ausgabe könnte unerwartet oder weit von der Aufgabe entfernt sein, die man erreichen möchte. Tatsächlich hebt dieses einfache Beispiel die Notwendigkeit hervor, mehr Kontext oder Anweisungen darüber zu geben, was man speziell mit dem System erreichen möchte. Darum geht es beim Prompt-Engineering.
Versuchen wir es ein wenig zu verbessern:
@ -35,10 +40,10 @@ Der Himmel ist
*Ausgabe:*
```
heute so schön.
blau am Tag und dunkel in der Nacht.
```
Ist das besser? Nun, Sie haben das Modell angewiesen, den Satz zu vervollständigen, also sieht das Ergebnis viel besser aus, da es genau dem folgt, was Sie ihm gesagt haben ("Vervollständige diesen Satz"). Dieser Ansatz, optimale Prompts zu gestalten, um das Modell zur Ausführung einer Aufgabe zu instruieren, wird als **Prompt Engineering** bezeichnet.
Ist das besser? Nun, mit dem oben genannten Prompt weisen Sie das Modell an, den Satz zu vervollständigen, sodass das Ergebnis viel besser aussieht, da es genau dem folgt, was Sie ihm gesagt haben ("vervollständigen Sie den Satz"). Dieser Ansatz, effektive Prompts zu entwerfen, um das Modell anzuweisen, eine gewünschte Aufgabe auszuführen, wird in diesem Leitfaden als **Prompt-Engineering** bezeichnet.
Das oben gezeigte Beispiel ist eine grundlegende Veranschaulichung dessen, was heute mit LLMs möglich ist. Die heutigen LLMs sind in der Lage, alle Arten von fortgeschrittenen Aufgaben zu erfüllen, von der Textzusammenfassung über mathematische Argumentation bis hin zur Codegenerierung.
@ -63,7 +68,21 @@ Q: <Frage>?
A:
```
Wenn man so promptet, wie oben, wird es auch als *Zero-Shot Prompting* bezeichnet, d.h., Sie fordern das Modell direkt ohne jegliche Beispiele oder Demonstrationen für die Aufgabe auf, eine Antwort zu geben. Einige große Sprachmodelle haben die Fähigkeit, Zero-Shot Prompting durchzuführen, aber das hängt von der Komplexität und dem Wissen über die jeweilige Aufgabe ab.
Wenn man wie oben vorgeht, spricht man auch von *Zero-Shot-Prompting*, d.h., man fordert das Modell direkt zu einer Antwort auf, ohne Beispiele oder Demonstrationen über die Aufgabe zu geben, die es erfüllen soll. Einige große Sprachmodelle haben die Fähigkeit zum Zero-Shot-Prompting, aber das hängt von der Komplexität und dem Wissen über die jeweilige Aufgabe sowie den Aufgaben ab, für die das Modell gut trainiert wurde.
Ein konkretes Prompt-Beispiel ist wie folgt:
*Prompt*
```
Q: Was ist Prompt-Engineering?
```
Bei einigen der neueren Modelle kann man den Teil "Q:" weglassen, da es vom Modell aufgrund der Zusammensetzung der Sequenz als Fragebeantwortungsaufgabe impliziert und verstanden wird. Mit anderen Worten, der Prompt könnte wie folgt vereinfacht werden:
*Prompt*
```
Was ist Prompt-Engineering?
```
Angesichts des obigen Standardformats ist eine beliebte und effektive Technik beim Prompting als *Few-Shot Prompting* bekannt, bei der Sie Beispiele (d.h. Demonstrationen) bereitstellen. Sie können Few-Shot Prompts wie folgt formatieren:
@ -112,4 +131,4 @@ Was für eine fürchterliche Vorstellung! //
Negativ
```
Few-Shot Prompts ermöglichen das in-context learning, also die Fähigkeit von Sprachmodellen, Aufgaben anhand einiger Demonstrationen zu erlernen.
Few-Shot Prompts ermöglichen das in-context learning, also die Fähigkeit von Sprachmodellen, Aufgaben anhand einiger Demonstrationen zu erlernen. Wir diskutieren das Zero-Shot-Prompting und das Few-Shot-Prompting ausführlicher in den kommenden Abschnitten.

View File

@ -12,4 +12,15 @@ Ein Prompt enthält eines oder mehrere der folgenden Elemente:
**Ausgabeindikator** - die Art oder das Format der Ausgabe.
Um die Elemente eines Prompts besser zu demonstrieren, hier ein einfaches Beispiel, das darauf abzielt, eine Textklassifizierungsaufgabe durchzuführen:
*Prompt*
```
Klassifizieren Sie den Text in neutral, negativ oder positiv
Text: Ich denke, das Essen war okay.
Stimmung:
```
Im obigen Beispielprompt entspricht die Anweisung der Klassifizierungsaufgabe, "Klassifizieren Sie den Text in neutral, negativ oder positiv". Die Eingabedaten entsprechen dem Teil "Ich denke, das Essen war okay." und der verwendete Ausgabeindikator ist "Stimmung:". Beachten Sie, dass dieses grundlegende Beispiel keinen Kontext verwendet, aber dieser kann auch als Teil des Prompts bereitgestellt werden. Beispielsweise kann der Kontext für dieses Textklassifizierungsprompt zusätzliche Beispiele sein, die als Teil des Prompts bereitgestellt werden, um dem Modell zu helfen, die Aufgabe besser zu verstehen und die Art der Ausgaben zu steuern, die Sie erwarten.
Sie benötigen nicht alle vier Elemente für einen Prompt und das Format hängt von der jeweiligen Aufgabe ab. Wir werden in kommenden Anleitungen auf konkretere Beispiele eingehen.

View File

@ -2,20 +2,18 @@
Beim Entwerfen und Testen von Prompts interagieren Sie normalerweise über eine API mit dem LLM. Sie können einige Parameter konfigurieren, um unterschiedliche Ergebnisse für Ihre Prompts zu erhalten. Das Anpassen dieser Einstellungen ist wichtig, um die Zuverlässigkeit und Erwünschtheit der Antworten zu verbessern, und es bedarf des Experimentierens, um die richtigen Einstellungen für Ihre Anwendungsfälle herauszufinden. Unten finden Sie die gängigen Einstellungen, auf die Sie bei der Verwendung verschiedener LLM-Anbieter stoßen werden:
**Temperature** - Kurz gesagt, je niedriger die `temperature`, desto deterministischer sind die Ergebnisse in dem Sinne, dass immer das wahrscheinlichste nächste Token gewählt wird. Eine Erhöhung der Temperatur kann zu mehr Zufälligkeit führen und damit vielfältigere oder kreativere Ausgaben fördern. Sie erhöhen im Grunde das Gewicht der anderen möglichen Tokens. Im Hinblick auf die Anwendung möchten Sie vielleicht einen niedrigeren Temperaturwert für Aufgaben wie faktenbasierte QA verwenden, um präzisere und knappere Antworten zu fördern. Für die Generierung von Gedichten oder andere kreative Aufgaben könnte es vorteilhaft sein, den Temperaturwert zu erhöhen.
**Temperatur** - Kurz gesagt, je niedriger die `temperature`, desto deterministischer sind die Ergebnisse in dem Sinne, dass immer das wahrscheinlichste nächste Token gewählt wird. Eine Erhöhung der Temperatur kann zu mehr Zufälligkeit führen und damit vielfältigere oder kreativere Ausgaben fördern. Sie erhöhen im Grunde das Gewicht der anderen möglichen Tokens. Im Hinblick auf die Anwendung möchten Sie vielleicht einen niedrigeren Temperaturwert für Aufgaben wie faktenbasierte QA verwenden, um präzisere und knappere Antworten zu fördern. Für die Generierung von Gedichten oder andere kreative Aufgaben könnte es vorteilhaft sein, den Temperaturwert zu erhöhen.
**Top_p** - Ähnlich ist es mit `top_p`, eine Stichprobentechnik mit Temperatur namens _nucleus sampling_. Hiermit können Sie steuern, wie deterministisch das Modell bei der Generierung einer Antwort ist. Wenn Sie nach exakten und faktischen Antworten suchen, halten Sie diesen Wert niedrig. Wenn Sie nach vielfältigeren Antworten suchen, erhöhen Sie ihn auf einen höheren Wert.
**Top P** - Eine Stichprobentechnik mit Temperatur, bekannt als Nucleus Sampling, bei der Sie steuern können, wie deterministisch das Modell ist. Wenn Sie nach exakten und faktischen Antworten suchen, halten Sie diesen Wert niedrig. Wenn Sie nach vielfältigeren Antworten suchen, erhöhen Sie ihn auf einen höheren Wert. Wenn Sie Top P verwenden, bedeutet das, dass nur die Token berücksichtigt werden, die die `top_p` Wahrscheinlichkeitsmasse bilden, sodass ein niedriger `top_p` Wert die selbstsichersten Antworten auswählt. Dies bedeutet, dass ein hoher `top_p` Wert es dem Modell ermöglicht, mehr mögliche Wörter zu betrachten, einschließlich unwahrscheinlicher, was zu vielfältigeren Ausgaben führt. Die allgemeine Empfehlung ist, entweder die Temperatur oder Top P zu ändern, aber nicht beides.
Die allgemeine Empfehlung lautet, entweder die Temperatur oder `top_p` zu verändern, nicht beides.
**Maximale Länge (`max length`)** - Sie können die Anzahl der vom Modell generierten Tokens steuern, indem Sie `max length` anpassen. Wenn Sie eine maximale Länge angeben, helfen Sie dabei, lange oder irrelevante Antworten zu verhindern und die Kosten zu kontrollieren.
**Maximale Länge** - Sie können die Anzahl der vom Modell generierten Tokens steuern, indem Sie die 'maximale Länge' anpassen. Wenn Sie eine maximale Länge angeben, helfen Sie dabei, lange oder irrelevante Antworten zu verhindern und die Kosten zu kontrollieren.
**Stop-Sequenzen (`stop sequence`)** - Eine `stop sequence` ist eine Zeichenfolge, die das Modell daran hindert, weitere Tokens zu generieren. Die Angabe von Stop-Sequenzen ist eine weitere Möglichkeit, die Länge und Struktur der Antwort des Modells zu kontrollieren. Sie können zum Beispiel dem Modell sagen, dass es Listen generieren soll, die nicht mehr als 10 Elemente haben, indem Sie "11" als Stop-Sequenz hinzufügen.
**Stop-Sequenzen** - Eine 'Stop-Sequenz' ist eine Zeichenfolge, die das Modell daran hindert, weitere Tokens zu generieren. Die Angabe von Stop-Sequenzen ist eine weitere Möglichkeit, die Länge und Struktur der Antwort des Modells zu kontrollieren. Sie können zum Beispiel dem Modell sagen, dass es Listen generieren soll, die nicht mehr als 10 Elemente haben, indem Sie "11" als Stop-Sequenz hinzufügen.
**Frequenzstrage (`frequence penalty`)** - Die `frequency penalty` wendet eine Strafe auf das nächste Token an, die proportional dazu ist, wie oft dieses Token bereits in der Antwort und im Prompt aufgetaucht ist. Je höher die Häufigkeitsstrafe, desto unwahrscheinlicher wird ein Wort erneut erscheinen. Diese Einstellung reduziert die Wiederholung von Wörtern in der Antwort des Modells, indem Tokens, die häufiger vorkommen, eine höhere Strafe bekommen.
**Häufigkeitsstrafe** - Die 'Häufigkeitsstrafe' wendet eine Strafe auf das nächste Token an, die proportional dazu ist, wie oft dieses Token bereits in der Antwort und im Prompt aufgetaucht ist. Je höher die Häufigkeitsstrafe, desto unwahrscheinlicher wird ein Wort erneut erscheinen. Diese Einstellung reduziert die Wiederholung von Wörtern in der Antwort des Modells, indem Tokens, die häufiger vorkommen, eine höhere Strafe bekommen.
**Anwesenheitsstrafe (`presence penalty`)** - Die `presence penalty` wendet ebenfalls eine Strafe auf wiederholte Token an, aber im Gegensatz zur Frequenzstrafe ist die Strafe für alle wiederholten Token gleich. Ein Token, das zweimal und ein Token, das 10 Mal erscheint, werden gleich bestraft. Diese Einstellung verhindert, dass das Modell Phrasen zu oft in seiner Antwort wiederholt. Wenn Sie möchten, dass das Modell vielfältigen oder kreativen Text generiert, möchten Sie vielleicht eine höhere Anwesenheitsstrafe verwenden. Oder, wenn Sie benötigen, dass das Modell fokussiert bleibt, versuchen Sie, eine niedrigere Anwesenheitsstrafe zu verwenden.
**Präsenzstrafe** - Die 'Präsenzstrafe' wendet auch eine Strafe auf wiederholte Tokens an, aber anders als bei der Häufigkeitsstrafe ist die Strafe für alle wiederholten Tokens gleich. Ein Token, das zweimal erscheint, und ein Token, das zehnmal erscheint, werden gleich bestraft. Diese Einstellung verhindert, dass das Modell Phrasen zu oft in seiner Antwort wiederholt. Wenn Sie möchten, dass das Modell vielfältigen oder kreativen Text generiert, möchten Sie vielleicht eine höhere Präsenzstrafe verwenden. Oder, wenn Sie möchten, dass das Modell fokussiert bleibt, versuchen Sie es mit einer niedrigeren Präsenzstrafe.
Ähnlich wie bei Temperatur und top_p lautet die allgemeine Empfehlung, entweder die Häufigkeitsstrafe oder die Präsenzstrafe zu verändern, nicht beides.
Ähnlich wie bei `temperature` und `top_p` lautet die allgemeine Empfehlung, entweder die Häufigkeitsstrafe oder die Präsenzstrafe zu verändern, nicht beides.
Bevor Sie mit einigen grundlegenden Beispielen beginnen, behalten Sie im Hinterkopf, dass Ihre Ergebnisse je nach Version des LLM, das Sie verwenden, variieren können.