Dieses Modul behandelt grundlegende Konzepte und Techniken zur Erstellung effektiver Prompts für generative KI-Modelle. Die Art und Weise, wie Sie Ihren Prompt an ein LLM schreiben, ist entscheidend. Ein sorgfältig gestalteter Prompt kann die Qualität der Antwort erheblich verbessern. Aber was genau bedeuten Begriffe wie Prompt und Prompt Engineering? Und wie kann ich den Input des Prompts, den ich an das LLM sende, verbessern? Diese Fragen werden wir in diesem Kapitel und im nächsten zu beantworten versuchen.
Generative KI ist in der Lage, neue Inhalte (z. B. Text, Bilder, Audio, Code usw.) als Antwort auf Benutzeranfragen zu erstellen. Dies wird durch Large Language Models wie die GPT-Serie ("Generative Pre-trained Transformer") von OpenAI erreicht, die für die Verwendung von natürlicher Sprache und Code trainiert wurden.
Benutzer können jetzt mit diesen Modellen über vertraute Paradigmen wie Chat interagieren, ohne technische Expertise oder Schulung zu benötigen. Die Modelle sind Prompt-basiert - Benutzer senden einen Texteingang (Prompt) und erhalten eine Antwort der KI (Completion). Sie können dann in mehrstufigen Gesprächen iterativ mit der KI "chatten" und ihren Prompt verfeinern, bis die Antwort ihren Erwartungen entspricht.
"Prompts" werden somit zur primären Programmierschnittstelle für generative KI-Anwendungen, die den Modellen mitteilen, was zu tun ist, und die Qualität der zurückgegebenen Antworten beeinflussen. "Prompt Engineering" ist ein schnell wachsendes Forschungsfeld, das sich auf die Gestaltung und Optimierung von Prompts konzentriert, um konsistente und qualitativ hochwertige Antworten in großem Maßstab zu liefern.
In dieser Lektion lernen wir, was Prompt Engineering ist, warum es wichtig ist und wie wir effektivere Prompts für ein bestimmtes Modell und ein bestimmtes Anwendungsziel erstellen können. Wir werden die grundlegenden Konzepte und bewährten Praktiken des Prompt Engineering verstehen und eine interaktive Jupyter-Notebook-Umgebung kennenlernen, in der wir diese Konzepte anhand von realen Beispielen anwenden können.
Am Ende dieser Lektion werden wir in der Lage sein:
- Zu erklären, was Prompt Engineering ist und warum es wichtig ist.
- Die Bestandteile eines Prompts zu beschreiben und deren Verwendung zu verstehen.
- Bewährte Praktiken und Techniken des Prompt Engineering zu erlernen.
- Gelernte Techniken anhand von realen Beispielen mit einem OpenAI-Endpunkt anzuwenden.
Prompt Engineering: Die Praxis, Eingaben zu gestalten und zu verfeinern, um KI-Modelle dazu zu bringen, gewünschte Ergebnisse zu liefern.
Tokenisierung: Der Prozess der Umwandlung von Text in kleinere Einheiten, sogenannte Tokens, die ein Modell verstehen und verarbeiten kann.
Instruction-Tuned LLMs: Große Sprachmodelle (LLMs), die mit spezifischen Anweisungen feinabgestimmt wurden, um die Genauigkeit und Relevanz ihrer Antworten zu verbessern.
Prompt Engineering ist derzeit mehr Kunst als Wissenschaft. Der beste Weg, unser Gespür dafür zu verbessern, ist mehr zu üben und einen Trial-and-Error-Ansatz zu verfolgen, der Fachwissen aus dem Anwendungsbereich mit empfohlenen Techniken und modell-spezifischen Optimierungen kombiniert.
Das Jupyter Notebook, das diese Lektion begleitet, bietet eine Sandbox-Umgebung, in der Sie das Gelernte direkt ausprobieren können – entweder während der Lektion oder im Rahmen der Code-Challenge am Ende. Um die Übungen auszuführen, benötigen Sie:
- Einen Azure OpenAI API-Schlüssel – den Service-Endpunkt für ein bereitgestelltes LLM.
- Eine Python-Laufzeitumgebung – in der das Notebook ausgeführt werden kann.
- Lokale Umgebungsvariablen – Schließen Sie die Einrichtung jetzt ab, um bereit zu sein.
Das Notebook enthält Einstiegsübungen – Sie werden jedoch ermutigt, eigene Markdown- (Beschreibung) und Code- (Prompt-Anfragen) Abschnitte hinzuzufügen, um weitere Beispiele oder Ideen auszuprobieren und Ihr Gespür für die Gestaltung von Prompts zu entwickeln.
Möchten Sie sich einen Überblick über die Hauptthemen dieser Lektion verschaffen, bevor Sie tiefer eintauchen? Sehen Sie sich diese illustrierte Anleitung an, die Ihnen die wichtigsten Themen und Erkenntnisse vermittelt, über die Sie in jedem Abschnitt nachdenken sollten. Der Lehrplan führt Sie von der Einführung in die grundlegenden Konzepte und Herausforderungen bis hin zu deren Lösung mit relevanten Techniken und bewährten Praktiken des Prompt Engineering. Beachten Sie, dass der Abschnitt "Fortgeschrittene Techniken" in dieser Anleitung auf Inhalte verweist, die im nächsten Kapitel dieses Lehrplans behandelt werden.
Nun wollen wir darüber sprechen, wie dieses Thema mit unserer Startup-Mission zusammenhängt, KI-Innovationen in die Bildung zu bringen. Wir möchten KI-gestützte Anwendungen für personalisiertes Lernen entwickeln – denken wir also darüber nach, wie verschiedene Nutzer unserer Anwendung "Prompts" gestalten könnten:
- Administratoren könnten die KI bitten, Curriculum-Daten zu analysieren, um Lücken in der Abdeckung zu identifizieren. Die KI kann Ergebnisse zusammenfassen oder sie mit Code visualisieren.
- Lehrkräfte könnten die KI bitten, einen Unterrichtsplan für eine Zielgruppe und ein Thema zu erstellen. Die KI kann den personalisierten Plan in einem vorgegebenen Format erstellen.
- Schüler könnten die KI bitten, sie in einem schwierigen Fach zu unterrichten. Die KI kann Schüler mit Lektionen, Hinweisen und Beispielen unterstützen, die auf ihrem Niveau zugeschnitten sind.
Das ist nur die Spitze des Eisbergs. Schauen Sie sich Prompts For Education an – eine Open-Source-Prompt-Bibliothek, die von Bildungsexperten kuratiert wurde – um ein breiteres Verständnis der Möglichkeiten zu bekommen! Probieren Sie einige dieser Prompts in der Sandbox oder im OpenAI Playground aus, um zu sehen, was passiert!
Wir haben diese Lektion begonnen, indem wir Prompt Engineering als den Prozess definiert haben, Text-Eingaben (Prompts) zu gestalten und zu optimieren, um konsistente und qualitativ hochwertige Antworten (Completions) für ein bestimmtes Anwendungsziel und Modell zu liefern. Wir können dies als einen zweistufigen Prozess betrachten:
- Gestaltung des initialen Prompts für ein bestimmtes Modell und Ziel
- Verfeinerung des Prompts, um die Qualität der Antwort zu verbessern
Dies ist notwendigerweise ein Trial-and-Error-Prozess, der Benutzerintuition und Aufwand erfordert, um optimale Ergebnisse zu erzielen. Warum ist das wichtig? Um diese Frage zu beantworten, müssen wir zunächst drei Konzepte verstehen:
- Tokenisierung = wie das Modell den Prompt "sieht"
- Basis-LLMs = wie das Grundmodell einen Prompt "verarbeitet"
- Instruction-Tuned LLMs = wie das Modell jetzt "Aufgaben" erkennen kann
Ein LLM sieht Prompts als eine Sequenz von Tokens, wobei verschiedene Modelle (oder Versionen eines Modells) denselben Prompt auf unterschiedliche Weise tokenisieren können. Da LLMs auf Tokens (und nicht auf rohem Text) trainiert werden, hat die Art und Weise, wie Prompts tokenisiert werden, direkten Einfluss auf die Qualität der generierten Antwort.
Um ein Gespür dafür zu bekommen, wie Tokenisierung funktioniert, probieren Sie Tools wie den OpenAI Tokenizer aus, der unten gezeigt wird. Kopieren Sie Ihren Prompt hinein – und sehen Sie, wie dieser in Tokens umgewandelt wird, wobei Sie darauf achten, wie Leerzeichen und Satzzeichen behandelt werden. Beachten Sie, dass dieses Beispiel ein älteres LLM (GPT-3) zeigt – das Ausprobieren mit einem neueren Modell könnte ein anderes Ergebnis liefern.
Sobald ein Prompt tokenisiert ist, besteht die Hauptfunktion des "Basis-LLM" (oder Grundmodells) darin, das nächste Token in dieser Sequenz vorherzusagen. Da LLMs auf riesigen Textdatensätzen trainiert werden, haben sie ein gutes Verständnis für die statistischen Beziehungen zwischen Tokens und können diese Vorhersage mit einer gewissen Sicherheit treffen. Beachten Sie, dass sie die Bedeutung der Wörter im Prompt oder Token nicht verstehen; sie sehen lediglich ein Muster, das sie mit ihrer nächsten Vorhersage "vervollständigen" können. Sie können die Sequenz weiter vorhersagen, bis sie durch Benutzereingriff oder eine vorab festgelegte Bedingung beendet werden.
Möchten Sie sehen, wie Prompt-basierte Completions funktionieren? Geben Sie den obigen Prompt in das Azure OpenAI Studio Chat Playground mit den Standardeinstellungen ein. Das System ist so konfiguriert, dass Prompts als Informationsanfragen behandelt werden – Sie sollten also eine Completion sehen, die diesen Kontext erfüllt.
Aber was, wenn der Benutzer etwas Spezifisches sehen möchte, das bestimmte Kriterien oder ein Aufgabenobjektiv erfüllt? Hier kommen Instruction-Tuned LLMs ins Spiel.
Ein Instruction-Tuned LLM basiert auf dem Grundmodell und wird mit Beispielen oder Eingabe-/Ausgabe-Paaren (z. B. mehrstufigen "Nachrichten") feinabgestimmt, die klare Anweisungen enthalten können – und die Antwort der KI versucht, diese Anweisungen zu befolgen.
Dies nutzt Techniken wie Reinforcement Learning mit menschlichem Feedback (RLHF), die das Modell darauf trainieren können, Anweisungen zu befolgen und aus Feedback zu lernen, sodass es Antworten liefert, die besser für praktische Anwendungen geeignet und relevanter für die Ziele des Benutzers sind.
Probieren wir es aus – gehen Sie zurück zum obigen Prompt, ändern Sie jedoch die Systemnachricht, um die folgende Anweisung als Kontext bereitzustellen:
Fassen Sie den bereitgestellten Inhalt für einen Zweitklässler zusammen. Halten Sie das Ergebnis in einem Absatz mit 3-5 Stichpunkten.
Sehen Sie, wie das Ergebnis jetzt auf das gewünschte Ziel und Format abgestimmt ist? Ein Lehrer kann diese Antwort nun direkt in seinen Folien für den Unterricht verwenden.
Jetzt, da wir wissen, wie Prompts von LLMs verarbeitet werden, sprechen wir darüber, warum wir Prompt Engineering benötigen. Die Antwort liegt in der Tatsache, dass aktuelle LLMs eine Reihe von Herausforderungen mit sich bringen, die es schwieriger machen, zuverlässige und konsistente Completions zu erzielen, ohne Aufwand in die Konstruktion und Optimierung von Prompts zu investieren. Zum Beispiel:
-
Modellantworten sind stochastisch. Der gleiche Prompt wird wahrscheinlich unterschiedliche Antworten mit verschiedenen Modellen oder Modellversionen erzeugen. Und er kann sogar unterschiedliche Ergebnisse mit dem gleichen Modell zu unterschiedlichen Zeiten liefern. Prompt Engineering-Techniken können uns helfen, diese Variationen zu minimieren, indem sie bessere Leitplanken bieten.
-
Modelle können Antworten erfinden. Modelle werden mit großen, aber begrenzten Datensätzen vortrainiert, was bedeutet, dass ihnen Wissen über Konzepte außerhalb dieses Trainingsumfangs fehlt. Infolgedessen können sie Completions erzeugen, die ungenau, erfunden oder direkt widersprüchlich zu bekannten Fakten sind. Prompt Engineering-Techniken helfen Benutzern, solche Erfindungen zu identifizieren und zu minimieren, z. B. indem sie die KI um Quellenangaben oder Begründungen bitten.
-
Modellfähigkeiten variieren. Neuere Modelle oder Modellgenerationen haben umfangreichere Fähigkeiten, bringen jedoch auch einzigartige Eigenheiten und Kompromisse in Bezug auf Kosten und Komplexität mit sich. Prompt Engineering kann uns helfen, bewährte Praktiken und Arbeitsabläufe zu entwickeln, die Unterschiede abstrahieren und sich nahtlos an modell-spezifische Anforderungen anpassen.
Lassen Sie uns dies im OpenAI oder Azure OpenAI Playground in Aktion sehen:
- Verwenden Sie denselben Prompt mit verschiedenen LLM-Bereitstellungen (z. B. OpenAI, Azure OpenAI, Hugging Face) – haben Sie die Variationen bemerkt?
- Verwenden Sie denselben Prompt wiederholt mit der gleichen LLM-Bereitstellung (z. B. Azure OpenAI Playground) – wie unterschieden sich diese Variationen?
In diesem Kurs verwenden wir den Begriff "Erfindung", um das Phänomen zu beschreiben, bei dem LLMs manchmal faktisch falsche Informationen generieren, aufgrund von Einschränkungen in ihrem Training oder anderen Faktoren. Möglicherweise haben Sie diesen Begriff auch als "Halluzinationen" in populären Artikeln oder wissenschaftlichen Arbeiten gehört. Wir empfehlen jedoch dringend, den Begriff "Erfindung" zu verwenden, um nicht versehentlich das Verhalten zu vermenschlichen, indem wir ihm eine menschenähnliche Eigenschaft zuschreiben. Dies unterstützt auch die Richtlinien für verantwortungsvolle KI aus terminologischer Sicht, indem Begriffe vermieden werden, die in einigen Kontexten als beleidigend oder nicht inklusiv angesehen werden könnten.
Möchten Sie ein Gefühl dafür bekommen, wie Erfindungen funktionieren? Denken Sie an einen Prompt, der die KI anweist, Inhalte für ein nicht existierendes Thema zu erstellen (um sicherzustellen, dass es nicht im Trainingsdatensatz enthalten ist). Zum Beispiel habe ich diesen Prompt ausprobiert:
Prompt: Erstellen Sie einen Unterrichtsplan über den Marskrieg von 2076. Eine Websuche hat ergeben, dass es fiktive Berichte (z. B. Fernsehserien oder Bücher) über Marskriege gibt – jedoch keine aus dem Jahr 2076. Der gesunde Menschenverstand sagt uns außerdem, dass 2076 in der Zukunft liegt und daher nicht mit einem realen Ereignis in Verbindung gebracht werden kann.
Was passiert also, wenn wir diese Eingabeaufforderung mit verschiedenen LLM-Anbietern testen?
Antwort 1: OpenAI Playground (GPT-35)
Antwort 2: Azure OpenAI Playground (GPT-35)
Antwort 3: Hugging Face Chat Playground (LLama-2)
Wie erwartet, erzeugt jedes Modell (oder jede Modellversion) leicht unterschiedliche Antworten, was auf stochastisches Verhalten und Unterschiede in den Modellfähigkeiten zurückzuführen ist. Beispielsweise richtet sich ein Modell an ein Publikum der 8. Klasse, während ein anderes von Schülern der Oberstufe ausgeht. Aber alle drei Modelle haben Antworten generiert, die einen uninformierten Benutzer davon überzeugen könnten, dass das Ereignis real ist.
Techniken des Prompt Engineerings wie Metaprompting und Temperature Configuration können Modellfälschungen bis zu einem gewissen Grad reduzieren. Neue Architekturen des Prompt Engineerings integrieren auch nahtlos neue Werkzeuge und Techniken in den Prompt-Fluss, um einige dieser Effekte zu mindern oder zu reduzieren.
Lassen Sie uns diesen Abschnitt abschließen, indem wir uns ein Bild davon machen, wie Prompt Engineering in realen Lösungen eingesetzt wird. Dazu betrachten wir eine Fallstudie: GitHub Copilot.
GitHub Copilot ist Ihr "KI-Paarprogrammierer" – er wandelt Texteingaben in Codevorschläge um und ist in Ihre Entwicklungsumgebung (z. B. Visual Studio Code) integriert, um ein nahtloses Benutzererlebnis zu bieten. Wie in der Reihe von Blogs unten dokumentiert, basierte die früheste Version auf dem OpenAI Codex-Modell – wobei die Ingenieure schnell erkannten, dass das Modell feinabgestimmt und bessere Prompt Engineering-Techniken entwickelt werden mussten, um die Codequalität zu verbessern. Im Juli stellten sie ein verbessertes KI-Modell vor, das über Codex hinausgeht und noch schnellere Vorschläge liefert.
Lesen Sie die Beiträge in der Reihenfolge, um ihre Lernreise zu verfolgen.
- Mai 2023 | GitHub Copilot wird besser darin, Ihren Code zu verstehen
- Mai 2023 | Inside GitHub: Zusammenarbeit mit den LLMs hinter GitHub Copilot.
- Juni 2023 | Wie man bessere Prompts für GitHub Copilot schreibt.
- Juli 2023 | .. GitHub Copilot geht über Codex hinaus mit verbessertem KI-Modell
- Juli 2023 | Ein Leitfaden für Entwickler zu Prompt Engineering und LLMs
- September 2023 | Wie man eine Unternehmens-LLM-App erstellt: Lektionen von GitHub Copilot
Sie können auch ihren Engineering-Blog für weitere Beiträge wie diesen hier durchsuchen, der zeigt, wie diese Modelle und Techniken angewendet werden, um reale Anwendungen voranzutreiben.
Wir haben gesehen, warum Prompt Engineering wichtig ist – jetzt wollen wir verstehen, wie Prompts konstruiert werden, damit wir verschiedene Techniken für ein effektiveres Prompt-Design bewerten können.
Beginnen wir mit dem Basis-Prompt: einer Texteingabe, die ohne weiteren Kontext an das Modell gesendet wird. Hier ist ein Beispiel – wenn wir die ersten Wörter der US-amerikanischen Nationalhymne an die OpenAI Completion API senden, vervollständigt sie die Antwort sofort mit den nächsten Zeilen, was das grundlegende Vorhersageverhalten veranschaulicht.
| Prompt (Eingabe) | Completion (Ausgabe) |
|---|---|
| Oh say can you see | Es scheint, als würden Sie die ersten Zeilen von "The Star-Spangled Banner", der Nationalhymne der Vereinigten Staaten, zitieren. Der vollständige Text lautet ... |
Nun fügen wir dem Basis-Prompt Kontext und Anweisungen hinzu. Die Chat Completion API ermöglicht es uns, einen komplexen Prompt als Sammlung von Nachrichten zu erstellen mit:
- Eingabe-/Ausgabe-Paaren, die die Benutzer-Eingabe und die Assistenten-Antwort widerspiegeln.
- Systemnachricht, die den Kontext für das Verhalten oder die Persönlichkeit des Assistenten festlegt.
Die Anfrage hat nun die folgende Form, bei der die Tokenisierung relevante Informationen aus dem Kontext und der Konversation effektiv erfasst. Das Ändern des Systemkontexts kann genauso wirkungsvoll für die Qualität der Antworten sein wie die bereitgestellten Benutzereingaben.
response = openai.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"},
{"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
{"role": "user", "content": "Where was it played?"}
]
)In den obigen Beispielen war der Benutzer-Prompt eine einfache Textanfrage, die als Informationsanfrage interpretiert werden kann. Mit Anweisungs-Prompts können wir diesen Text verwenden, um eine Aufgabe detaillierter zu spezifizieren und dem KI-Modell bessere Anweisungen zu geben. Hier ist ein Beispiel:
| Prompt (Eingabe) | Completion (Ausgabe) | Anweisungstyp |
|---|---|---|
| Schreibe eine Beschreibung des Bürgerkriegs | gab einen einfachen Absatz zurück | Einfach |
| Schreibe eine Beschreibung des Bürgerkriegs. Nenne wichtige Daten und Ereignisse und beschreibe deren Bedeutung | gab einen Absatz gefolgt von einer Liste wichtiger Ereignisdaten mit Beschreibungen zurück | Komplex |
| Schreibe eine Beschreibung des Bürgerkriegs in einem Absatz. Nenne 3 Stichpunkte mit wichtigen Daten und deren Bedeutung. Nenne 3 weitere Stichpunkte mit wichtigen historischen Persönlichkeiten und deren Beiträgen. Gib die Ausgabe als JSON-Datei zurück. | gab ausführlichere Details in einer Textbox zurück, formatiert als JSON, das kopiert und in eine Datei eingefügt werden kann | Komplex. Formatiert |
In den obigen Beispielen war der Prompt immer noch ziemlich offen, sodass das LLM selbst entscheiden konnte, welcher Teil seines vortrainierten Datensatzes relevant ist. Mit dem Designmuster des Primärinhalts wird der Eingabetext in zwei Teile unterteilt:
- eine Anweisung (Aktion)
- relevanter Inhalt (der die Aktion beeinflusst)
Hier ist ein Beispiel, bei dem die Anweisung lautet: "Fassen Sie dies in 2 Sätzen zusammen".
| Prompt (Eingabe) | Completion (Ausgabe) |
|---|---|
| Jupiter ist der fünfte Planet von der Sonne und der größte im Sonnensystem. Es ist ein Gasriese mit einer Masse von einem Tausendstel der Sonne, aber zweieinhalb Mal so groß wie alle anderen Planeten im Sonnensystem zusammen. Jupiter ist eines der hellsten Objekte, die mit bloßem Auge am Nachthimmel sichtbar sind, und ist seit der voraufgezeichneten Geschichte alten Zivilisationen bekannt. Er ist nach dem römischen Gott Jupiter benannt.[19] Von der Erde aus betrachtet kann Jupiter so hell sein, dass sein reflektiertes Licht sichtbare Schatten wirft,[20] und ist im Durchschnitt das dritthellste natürliche Objekt am Nachthimmel nach dem Mond und der Venus. Fassen Sie dies in 2 kurzen Sätzen zusammen |
Jupiter, der fünfte Planet von der Sonne, ist der größte im Sonnensystem und bekannt dafür, eines der hellsten Objekte am Nachthimmel zu sein. Benannt nach dem römischen Gott Jupiter, ist er ein Gasriese, dessen Masse zweieinhalb Mal so groß ist wie die aller anderen Planeten im Sonnensystem zusammen. |
Das Primärinhalt-Segment kann auf verschiedene Weise verwendet werden, um effektivere Anweisungen zu geben:
- Beispiele – anstatt dem Modell explizit zu sagen, was es tun soll, geben Sie ihm Beispiele für die gewünschte Ausgabe und lassen Sie es das Muster ableiten.
- Hinweise – folgen Sie der Anweisung mit einem "Hinweis", der die Antwort einleitet und das Modell zu relevanteren Antworten führt.
- Vorlagen – dies sind wiederholbare 'Rezepte' für Prompts mit Platzhaltern (Variablen), die mit Daten für spezifische Anwendungsfälle angepasst werden können.
Lassen Sie uns diese Ansätze in der Praxis erkunden.
Dies ist ein Ansatz, bei dem Sie den Primärinhalt verwenden, um dem Modell einige Beispiele für die gewünschte Ausgabe für eine bestimmte Anweisung zu geben und es das Muster für die gewünschte Ausgabe ableiten lassen. Je nach Anzahl der bereitgestellten Beispiele können wir Zero-Shot-Prompting, One-Shot-Prompting, Few-Shot-Prompting usw. haben.
Der Prompt besteht nun aus drei Komponenten:
- Einer Aufgabenbeschreibung
- Einigen Beispielen der gewünschten Ausgabe
- Dem Beginn eines neuen Beispiels (das zu einer impliziten Aufgabenbeschreibung wird)
| Lernart | Prompt (Eingabe) | Completion (Ausgabe) |
|---|---|---|
| Zero-shot | "Die Sonne scheint". Übersetze ins Spanische | "El Sol está brillando". |
| One-shot | "Die Sonne scheint" => ""El Sol está brillando". "Es ist ein kalter und windiger Tag" => |
"Es un día frío y ventoso". |
| Few-shot | Der Spieler lief die Bases ab => Baseball Der Spieler schlug ein Ass => Tennis Der Spieler schlug eine Sechs => Cricket Der Spieler machte einen Slam-Dunk => |
Basketball |
Beachten Sie, wie wir im Zero-Shot-Prompting eine explizite Anweisung ("Übersetze ins Spanische") geben mussten, während sie im One-Shot-Prompting-Beispiel abgeleitet wird. Das Few-Shot-Beispiel zeigt, wie das Hinzufügen weiterer Beispiele es den Modellen ermöglicht, genauere Schlussfolgerungen zu ziehen, ohne zusätzliche Anweisungen.
Eine weitere Technik zur Verwendung von Primärinhalten besteht darin, Hinweise anstelle von Beispielen zu geben. In diesem Fall geben wir dem Modell einen Anstoß in die richtige Richtung, indem wir es mit einem Ausschnitt beginnen, der das gewünschte Antwortformat widerspiegelt. Das Modell "nimmt den Hinweis" und setzt in dieser Richtung fort.
| Anzahl der Hinweise | Prompt (Eingabe) | Completion (Ausgabe) |
|---|---|---|
| 0 | Jupiter ist der fünfte Planet von der Sonne und der größte im Sonnensystem. Es ist ein Gasriese mit einer Masse von einem Tausendstel der Sonne, aber zweieinhalb Mal so groß wie alle anderen Planeten im Sonnensystem zusammen. Jupiter ist eines der hellsten Objekte, die mit bloßem Auge am Nachthimmel sichtbar sind, und ist seit der voraufgezeichneten Geschichte alten Zivilisationen bekannt. Fassen Sie dies zusammen |
Jupiter ist der größte Planet in unserem Sonnensystem und der fünfte von der Sonne. Es ist ein Gasriese mit einer Masse von 1/1000 der Sonne, aber schwerer als alle anderen Planeten zusammen. Alte Zivilisationen kennen Jupiter seit langem, und er ist leicht am Nachthimmel sichtbar. |
| 1 | Jupiter ist der fünfte Planet von der Sonne und der größte im Sonnensystem. Es ist ein Gasriese mit einer Masse, die ein Tausendstel der Sonne beträgt, aber zweieinhalb Mal so groß ist wie die aller anderen Planeten im Sonnensystem zusammen. Jupiter ist eines der hellsten Objekte, die mit bloßem Auge am Nachthimmel sichtbar sind, und ist seit der Antike bekannt. Zusammenfassung Was wir gelernt haben, ist, dass Jupiter |
der fünfte Planet von der Sonne und der größte im Sonnensystem ist. Es ist ein Gasriese mit einer Masse, die ein Tausendstel der Sonne beträgt, aber zweieinhalb Mal so groß ist wie die aller anderen Planeten zusammen. Er ist leicht mit bloßem Auge sichtbar und seit der Antike bekannt. |
| 2 | Jupiter ist der fünfte Planet von der Sonne und der größte im Sonnensystem. Es ist ein Gasriese mit einer Masse, die ein Tausendstel der Sonne beträgt, aber zweieinhalb Mal so groß ist wie die aller anderen Planeten im Sonnensystem zusammen. Jupiter ist eines der hellsten Objekte, die mit bloßem Auge am Nachthimmel sichtbar sind, und ist seit der Antike bekannt. Zusammenfassung Die Top 3 Fakten, die wir gelernt haben: |
1. Jupiter ist der fünfte Planet von der Sonne und der größte im Sonnensystem. 2. Es ist ein Gasriese mit einer Masse, die ein Tausendstel der Sonne beträgt... 3. Jupiter ist seit der Antike mit bloßem Auge sichtbar ... |
Eine Prompt-Vorlage ist ein vordefiniertes Rezept für einen Prompt, das gespeichert und bei Bedarf wiederverwendet werden kann, um konsistentere Benutzererfahrungen in großem Maßstab zu ermöglichen. In seiner einfachsten Form ist es einfach eine Sammlung von Prompt-Beispielen wie dieses von OpenAI, das sowohl die interaktiven Prompt-Komponenten (Benutzer- und Systemnachrichten) als auch das API-gesteuerte Anforderungsformat bereitstellt – um die Wiederverwendung zu unterstützen.
In seiner komplexeren Form wie dieses Beispiel von LangChain enthält es Platzhalter, die durch Daten aus verschiedenen Quellen (Benutzereingaben, Systemkontext, externe Datenquellen usw.) ersetzt werden können, um einen Prompt dynamisch zu generieren. Dies ermöglicht es uns, eine Bibliothek wiederverwendbarer Prompts zu erstellen, die verwendet werden können, um konsistente Benutzererfahrungen programmatisch in großem Maßstab zu steuern.
Schließlich liegt der wahre Wert von Vorlagen in der Fähigkeit, Prompt-Bibliotheken für vertikale Anwendungsbereiche zu erstellen und zu veröffentlichen – wobei die Prompt-Vorlage jetzt optimiert ist, um anwendungsspezifischen Kontext oder Beispiele widerzuspiegeln, die die Antworten für die Zielgruppe relevanter und genauer machen. Das Prompts For Edu-Repository ist ein großartiges Beispiel für diesen Ansatz, da es eine Bibliothek von Prompts für den Bildungsbereich kuratiert, mit Schwerpunkt auf Schlüsselzielen wie Unterrichtsplanung, Lehrplangestaltung, Schülernachhilfe usw.
Wenn wir die Konstruktion von Prompts als eine Kombination aus einer Anweisung (Aufgabe) und einem Ziel (primärer Inhalt) betrachten, dann ist sekundärer Inhalt wie zusätzlicher Kontext, den wir bereitstellen, um die Ausgabe in irgendeiner Weise zu beeinflussen. Es könnten Tuning-Parameter, Formatierungsanweisungen, Themen-Taxonomien usw. sein, die dem Modell helfen, seine Antwort an die gewünschten Benutzerziele oder -erwartungen anzupassen.
Beispiel: Angenommen, wir haben einen Kurskatalog mit umfangreichen Metadaten (Name, Beschreibung, Niveau, Metadaten-Tags, Dozent usw.) zu allen verfügbaren Kursen im Lehrplan:
- Wir können eine Anweisung definieren, um "den Kurskatalog für Herbst 2023 zusammenzufassen".
- Wir können den primären Inhalt verwenden, um einige Beispiele für die gewünschte Ausgabe bereitzustellen.
- Wir können den sekundären Inhalt verwenden, um die fünf wichtigsten "Tags" von Interesse zu identifizieren.
Nun kann das Modell eine Zusammenfassung im Format der gezeigten Beispiele liefern – aber wenn ein Ergebnis mehrere Tags enthält, kann es die fünf im sekundären Inhalt identifizierten Tags priorisieren.
Jetzt, da wir wissen, wie Prompts konstruiert werden können, können wir darüber nachdenken, wie wir sie gestalten, um Best Practices zu berücksichtigen. Wir können dies in zwei Teile unterteilen – die richtige Einstellung haben und die richtigen Techniken anwenden.
Prompt-Engineering ist ein Trial-and-Error-Prozess, daher sollten Sie drei allgemeine Leitfaktoren im Hinterkopf behalten:
-
Domänenverständnis ist entscheidend. Die Genauigkeit und Relevanz der Antworten hängt von der Domäne ab, in der die Anwendung oder der Benutzer arbeitet. Nutzen Sie Ihre Intuition und Fachkenntnisse, um Techniken weiter anzupassen. Definieren Sie beispielsweise domänenspezifische Persönlichkeiten in Ihren System-Prompts oder verwenden Sie domänenspezifische Vorlagen in Ihren Benutzer-Prompts. Stellen Sie sekundäre Inhalte bereit, die domänenspezifische Kontexte widerspiegeln, oder verwenden Sie domänenspezifische Hinweise und Beispiele, um das Modell zu vertrauten Nutzungsmustern zu führen.
-
Modellverständnis ist entscheidend. Wir wissen, dass Modelle von Natur aus stochastisch sind. Aber Modellimplementierungen können auch in Bezug auf den Trainingsdatensatz, den sie verwenden (vortrainiertes Wissen), die Fähigkeiten, die sie bieten (z. B. über API oder SDK), und die Art des Inhalts, für den sie optimiert sind (z. B. Code vs. Bilder vs. Text), variieren. Verstehen Sie die Stärken und Schwächen des Modells, das Sie verwenden, und nutzen Sie dieses Wissen, um Aufgaben zu priorisieren oder angepasste Vorlagen zu erstellen, die für die Fähigkeiten des Modells optimiert sind.
-
Iteration und Validierung sind entscheidend. Modelle entwickeln sich schnell weiter, ebenso wie die Techniken des Prompt-Engineerings. Als Domänenexperte haben Sie möglicherweise andere Kontexte oder Kriterien für Ihre spezifische Anwendung, die möglicherweise nicht auf die breitere Community zutreffen. Verwenden Sie Tools und Techniken des Prompt-Engineerings, um den Prompt-Aufbau zu "starten", und iterieren und validieren Sie die Ergebnisse dann mit Ihrer eigenen Intuition und Fachkenntnis. Dokumentieren Sie Ihre Erkenntnisse und erstellen Sie eine Wissensdatenbank (z. B. Prompt-Bibliotheken), die von anderen als neue Basis für schnellere Iterationen in der Zukunft verwendet werden kann.
Schauen wir uns nun die allgemeinen Best Practices an, die von OpenAI und Azure OpenAI empfohlen werden.
| Was | Warum |
|---|---|
| Evaluieren Sie die neuesten Modelle. | Neue Modellgenerationen haben wahrscheinlich verbesserte Funktionen und Qualität – können jedoch auch höhere Kosten verursachen. Bewerten Sie ihre Auswirkungen und treffen Sie dann Migrationsentscheidungen. |
| Trennen Sie Anweisungen und Kontext. | Überprüfen Sie, ob Ihr Modell/Anbieter Trennzeichen definiert, um Anweisungen, primäre und sekundäre Inhalte klarer zu unterscheiden. Dies kann Modellen helfen, Token genauer zu gewichten. |
| Seien Sie spezifisch und klar. | Geben Sie mehr Details über den gewünschten Kontext, das Ergebnis, die Länge, das Format, den Stil usw. an. Dies verbessert sowohl die Qualität als auch die Konsistenz der Antworten. Erfassen Sie Rezepte in wiederverwendbaren Vorlagen. |
| Seien Sie beschreibend, verwenden Sie Beispiele. | Modelle reagieren möglicherweise besser auf einen "Zeigen und Erzählen"-Ansatz. Beginnen Sie mit einem Zero-Shot-Ansatz, bei dem Sie ihm eine Anweisung geben (aber keine Beispiele), und versuchen Sie dann Few-Shot als Verfeinerung, indem Sie einige Beispiele für die gewünschte Ausgabe bereitstellen. Verwenden Sie Analogien. |
| Verwenden Sie Hinweise, um Abschlüsse zu starten. | Stoßen Sie es in Richtung eines gewünschten Ergebnisses, indem Sie ihm einige führende Wörter oder Phrasen geben, die es als Ausgangspunkt für die Antwort verwenden kann. |
| Wiederholen Sie sich. | Manchmal müssen Sie sich dem Modell gegenüber wiederholen. Geben Sie Anweisungen vor und nach Ihrem primären Inhalt, verwenden Sie eine Anweisung und einen Hinweis usw. Iterieren und validieren Sie, um zu sehen, was funktioniert. |
| Reihenfolge ist wichtig. | Die Reihenfolge, in der Sie dem Modell Informationen präsentieren, kann die Ausgabe beeinflussen, selbst in den Lernbeispielen, dank des Recency-Effekts. Probieren Sie verschiedene Optionen aus, um zu sehen, was am besten funktioniert. |
| Geben Sie dem Modell eine "Ausweichmöglichkeit". | Geben Sie dem Modell eine Fallback-Antwort, die es liefern kann, wenn es die Aufgabe aus irgendeinem Grund nicht abschließen kann. Dies kann die Wahrscheinlichkeit verringern, dass Modelle falsche oder erfundene Antworten generieren. |
Wie bei jeder Best Practice gilt: Ihre Ergebnisse können variieren, je nach Modell, Aufgabe und Domäne. Verwenden Sie diese als Ausgangspunkt und iterieren Sie, um herauszufinden, was für Sie am besten funktioniert. Überprüfen Sie Ihren Prompt-Engineering-Prozess ständig neu, wenn neue Modelle und Tools verfügbar werden, mit Fokus auf Skalierbarkeit des Prozesses und Qualität der Antworten.
Herzlichen Glückwunsch! Sie haben das Ende der Lektion erreicht! Es ist Zeit, einige dieser Konzepte und Techniken mit echten Beispielen zu testen!
Für unsere Aufgabe verwenden wir ein Jupyter Notebook mit Übungen, die Sie interaktiv abschließen können. Sie können das Notebook auch mit Ihren eigenen Markdown- und Code-Zellen erweitern, um eigene Ideen und Techniken zu erkunden.
- (Empfohlen) Starten Sie GitHub Codespaces
- (Alternativ) Klonen Sie das Repository auf Ihr lokales Gerät und verwenden Sie es mit Docker Desktop
- (Alternativ) Öffnen Sie das Notebook mit Ihrer bevorzugten Notebook-Laufzeitumgebung.
- Kopieren Sie die Datei
.env.copyim Repository-Stammverzeichnis nach.envund füllen Sie die Werte fürAZURE_OPENAI_API_KEY,AZURE_OPENAI_ENDPOINTundAZURE_OPENAI_DEPLOYMENTaus. Kehren Sie zum Abschnitt Learning Sandbox zurück, um zu erfahren, wie.
- Wählen Sie den Laufzeit-Kernel aus. Wenn Sie die Optionen 1 oder 2 verwenden, wählen Sie einfach den Standard-Python 3.10.x-Kernel aus, der vom Entwicklungscontainer bereitgestellt wird.
Sie sind bereit, die Übungen auszuführen. Beachten Sie, dass es hier keine richtigen und falschen Antworten gibt – es geht nur darum, Optionen durch Trial-and-Error zu erkunden und ein Gefühl dafür zu entwickeln, was für ein bestimmtes Modell und Anwendungsbereich funktioniert.
Aus diesem Grund gibt es in dieser Lektion keine Code-Lösungssegmente. Stattdessen enthält das Notebook Markdown-Zellen mit dem Titel "Meine Lösung:", die ein Beispielergebnis zur Orientierung zeigen.
Welcher der folgenden Prompts entspricht einigen vernünftigen Best Practices?
- Zeige mir ein Bild von einem roten Auto.
- Zeige mir ein Bild von einem roten Auto der Marke Volvo und Modell XC90, das an einer Klippe geparkt ist, während die Sonne untergeht.
- Zeige mir ein Bild von einem roten Auto der Marke Volvo und Modell XC90.
A: 2, es ist der beste Prompt, da er Details darüber liefert, "was" gemeint ist, und ins Detail geht (nicht nur irgendein Auto, sondern eine bestimmte Marke und ein bestimmtes Modell). 3 ist die nächstbeste Option, da sie ebenfalls viele Beschreibungen enthält.
Versuchen Sie, die Technik des "Hinweises" mit dem Prompt zu nutzen: Vervollständigen Sie den Satz "Zeige mir ein Bild von einem roten Auto der Marke Volvo und ". Was antwortet es, und wie würden Sie es verbessern?
Möchten Sie mehr über verschiedene Konzepte des Prompt-Engineerings erfahren? Besuchen Sie die Seite für weiterführendes Lernen, um weitere großartige Ressourcen zu diesem Thema zu finden.
Gehen Sie zu Lektion 5, wo wir uns fortgeschrittene Prompt-Techniken ansehen!
Haftungsausschluss:
Dieses Dokument wurde mit dem KI-Übersetzungsdienst Co-op Translator übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als maßgebliche Quelle betrachtet werden. Für kritische Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die sich aus der Nutzung dieser Übersetzung ergeben.







