Version 0.1.0 | Michael Jentsch

Prompt Engineering ist eine Disziplin für die Entwicklung und Optimierung von Prompts zur effizienten Nutzung von Tools wie z.B. Chat-GPT.

Prompt-Engineering-Fähigkeiten helfen, die Fähigkeiten von großen Sprachmodelle (LLMs) besser zu nutzen und die Grenzen zu verstehen.

Aufgrund des großen Interesses am Prompt Engineering habe ich diesen Prompt-Engineering-Leitfaden erstellt, in dem ich alle, mir vorliegenden Papiere, Lernleitfäden, Vorlesungen, Referenzen und Tools zum Thema Prompt-Engineering zusammenfasse.

Aufruf zur Einreichung von Beiträgen

Ein wichtiger Baustein zur kontinuierlichen Verbesserung dieses Guides ist die Zusammenarbeit. Nur durch regelmäßigen Austausch über Probleme, Herausforderungen, und Lösungsansätze rund das Prompt Engineering kann ein umfassendes und aktuelles Werk entstehen.

Wir schätzen Ihre Beiträge, Ihr Feedback und Ihre Vorschläge. Bitte zögern Sie nicht, einen Pull-Request zu erstellen oder ein Issue zu öffnen.

Hinweis: Bitte fügen Sie nur Ressourcen hinzu, die mit Chat-GPT zu tun haben und das Prompt Engineering von Bedeutung sind.

Chat-GPT Einführung

Chat-GPT ist ein Werkzeug, das in der Lage ist, im Dialog mit dem Nutzer zu interagieren. Das GPT-Modell ist darauf trainiert den Anweisungen in einer Eingabeaufforderung zu folgen, um im Rahmen eines Dialogs passende Antworten zu geben. Chat-GPT kann bei der Beantwortung von Fragen helfen, Rezepte vorschlagen, Texte in einem bestimmten Stil schreiben, Code generieren und vieles mehr. Chat-GPT wurde auch darauf trainiert, schädliche und unwahre Ausgaben zu vermeiden.

Chat-GPT kann unter https://chat.openai.com/chat kostenlos genutzt werden. Lediglich eine Registrierung ist erforderlich. Es gibt auch eine kostenpflichtige Version von Chat-GPT, die aktuell 20$ im Monat kostet und dafür einige Vorteile bietet.

image1

Die Oberfläche von Chat-GPT ist sehr einfach gestaltet.

image2

Auf der Linken Seite gibt es oben einen „New chat“ Button, mit dem mein eine neue Konversation anfangen kann. Darunter befindet sich die Liste mit den bisher geführten Konversationen, die jederzeit aufgerufen und weitergeführt werden können.

Das Haupt-Fenster befindet sich rechts. Hier wird später der Chatverlauf angezeigt. Im unteren Teil befindet sich ein Eingabefeld in das die Nachricht eingetragen werden kann. Es können auch mehrzeilige Eingaben erfolgen. Ein Zeilenumbruch kann man mit der Tastenkombination „[Shift][Enter]“ erzwingen.

Unten rechts sind noch ein paar Funktionen wie z.B. „Clear conversations“, dass die Liste der Chats löscht, der „Upgrade to Plus“ Button mit dem man zu Chat-GPT Plus wechseln kann. Darunter gibt es die Möglichkeit zwischen dem Dark Mode und dem Light Mode zu wechseln (Diese Funktion bezieht sich ausschließlich auf die Darstellung. Die Antworten von Chat-GPT ändern sich durch den Wechsel in den Dark-Mode nicht). Mit dem „Get help“ Button kann man die Hilfe unter https://help.openai.com/en/ aufrufen und mit dem „Log out“ Button verlässt man Chat-GPT.

Prompt Engineering Grundlagen

Als Prompt Engineer benötigt man ein solides Verständnis der Funktionsweise von ChatGPT und der zugrunde liegenden Technologie, um die Einsatzmöglichkeiten und die Grenzen der Sprachmodelle besser beurteilen zu können.

GPT steht für Generative Pretrained Transformer. Diese Technologie basiert auf dem Transformer-Modell, dass sehr gut geeignet ist um angefangene Texte zu vervollständigen oder existierende Texte zusammenzufassen. Diese Modelle entsprechen einer seht großen mathematischen Gleichung, die mehrere Milliarden Parameter enthalten kann.

Trainiert werden die Modelle mit Texten, die aus allen möglichen Quellen und aus jedem denkbaren Themengebiet stammen können. Beim Pretraining wird das Modell darauf Trainiert, das nächste Wort eines Textausschnittes vorherzusagen. Ähnlich einer Handy Tastatur, wird anhand der vorherigen Eingabe das nächste Wort vorhergesagt. Der Unterschied ist nur, dass GPT nicht nur das vorherige Wort betrachtet, sondern die gesamte bisherige Konversation. Dadurch ist es möglich, Chat-GPT im Verlauf einer Konversation zu bestimmten Vorhersagen zu bewegen, die anders nicht möglich wären.

Nach dem Pretraining folgt das Fine-Tuning, bei dem das Sprachmodell durch überwachtes Lernen auf die eigentliche Aufgabe (Das Generieren von Antworten auf vorher gestellte Fragen) trainiert wird. Hierfür wurden vorgefertigte Frage/Antwort Paare aus den unterschiedlichsten Gebieten bereitgestellt (Siehe Screenshot).

Ein Bild

Beispiel aus dem MMLU Dataset (https://huggingface.co/datasets/tasksource/mmlu) Global-Facts.

Weitere Beispiele für solche Frage-Antworte Paar Datensätze sind z.B.

Zum Schluss wird das Modell durch Reinforcement Learning weiter optimiert: Hierfür werden die Antworten des LLM (Large Language Modell) mit Hilfe von Supervised Learning bewertet. Diese Bewertungen fließen dann wieder zurück in das Modell. Durch diesen letzten Schritt wird das GPT-Modell noch weiter optimiert.

Was ist ein Prompt?

Ein Prompt ist ein Satz oder eine Phrase, die verwendet wird, um eine spezifische Antwort von dem Chat-GPT-Modell zu erhalten. Unter Prompt Engineerings wird das Entwerfen und Formulieren von Prompts, die dem Modell helfen, spezifische Informationen zu generieren oder spezifische Aufgaben auszuführen.

Durch korrekt formulierte Prompts kann Chat-GPT darauf eingestimmt werden, spezifische Antworten oder Ergebnisse zu generieren, die auf die Bedürfnisse der Benutzer zugeschnitten sind.

Zum Beispiel kann ein Prompt so formuliert werden, dass eine kurze Zusammenfassung eines Artikels generiert oder eine Antwort auf eine bestimmte Frage ausgegeben wird.

Korrektheit der Ausgaben

Bei der Nutzung von Chat-GPT oder anderen LLMs ist immer darauf zu achten, dass die Ergebnisse nicht immer zu 100% korrekt sind. Chat-GPT ist ein System, das auf Wahrscheinlichkeiten basiert. Das bedeutet, dass die Antworten und Ergebnisse, die von Chat-GPT generiert werden, möglicherweise nicht immer genau oder korrekt sind.

Es ist anzunehmen, dass die Qualität der Antworten von Chat-GPT in Zukunft besser werden, da die Technologie und die Trainingsdaten verbessert und verfeinert werden.

Ein weiterer wichtiger Punkt ist, dass Chat-GPT im Laufe der Zeit mehr Erfahrung sammelt, was dazu beiträgt, die Qualität der Antworten zu verbessern.

Es ist jedoch wichtig zu beachten, dass es immer Grenzen geben wird, und dass Chat-GPT vermutlich noch lange nicht perfekt sein wird. Chat-GPT ist kein menschlicher Experte und verfügt nicht über menschliches Wissen oder Erfahrung. Chat-GPT kann auch von Vorurteilen bzw. Fehlern der Trainingsdaten beeinflusst werden, die sich auf die Antworten auswirken können. Aus diesem Grund ist es wichtig, die Ergebnisse von Chat-GPT immer kritisch zu betrachten.

Es ist immer eine menschliche Überprüfung durch menschliche Expertise notwendig, um sicherzustellen, dass die Antworten korrekt und zuverlässig sind.

Einfache Prompts

Ein einfacher Prompt sollte mindestens die Anweisung oder Frage enthalten, die das Modell verarbeiten soll. Ergänzend sind weiterführende Details oder Beispiele sinnvoll, um dem Modell eine bessere Aussage zu ermöglichen.

Mit einfachen Prompts kann man schon viel erreichen, aber die Qualität der Ergebnisse hängt davon ab, wie viele Informationen man dem Modell zur Verfügung stellt.

Beim Schreiben eines Prompts sollte man immer im Hinterkopf behalten, dass es sich um kein Wissensmodell handelt, sondern um ein Sprachmodell, das darauf ausgelegt ist, angefangene Texte zu vervollständigen.

Beispiel:

Ein Bild

Chat-GPT Beispiel für den Text „Der Regen ist“. Wie man sieht, gibt das Sprachmodell eine Zeichenfolge aus, die in dem Kontext "Der Regen ist" einen Sinn ergeben. Das Ergebnis kann dabei sehr weit von der Erledigung der Aufgabe entfernt sein, die erfüllen werden sollte.

Dieses kleine Beispiel verdeutlicht sehr gut die Notwendigkeit, dem Modell mehr Kontext darüber zu geben, was genau erreicht werden soll.

In solchen Fällen kann es passieren, dass Chat-GPT auch nach mehr Informationen fragt.

Ein Bild

Im ersten Moment könnte man hier denken: Wow, Chat-GPT hat verstanden das die Aussage nicht beendet wurde und fragt nun nach, um mehr Informationen zu erhalten. Aber auch hier hat Chat-GPT nichts anderes gemacht als in dem vorherigen Beispiel. Es hat den Text einfach um die wahrscheinlichste Zeichenfolge fortgesetzt.

Ist das nun gut oder schlecht?

Weder noch. Chat-GPT hat den Text basierend auf den vorliegenden Informationen einfach weitergeschrieben. Innerhalb des Chats kann man nun mit der Konversationen fortfahren. Das Modell kann auf die vorherigen Zeichenfolgen zugreifen und so entsteht eine natürliche Unterhaltung, die zu einer komplexen Konversation führen kann.

Hinweis: Die Chats in Chat-GPT sind unabhängig voneinander. So kann man in einem Chat nicht auf die Konversation aus einem anderen Chat zugreifen.

Trotz der Tatsache, dass es sich bei dem GPT-3.5 Modell im Wesentlichen um eine mathematische Gleichung handelt, vervollständigt Chat-GPT einen angefangenen Text nicht immer identisch. Diesen Effekt kann man z.B. auch mit der Funktion „Regenerate Response“ beobachten.

Hier ein paar Beispiele dafür, wie Chat-GTP den Text „Meine Katze ist“ vervollständigt. Die in 4 unabhängigen Chats eingetragen wurden.

images/media/image6

Ein Bild

Ein Bild

Ein Bild

Die Chats werden auch unterschiedlich betitelt, obwohl die eingegebenen Texte identisch sind.

images/media/image10

Chat Namen in der Liste der Chats

Inhaltlich sind alle Antworten recht ähnlich. Das ist ein starkes Indiz dafür, dass Chat-GPT sich seiner Sache recht sicher ist. In anderen Fällen kann man mit dem „Regenerate Response“ Button stark voneinander abweichende Texte erhalten, die sich sogar widersprechen können. Das kann ein Zeichen von „Unsicherheit“ sein. D.H. mehrere mögliche antworten können hier eine ähnliche Wahrscheinlichkeit haben.

Chat-GPT Ermöglicht es dem Benutzer auch Folgekorrekturen vorzunehmen, wenn es mal einen Fehler gemacht hat.

Ein Bild

Am Beispiel „Wie viele Beine hat ein Hundertfüßer?“ kann man sehen, dass Chat-GPT auch Fehler eingestehen kann. Wenn man sich noch mal in Erinnerung ruft, dass GPT 3.5 kein Wissensmodell, sondern ein Sparchmodell ist, ergibt das auch einen Sinn. Denn im Modell ist kein Wissen gespeichert, sondern nur wie der Text am wahrscheinlichsten fortgeführt werden könnte.

Hinweis: Um einen Missbrauch zu verhindern ist das GPT-Modell geschult, unangemessene Anfragen abzulehnen. Das führt dazu, dass man sensible oder kontroverse Themen wie z.B. „Bau einer Bombe“ oder „https://www.jentsch.io/vielleicht-ist-es-an-der-zeit-sich-einem-neuen-thema-zuzuwenden/[Weltherrschaft durch eine KI]“ nicht mit Chat-GPT besprechen kann.

Hinweis: Man sollte sich immer der Tatsache bewusst sein, dass Chat-GPT nur begrenzt über aktuelle Informationen verfügt. D.H. Besonders in Bezug auf aktuelle Themen sind die Antworten von Chat-GPT mit Vorsicht zu genießen.

Elemente eines Prompts

Beim Schreiben von Prompts ist es hilfreich, sich darüber klar zu sein, dass ein Prompt unterschiedliche Elemente enthalten kann. Ein Prompt kann folgenden Komponenten enthalten:

  • Anweisung
    Eine bestimmte Aufgabe oder Anweisung, die das Modell ausführen soll

  • Kontext
    Externe Informationen oder zusätzlichen Kontext, der das Modell zu besseren Antworten führen kann

  • Eingabedaten
    Eingabedaten, die zur Lösung der Anweisung benötigt werden.

  • Output-Indikator
    Typ oder das Format des Outputs an.

Nicht alle Komponenten sind für eine Eingabeaufforderung erforderlich und das Format hängt von der jeweiligen Aufgabe ab. In den nächsten Kapiteln wird auf konkretere Beispiele eingegangen.

Ein Beispiel:

Ein Bild

Ein Bild

Das Beispiel zeigt, wie man durch das Ändern der Zielgruppe und der Komplexität die Ausgaben von Chat-GPT steuern kann. Dadurch wird es möglich eine Aussage zu erzeugen, die besser den Erwartungen entsprechen.

Chat-GPT kann aber auch schon auf sehr einfach gehaltene Prompts, die eine komplexe Aufgabe enthalten antworten. Das folgende Beispiel einhält alle Informationen, die nötig sind, um die Aufgabe zu lösen in einem kurzen Satz.

Ein Bild

Das Ergebnis ist korrekt. Der Rechenweg ist zwar etwas merkwürdig, da für die Berechnung des Gesamtgewichts des Apfels das Gesamtgewicht verwendet wird, aber trotzdem: Chat-GPT hat die Aufgabe „Wie viel wiegt ein Apfel, der 100g plus die Hälfte seines Gesamtgewichts wiegt?“ korrekt beantwortet.

Tipps für die Gestaltung von Prompts

Im Folgenden noch einige Tipps, die bei der Gestaltung von Prompts beachtet werden sollten:

Einfach starten

Das Erstellen von Prompts ist ein iterativer Prozess, der Experimente erfordert. Daher sollte man erst einfach starten und den Prompt Stück für Stück weiter verbessern. Dabei werden immer mehr Elemente ergänzt und der Kontext konkretisiert.

Aufteilen komplexer Prompts

Größere Aufgaben, die mehrere verschiedene Teilaufgaben umfassen, können zerlegt werden. Auf diese Weise kann vermieden werden, dass die Aufgabe für einen Prompt zu komplex wird. Durch das Aufteilen komplexer Aufgaben werden oft bessere Ergebnisse erzielt.

Das Aufteilen komplexer Aufgaben auf mehrere Prompts hat folgende Vorteile:

  • Verbesserte Fokussierung
    Indem man die Aufgabe in kleine Teilschritte aufteilt, kann man sich besser auf jeden einzelnen Schritt konzentrieren und vermeidet, dass Chat-GPT mit der Gesamtaufgabe überfordert wird.

  • Leichtere Fehlerbehebung
    Wenn ein Fehler in einem Prompt auftritt, kann ist es leichter, ihn zu identifizieren und zu beheben, ohne den gesamten Prozess zu beeinträchtigen.

  • Bessere Skalierbarkeit
    Durch das Aufteilen einer Aufgabe in mehrere Prompts ist es einfacher, zu skalieren und weitere Ressourcen hinzuzufügen, um die Aufgabe schneller zu erledigen.

  • Einfachere Zusammenarbeit
    Wenn mehrere Personen an einer Aufgabe arbeiten, erleichtert das Aufteilen in Prompts die Zusammenarbeit und ermöglicht eine bessere Verteilung der Arbeit.

  • Bessere Wiederverwendbarkeit
    Prompts können in anderen Projekten oder Prozessen wiederverwendet werden, was Zeit und Ressourcen spart.

  • Bessere Überprüfbarkeit
    Handelt es sich um eine themenübergreifende Aufgabe, können die einzelnen Prompts besser von den jeweiligen Experten in dem Themengebiet überprüft werden.

Insgesamt kann das Aufteilen einer komplexen Aufgabe in mehrere Prompts zu einem effektiveren und effizienteren Prompt Engineering Prozess führen.

Die Anweisung

Indem man eine konkrete Anweisung verwendet, die dem Modell mitteilt, was erreicht werden soll, z. B. "Schreiben", "Klassifizieren", "Zusammenfassen", "Übersetzen", "Ordnen" usw. werden die Prompts effektiver und Chat-GPT kann die Aufgaben präziser und effizienter lösen.

Um herauszufinden, welche Anweisung am besten geeignet ist, es nötig zu experimentieren. Um das gewünschte Ergebnis zu erhalten, ist es sinnvoll verschiedene Anweisungen mit unterschiedlichen Schlüsselwörtern, Kontexten und Daten auszuprobieren. So kann man herausfinden, was für den Anwendungsfall und die Aufgabe am besten geeignet ist. In der Regel werden die Ergebnisse besser, je spezifischer und relevanter der Kontext für die Aufgabe ist.

Präzision

Je genauer und detaillierter die Aufforderung ist, desto besser sind die Ergebnisse. Dies ist besonders wichtig, wenn ein bestimmtes Ergebnis erzielt werden soll. Es gibt keine bestimmten Tokens oder Schlüsselwörter, die zu besseren Ergebnissen führen. Vielmehr kommt es auf ein gutes Format und eine aussagekräftige Aufforderung an. Eine Angabe von Beispielen in der Aufforderung ist sehr effektiv, um die gewünschte Ausgabe in bestimmten Formaten zu erhalten.

Beispiel:

Ein Bild

Chat-GPT hat hier das korrekte Format aus dem Beispiel übernommen. Sowohl Semikolon als auch das Komma für das Zahlenformat wurden in die Liste übernommen.

Prompt Länge

Bei der Gestaltung von Prompts sollte auch die Länge des Prompts berücksichtigt werden, da ein Prompt eine bestimmte Länge nicht überschreiten kann. Die Elemente des Prompts sollten relevant sein und zum besseren Verständnis der gestellten Aufgabe beitragen.

Wenn ein Prompt zu lang ist, kann es schwierig sein, die genaue Bedeutung zu verstehen und den Fokus vom eigentlichen Ziel ablenken. Wenn ein Prompt zu kurz ist, kann es schwierig sein, genügend Kontext bereitzustellen, um die gewünschte Antwort zu generieren. Wenn ein Prompt zu komplex ist, kann das Modell Schwierigkeiten haben, die gewünschte Antwort zu verstehen.

Insgesamt sollte ein Prompt weder zu kurz noch zu lang sein und spezifisch, klar, präzise und leicht lesbar sein, um die gewünschte Aktion des Modells zu erreichen.

Ungenauigkeit vermeiden

Beim Schreiben von Prompts kann man leicht in die Falle tappen, dass eine zu ungenaue Beschreibung erstellt wird. Besser ist es, spezifisch und direkt zu sein. Je direkter die Anweisung, desto effektiver kommt die Botschaft an.

Beispiel:

Ein Bild

Ein Bild

Die beiden obigen Beispiele verdeutlichen, wie die Ausgabe von Chat-GPT durch hinzufügen von einfachen direkten Anweisungen steuern kann. Der Prompt „Wie kocht man Nudeln?“ ist natürlich korrekt beantwortet aber für die Erledigung der Aufgabe zu umfangreich und detailliert. Mit dem Prompt „Wie kocht man Nudeln. In 2 einfachen Sätzen.“ kann die Antwort auf 2 Sätze beschränkt werden.

Basic Prompting

Oft lernt man Konzepte am besten, indem man sich Beispiele anschaut. Hier werden einige Beispiele, gut formulierter Prompts für unterschiedliche Aufgaben erklärt.

Textzusammenfassung

Eine der Standardaufgaben von LLMs ist die Textzusammenfassung. Eine der beeindruckendsten Anwendungen von Sprachmodellen ist die Fähigkeit, Artikel und Konzepte in leicht lesbaren Texten zusammenzufassen.

Beispiel:

Schreibe eine Zusammenfassung des folgenden Textes über 10 Sätze.
Die moderne Quantenmechanik fand ihren Beginn im Jahr 1925 mit der Formulierung der Matrizenmechanik durch Werner Heisenberg, Max Born und Pascual Jordan.[7][8][9] Wenige Monate später entwickelte Erwin Schrödinger über einen völlig anderen Ansatz – ausgehend von De Broglies Theorie der Materiewellen – die Wellenmechanik und die Schrödingergleichung.[10] Kurz darauf konnte Schrödinger nachweisen, dass sein Ansatz der Matrizenmechanik äquivalent ist.[11] Die neuen Ansätze von Schrödinger und Heisenberg enthalten eine neue Sicht auf beobachtbare physikalische Größen, sogenannte Observable. Diese waren zuvor als Größen betrachtet worden, die in jedem Zustand eines Systems bestimmte Zahlenwerte besitzen, wie zum Beispiel (für ein Teilchen in einer Dimension) der jeweilige Ort oder Impuls. Dagegen versuchten Heisenberg und Schrödinger den Observablenbegriff derart zu erweitern, dass er mit der Beugung am Doppelspalt verträglich würde. Wird dabei nämlich für jedes Teilchen durch eine zusätzliche Messung festgestellt, durch welchen der Spalte es fliegt, erhält man kein Doppelspaltinterferenzmuster, sondern zwei Einzelspaltmuster. Am Ende dieser Messung ist also der Zustand des beobachteten Teilchens ein anderer als vorher. Observable werden daher formal als Funktionen aufgefasst, die einen Zustand in einen anderen Zustand überführen. Des Weiteren muss jedes Teilchen „irgendwie“ durch beide Spalte fliegen, damit man überhaupt ein Interferenzmuster erklären kann. Dem Zustand jedes einzelnen (!) Teilchens während des Fluges muss man also beide Möglichkeiten zuschreiben, wobei sich bei Beobachtung genau eine realisiert. Das hatte zur Folge, dass der Zustand eines Teilchens nicht mehr durch eindeutige Größenwerte wie Ort und Impuls bestimmt sein kann, sondern von den Observablen und ihren Größenwerten getrennt werden muss. Bei einem Messprozess wird der Zustand in einen der sogenannten Eigenzustände der Observablen umgewandelt, dem nun ein eindeutiger reeller Messwert zugeordnet ist. Dieses Konzept des quantenmechanischen Zustandes ist also mit dem Konzept der (mathematisch genauen) Bahnkurve in der älteren Quantentheorie nicht vereinbar. Mathematisch wird ein quantenmechanischer Zustand durch eine Wellenfunktion oder (weniger anschaulich) durch einen Zustandsvektor wiedergegeben. Eine Folge dieses neuartigen Observablenbegriffs ist, dass es formal nicht möglich ist, zwei beliebige Observable ohne Angabe einer Reihenfolge auf einen Zustand wirken zu lassen. Wenn es bei zwei Messprozessen auf ihre Reihenfolge nicht ankommt (z. B. Messung von x- und y-Koordinate), heißen sie vertauschbar. Andernfalls (z. B. Messung von x-Koordinate und x-Impuls) muss ihre Reihenfolge festgelegt werden, und in genau diesen Fällen verändert die zweite Messung den durch die erste Messung erzeugten Zustand ein weiteres Mal. Daher würde auch eine anschließende Wiederholung der ersten Messung nun ein anderes Ergebnis haben. Es ist also möglich, dass zwei Observable, wenn sie in unterschiedlicher Reihenfolge auf einen Zustand wirken, unterschiedliche Endzustände liefern können. Wenn bei zwei Observablen die Reihenfolge der Messung entscheidend ist, weil die Endzustände sonst verschieden sind, führt dies zu einer sogenannten Unschärferelation. Für Ort und Impuls wurde diese erstmals von Heisenberg im Jahr 1927 beschrieben. Diese Relationen versuchen, die Streuung der Messwerte bei Vertauschen der Observablen, und damit die Unterschiedlichkeit der Endzustände quantitativ zu beschreiben. 1927 wurde die Kopenhagener Interpretation von Bohr und Heisenberg formuliert, die auch als orthodoxe Interpretation der Quantenmechanik bezeichnet wird. Sie stützte sich auf den Vorschlag von Max Born, das Betragsquadrat der Wellenfunktion, die den Zustand eines Systems beschreibt, als Wahrscheinlichkeitsdichte aufzufassen. Die Kopenhagener Deutung ist bis heute die Interpretation der Quantenmechanik, die von den meisten Physikern vertreten wird, obwohl es inzwischen zahlreiche andere Interpretationen gibt. In den Jahren ab ca. 1927 vereinigte Paul Dirac die Quantenmechanik mit der speziellen Relativitätstheorie. Er führte auch erstmals die Verwendung der Operator-Theorie inklusive der Bra-Ket-Notation ein und beschrieb diesen mathematischen Kalkül 1930 in einer Monografie.[12] Zur gleichen Zeit formulierte John von Neumann die strenge mathematische Basis für die Quantenmechanik, wie z. B. die Theorie linearer Operatoren auf Hilberträumen, die er 1932 in einer Monografie beschrieb.[13] Die Verwendung des Ausdrucks Quantenphysik ist erstmals 1929 in Max Plancks Vortrag Das Weltbild der neuen Physik dokumentiert.[14] Die in dieser Aufbauphase formulierten Ergebnisse haben bis heute Bestand und werden allgemein zur Beschreibung quantenmechanischer Aufgabenstellungen verwendet.

ChatGPT fasst den Text dann wie folgt zusammen.

Die moderne Quantenmechanik begann im Jahr 1925 mit der Entwicklung der Matrizenmechanik durch Werner Heisenberg, Max Born und Pascual Jordan sowie der Wellenmechanik und der Schrödingergleichung durch Erwin Schrödinger. Die neuen Ansätze führten zu einem erweiterten Verständnis der Observable, welche nun formal als Funktionen aufgefasst werden, die einen Zustand in einen anderen Zustand überführen. Jedes Teilchen muss während des Fluges durch beide Spalte fliegen, damit ein Interferenzmuster erklärt werden kann. Dem Zustand jedes Teilchens während des Fluges muss man beide Möglichkeiten zuschreiben, wobei sich bei Beobachtung genau eine realisiert. Ein quantenmechanischer Zustand wird durch eine Wellenfunktion oder einen Zustandsvektor wiedergegeben. Eine Folge dieses neuartigen Observablenbegriffs ist, dass es formal nicht möglich ist, zwei beliebige Observable ohne Angabe einer Reihenfolge auf einen Zustand wirken zu lassen. Wenn es bei zwei Messprozessen auf ihre Reihenfolge nicht ankommt, heißen sie vertauschbar. Andernfalls verändert die zweite Messung den durch die erste Messung erzeugten Zustand ein weiteres Mal. Die Kopenhagener Interpretation von Bohr und Heisenberg aus dem Jahr 1927 ist bis heute die am meisten vertretene Interpretation der Quantenmechanik, obwohl es zahlreiche andere Interpretationen gibt. In den Jahren ab ca. 1927 vereinigte Paul Dirac die Quantenmechanik mit der speziellen Relativitätstheorie und führte die Operator-Theorie inklusive der Bra-Ket-Notation ein.

Der Text über Quantenmechanik wurde von https://de.wikipedia.org/wiki/Quantenphysik kopiert.

Chat-GPT hat den Text in einfachen kurzen Sätzen zusammengefasst und die wesentlichen Aspekte in exakt 10 Sätzen wiedergegeben.

Beantwortung von Fragen

Eine der besten Möglichkeiten, das Modell dazu zu bringen, mit einer Antwort zu reagieren, besteht darin, eine Frage zu stellen. Auch bei der Beantwortung von Fragen sind der Prompt Anweisung, Kontext, Input- und Output-Indikatoren hinzuzufügen. Die Komponenten sind zwar nicht immer zwingend erforderlich, aber es ist eine gute Praxis möglichst spezifische Anweisungen zu schreiben.

Beispiel:

Ein Bild

Hier ist Chat-GPT davon ausgegangen, dass ich mit Bank das Geldinstitut meine. Mit etwas mehr Kontext kann Chat-GPT die erwartete Antwort erzeugen.

Ein Bild

Der Kontext „Park“ hat hier den entscheidenden Unterschied gemacht. Chat-GPT hat auf den Kontext „Park“ reagiert und statt einer Beschreibung des Geldinstituts eine Beschreibung der Sitzgelegenheit erstellt.

Text-Klassifizierung

Die Text-Klassifizierung ist ein Verfahren zur Einteilung (Klassierung) von Texten oder Begriffen in Klassen. Bei der Text-Klassifizierung muss der Prompt die Anweisung zur Klassifizierung enthalten, die möglichen Klassen und den zu klassifizierenden Text oder die Begriffe.

Beispiel:

Ein Bild

Chat-GPT hat erfolgreich die Begriffe „Python, C#, Deutschland, Niederlande, Australien, Indonesien, Elefant, Meise, JavaScript, Java, Katze, Ameise, Spinne“ in die Klassen „Land, Programmiersprache, Tier“ eingeordnet. Dabei hat Chat-GPT den Begriff „Python“ in die Klasse der Programmiersprachen eingeordnet und nicht in die Klasse der Tiere. Das ist korrekt, da Python eine Programmiersprache ist, aber eine Python ist auch ein Tier.

Hier kann man Chat-GPT etwas auf die Sprünge helfen, indem man noch einmal genauer nachfragt.

Ein Bild

Chat-GPT hat den Hinweis aufgenommen und die korrekte Schlussfolgerung daraus gezogen.

Es ist auch möglich ganze Texte zu klassifizieren. Auch hier muss die Aufgabe, der Input und die möglichen Klassen im Prompt enthalten sein:

Um einen Text zu klassifizieren kann man wie folgt vorgehen:

Ein Bild

Das entspricht auch den 5-Sternen, die der Kunde in der Amazon Produktbewertung vergeben hat. Mit Hilfe der Text-Kategorisierung kann man z.B. auch Fakten von Fiktionen zu trennen.

Beispiel:

Ein Bild

Es wurden alle Fakten mit „Wahr“ und alle Fiktionen mit „Falsch“ gekennzeichnet. Gelegentlich gibt Chat-GPT noch ein paar Zusatzinformationen aus.

Unterhaltung

Chat-GPT ist auch in der Lage eine Unterhaltung zu führen. Dies ist besonders nützlich für die Entwicklung von Chatbot für den Kundenservice.

Im folgenden Beispiel wird Chat-GPT dazu verwendet, technische und wissenschaftliche Antworten auf Fragen zu geben. Um das zu erreichen, wird in der Anweisung mit Hilfe eine Rollenanweisung ausdrücklich darauf hingewiesen, wie es sich verhalten soll.

Ein Bild

Chat-GPT geht auf die Unterhaltung ein und fragt nach weiteren Details um die gestellte Aufgabe zu meistern. Dabei wird ein persönlicher Ton verwendet und der Mensch mit „Du“ angesprochen. In der weiteren Unterhaltung werden dann weitere Details abgefragt, bis Chat-GTP die Aufgabe erfüllen kann.

Ein Bild

Der Plan funktioniert. Weniger Kalorien aufzunehmen als zu verbrennen, führt zu Gewichtsverlust. Auch die Aussage, dass ich 6-Mal pro Woche trainiere, hat Chat-GPT aufgenommen und einen entsprechenden Plan erstellt, der Krafttraining und Cardo kombiniert.

Programmieren

Chat-GPT hat die Fähigkeit, Programmiersprachen zu verstehen und kann dabei helfen, Programmcode zu schreiben, zu testen, zu analysieren, zu optimieren, Sicherheitsprobleme aufzudecken und Programmcode in andere Programmiersprachen zu übersetzen. Mit einfachen Prompts kann man schnell und effektiv Code generieren und Testfälle erstellen. Auch komplexe Testautomatisierung und Optimierung sind möglich. GitHub Copilot X ist ein hervorragendes Beispiel dafür.

Code schreiben

Um mit Chat-GPT Programmcode zu schreiben, muss ein Prompt in natürlicher Sprache so präzise wie möglich formuliert werden. Um von Chat-GPT eine Funktion schreiben zu lassen, muss der Prompt den Namen der Funktion, die Parameter, eine Beschreibung, ihre Verwendung und die Programmiersprache enthalten. Zusätzlich können noch verwendete Bibliotheken und Schnittstellen festgelegt werden.

Es ist wichtig zu beachten, dass Chat-GPT nicht immer den gewünschten Code generiert oder den Code möglicherweise nicht optimal schreibt. Daher muss der generierte Code sorgfältig überprüft werden, um sicherzustellen, dass er den Anforderungen entspricht.

Ein Beispiel für die Anweisung an Chat-GPT, eine Funktion zu schreiben, könnte lauten:

Schreibe einen HTTP-Server, der auf einen HTTP Request mit dem Response "Hello Word" antwortet in der Programmiersprache Java für Java 11.

Die Antwort lautet wie folgt:

Gerne! Hier ist ein Beispielprogramm in Java 11, das einen HTTP-Server startet und auf einen HTTP-Request mit dem Response "Hello World" antwortet:

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import com.sun.net.httpserver.HttpServer;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
public class HttpServerExample
{
    public static void main(String[] args) throws IOException {
        int serverPort = 8000;
        HttpServer server = HttpServer.create(new InetSocketAddress(serverPort), 0);
        server.createContext("/", new HttpHandler() {
            @Override
            public void handle(HttpExchange exchange) throws IOException {
                String response = "Hello World";
                exchange.sendResponseHeaders(200, response.length());
                OutputStream os = exchange.getResponseBody();
                os.write(response.getBytes());
                os.close();
            }
        });
        server.setExecutor(null);
        server.start();
        System.out.println("Server started on port " + serverPort);
    }
}

Dieses Programm verwendet die com.sun.net.httpserver-API von Java, um einen HTTP-Server zu starten. Die create-Methode des HttpServer-Objekts erstellt einen neuen HTTP-Server an der angegebenen Adresse und Port-Nummer. Die createContext-Methode des Servers erstellt einen Kontext, der die URL-Muster enthält, auf die der Server hören soll, und einen Handler, der ausgeführt wird, wenn eine Anforderung auf dieses Muster trifft. In diesem Fall hört der Server auf den Stammkontext / und der Handler sendet einfach die Antwort "Hello World" zurück. Der setExecutor(null)-Aufruf stellt sicher, dass der Server alle Anfragen im Hauptthread des Programms verarbeitet, was für dieses einfache Beispiel ausreichend ist. Schließlich wird der Server mit der start-Methode gestartet und eine Meldung wird auf der Konsole ausgegeben, um anzuzeigen, dass der Server gestartet wurde.

Wie erwartet läuft nun ein HTTP-Server auf Port 8000 der bei einem Aufruf von http://localhost:8000/ mit „Hello World“ antwortet und nur Java 11 kompatiblem Java-Code erstellt.

Das Programmieren ist der Fähigkeiten von Chat-GPT mit einem enormen Potential, aber es stößt auch schnell an seine Grenzen, da es sich um ein Sprachmodell handelt, dass keine echten Kenntnisse über die Funktionsweise von Software-Tools, Frameworks und Programmiersprachen besitzt, nicht debuggen kann, um evtl. vorhandene Fehler in Code zu identifizieren und keinen Compiler hat, um dem Code zu übersetzen, um zu überprüfen, ob der erstellte Programmcode überhaupt kompilierbar ist.

Testen

Wenn man mit Chat-GPT Code testen möchte, gibt es folgende Dinge zu beachten:

  • Dokumentation und Lesbarkeit
    Chat-GPT kann Code der gut kommentiert und leicht zu lesen ist deutlich besser testen, da Chat-GPT den Code besser verstehen und den Test effektiver durchführen kann.

  • Klare Anweisungen
    Es ist wichtig, Chat-GPT klare Anweisungen darüber zu geben, wie der Code getestet werden soll. Gibt es eine spezielle Eingabe, die getestet werden soll, muss diese Eingabe im Prompt angegeben werden.

  • Einfaches Testbeispiel
    Damit Chat-GPT leicht bestimmen kann, ob der Code korrekt funktioniert, ist es hilfreich, ein bekanntes Testbeispiel zu verwenden, das leicht zu verstehen und zu überprüfen ist. Auf diese Weise wird es für Chat-GPT einfacher, den Test durchzuführen

  • Feedback
    Wenn man Feedback von Chat-GPT zu dem Code erhalten möchte, kann man Chat-GPT dazu auffordern Feedback zu geben oder eine konkrete Detailfragen stellen, die im Feedback abdecken werden soll.

Durch die Berücksichtigung dieser Punkte kann man sicherstellen, dass Chat-GPT den Programmcode effektiv testet und gezieltes Feedback liefert. Man sollte aber immer beachten, dass Chat-GPT möglicherweise nicht in der Lage ist, komplexe Codestrukturen oder Algorithmen zu testen.

Hier ein paar Beispiele:

Ein Bild

Beispiel: Überprüfung von JavaScript Code, der eine Liste filtert und sortiert.

Ein Bild

Beispiel: Überprüfung von QueryDSL Code (Java) um ein Contact Objekt aus der Datenbank zu laden, dass mit dem Provider verknüpft ist.

Optimieren

Chat-GPT kann dabei helfen vorhandenen Code zu optimieren, indem es Tipps und Ratschläge gibt, wie der Code optimiert werden könnte.

Hier einige Möglichkeiten, wie man Chat-GPT nutzen kann, um Programmcode zu optimieren:

  • Fragen Stellen
    Man kann Chat-GPT einfache Fragen stellen, um zu erfahren, wie bestimmte Teile des Codes verbessert werden können.

    Beispiele:
    "Wie kann ich die Laufzeit meines Codes reduzieren?"
    "Wie kann ich meinen Code modularer gestalten?"

  • Nach Feedback und Vorschlägen fragen
    Wie schon beim Testen, kann man Chat-GPT um Feedback oder Vorschläge für Verbesserungen bitten. Chat-GPT wird dann Hinweise dazu geben, ob der Code optimiert werden kann und welche Änderungen vorgenommen werden können.

Analysieren

Es ist möglich, Chat-GPT einen Programmcode zur Analyse vorzulegen. Chat-GPT wird versuchen den Code zu lesen und die Bedeutung des Codes zu erklären, einschließlich Syntax, Funktionen, Variablen und Kontrollstrukturen.

Das Folgende Beispiel zeigt sehr anschaulich, wie gut Chat-GPT Programmcode verstehen kann oder hätten sie gewusst, was bei der Addition von 2 JavaScript Arrays in der Form [1, 2, 3] + [4, 5, 6] herauskommt? Chat-GPT weiß es.

images/image28

Dieses Beispiel ist aus dem Github Repository „What the f*ck JavaScript?“ dass unter https://github.com/denysdovhan/wtfjs zu finden ist und eine umfangreiche Liste von unerwartetem JavaScript Verhaltensweisen enthält. Sehr unterhaltsam aber auch irritierend …..

Dokumentieren

Wie schon in den obigen Beispielen gezeigt, ist Chat-GTP sehr gut darin, Code zu dokumentieren. Die Dokumentation ist immer sehr ausführlich und in den oben gezeigten Beispielen auch immer korrekt. Einzig die Klassifikation von kurzen Programmcode Elementen ist noch schlecht. So wird der Code aus dem Beispiel als CSS bzw. arduino klassifiziert, obwohl es sich in beiden Fällen um JavaScript handelt.

Ein Bild

Ein Bild

Sicherheitsprobleme aufdecken

Chat-GPT kann auch Sicherheitslücken in Programmcode erkennen bzw. beseitigen. Darüber hinaus kann Chat-GPT auch als eine Informationsquelle für Programmierer dienen, indem es dabei hilft, Kenntnisse in Sicherheit und Best Practices zu erweitern. Chat-GPT kann z.B. verschiedene Arten von Sicherheitslücken erklären. Darunter unter anderem SQL-Injection, Cross-Site-Scripting (XSS), Cross-Site-Request-Forgery (CSRF) und mehr. Es kann auch Programmierern dabei helfen, Best Practices zu erlernen, um solche Sicherheitslücken in ihrem Code zu vermeiden.

Im Folgende Beispiel hat Chat-GPT die Sicherheitslücke korrekt identifiziert und einen Lösungsvorschlag gemacht.

Ein Bild

Auch im folgenden einfachen Beispiel wird der offensichtliche Fehler sofort erkannt.

Ein Bild

Das folgende Beispiel zeugt, wie Chat-GPT anhand eines einfachen Beispiels CORS erklärt.

Ein Bild

Hinweis: Ob es eine gute Idee ist sich eine Sicherheitslücke von Chat-GPT erklären zu lassen ist fraglich. Vor allem weil das Ergebnis von einem Experten überprüft werden muss, der eigentlich keine Erklärung benötigt und auf bessere Quellen (z.B. https://owasp.org/) zugreifen kenn.

Code übersetzen

Chat-GPT kann auch Programmcode von einer Programmiersprache in eine andere übersetzen. Jedoch ist es wichtig zu beachten, dass Chat-GPT kein Compiler ist und keine spezifischen Kenntnisse über bestimmte Programmiersprachen, Frameworks oder deren Eigenschaften hat. Daher ist nicht sichergestellt, dass eine fehlerfreie bzw. effiziente Übersetzung erzielt wird.

Hier ein paar Beispiele:

Ein Bild

Ein Bild

Beim Übersetzen von Code hat Chat-GPT noch so seine Probleme. Sowohl Formatierung als auch die Qualität des Codes lässt beim Übersetzen von Programmcode häufig zu wünschen übrig. Trotzdem ist es eine Möglichkeit, beim Übersetzen von Code in eine andere Programmiersprache erst mal einen Ansatz zu haben, auf dem man dann aufbauen kann.

Softwarearchitektur erstellen

Fortgeschrittenes Prompting

Fortgeschrittenes Prompting zielt darauf ab, spezifischere bzw. genauere Antworten zu aus dem Sprachmodell zu erzeugen. Fortgeschrittenes Prompting ist ein leistungsfähiges Instrument zur Verbesserung der Genauigkeit und Effizienz und zur Anpassung der Antworten an bestimmte Aufgaben oder Anwendungen.

Einige potenzielle Vorteile von „Fortgeschrittenen Prompting“:

  • Verbesserte Genauigkeit
    Durch spezifischere Anweisungen oder Kontext, kann das Modell genauere und relevantere Antworten erzeugen.

  • Anpassungsfähigkeit
    Feinabstimmung eines Sprachmodells, um Antworten zu generieren, die einem bestimmten Stil oder Tonfall entsprechen, spezifisches Vokabular und Wissen einbeziehen oder für einen bestimmten Themenbereich bzw. Anwendungsfall relevant sind.

  • Effizienz
    Reduktion der Iterationen, um eine korrekte Antwort zu generieren.

Zero-Shot Prompting

Ein Zero-Shot-Prompt ist ein einfacher Prompt, wie in den vorherigen Kapiteln schon häufig gesehen. Der Begriff Zero-Shot-Prompting wird auch oft verwendet, wenn im Prompt keine Beispiele angegeben werden. Ein typisches Beispiel für einen Zero-Shot-Prompt bei einer Frage-Antwort-Aufgabe wäre "Wer hat die Bibel geschrieben?“

Ein Bild

In dem obigen Beispiel ist ein Zero-Shot-Prompt ausreichend, um die Frage zu beantworten.

Wenn Zero-Shot nicht funktioniert, empfiehlt es sich, in der Eingabeaufforderung Demonstrationen oder Beispiele zu geben, was zu Few -Shot-Prompting führt.

Few-Shot Prompting

Few-Shot Prompting bezieht sich auf eine Technik, bei der im Prompt ein oder mehrere (wenige) Beispiele angegeben werden, um eine bestimmte Aufgabe zu erfüllen. Few-Shot-Prompts sind sehr effektiv, um eine Aufgabe mit wenigen Eingaben zu erledigen da nur wenige Beispiele benötigt werden, die leicht angepasst werden können.

Mit dem Few-Shot Prompting kann das Modell auf eine Aufgabe feinabgestimmt werden, um die gewünschten Ergebnisse zu erzielen. Dies ermöglicht es Prompt-Engineers, schneller und effizienter zu arbeiten, da sie nicht jedes Mal von Grund auf eine neue Prompt-Strategie entwickeln müssen.

Ein Prompt-Engineer kann Few-Shot Prompting nutzen, um eine neue Aufgabe zu lösen, indem er nur wenige Beispiele oder eine kurze Anleitung als Eingabe bereitstellt. Das Modell nutzt dann sein Verständnis der Sprache, um die erforderlichen Informationen zu extrahieren und eine Antwort oder Lösung zu generieren. Few-Shot Prompting ist eine vielversprechende Technik, die das Potenzial hat, den Prozess der Prompt-Erstellung signifikant zu beschleunigen und zu vereinfachen.

Few-Shot Prompting Beispiel:

Ein "Etwas" ist ein tragbares elektronisches Gerät, das es seinen Benutzern ermöglicht, Anrufe zu tätigen und entgegenzunehmen, Textnachrichten zu senden und zu empfangen, im Internet zu surfen, Musik zu hören, Videos anzusehen und viele andere Funktionen auszuführen.

Dies ist ein Beispiel Satz, in dem das Wort "Etwas" verwendet wird.

Ich war in der S-Bahn unterwegs und alle Menschen um mich herum hatten ihr "Etwas" in der Hand.

Ein "Salto" zu machen bedeutet, eine akrobatische Bewegung auszuführen, bei der man sich in der Luft um die eigene Körperachse dreht und anschließend wieder auf den Boden landet.

Ein Beispiel für einen Satz, in dem das Wort "Salto" verwendet wird, ist:

Ein Bild

Chat-GPT versucht nun einen Satz zu erstellen, der dem Satz „Ich war in der S-Bahn unterwegs und alle Menschen um mich herum hatten ihr ‚Etwas‘ in der Hand.“ Entspricht und inhaltlich zum Salto passt. Anhand des einen Beispiels könnte Chat-GPT nun einen ‚ähnlichen‘ Satz erstellen, der Inhaltlich und thematisch von dem ursprünglichen Beispiel abweicht.

Die Turnerin führte einen perfekten Salto aus und erhielt dafür die höchste Punktzahl.

Ein anderes Beispiel für Few-Shot Prompting ist:

Vervollständige den Satz "Zucker macht Menschen " in der Form wie die folgenden Beispiele: Geld macht Menschen nicht glücklich.
Wald macht Menschen gesund.
Sport macht Menschen schlau.

Ein Bild

In dem Beispiel enthält Chat-GPT 3 Beispiele, um das Modell auf die Aufgabe vorzubereiten und die Aufgabe, den Satz „Zucker macht Menschen …“, zu vervollständigen. Die Reihenfolge spielt hier keine große Rolle. Chat-GPT erkennt die Aufgabe und übernimmt die Form aus den Beispielen.

Ob Zucker süchtig macht, ist umstritten und hier auch nicht relevant.

Zitat: „Mit dem Begriff Sucht im Zusammenhang mit Nahrungsaufnahme sollte vorsichtig umgegangen werden, da wir über diese Phänomene beim Essen noch nicht genug wissen. Und Essen ist im Gegensatz zu Alkohol oder Drogen für unser Überleben notwendig.“
https://www.ugb.de/ernaehrungsberatung/zuckersucht/

Mit dem „Regenerate Response“ Button kann man Chat-GPT um eine andere Antwort bitten. Auf den obigen Prompt bekommt man von Chat-GPT noch folgende andere Antworten.

  • Zucker macht Menschen krank.

  • Zucker macht Menschen dick und kann ihre Gesundheit beeinträchtigen.

Mit Hilfe von Few-Shot Prompting kann man das Verhalten der KI sehr stark beeinflussen. Folgendes Beispiel zeigt, das anhand einer Math-Aufgabe, die Chat-GPT ohne die 3 Beispiele ganz anders gelöst hat.

Prompt ohne Beispiele:

Ein Bild

Ganz klar. 8 + 8 ist 16. Chat-GPT hat die Aufgabe wie erwartet gelöst.

Nun noch einmal die gleiche Aufgabe mit ein paar Beispielen, anhand derer Chat-GPT eine andere Berechnung des Ergebnisses veranlassen sollte.

Ein Bild

Chat-GPT hat die 3 Beispiele analysiert, das Muster darin erkannt und die Lösung „8 + 8 = 18“ gefunden. So kann mit Hilfe von Beispielen das Verhalten der KI an die gestellt Aufgabe angepasst werden. Das ist sehr hilfreich, wenn der Kontext nicht offensichtlich ist und es einfacher ist ein paar Beispiele zu geben als den Kontext aufwändig zu erklären.

Es ist auch möglich, Chat-GPT einen Few-Shot-Input zu geben, da Chat-GPT den Hinweis „Few-Shot-Input“ versteht und die Eingaben entsprechend verarbeiten kann.

Hier ein Beispiel:

Prompt:

Schreibe eine kurze Geschichte über eine Person, die unerwartet Superkräfte bekommt.

Few-shot Input: Der Name der Person ist Alex und er ist ein durchschnittlicher Büroangestellter. Eines Tages, als er auf dem Heimweg von der Arbeit ist, wird er von einem Meteoriten getroffen.

Ausgabe:

Alex war ein durchschnittlicher Büroangestellter, der Tag für Tag seine Routine im Büro absolvierte. Eines Tages war er auf dem Heimweg von der Arbeit, als er einen seltsamen leuchtenden Gegenstand am Himmel sah. Es war ein Meteorit! Bevor er reagieren konnte, wurde er von dem Meteorit getroffen und fiel zu Boden.

Als er aufwachte, bemerkte er, dass sich etwas verändert hatte. Er fühlte sich stärker und schneller als je zuvor. Er konnte plötzlich enorme Gewichte heben und unglaublich schnell laufen. Verwirrt und verängstigt von seiner neuen Stärke, beschloss Alex, seine Fähigkeiten zu testen.

Er sprintete durch die Straßen seiner Stadt und sprang mühelos über Gebäude. Er konnte durch Wände brechen und seine Hände in Flammen setzen. Alex hatte Superkräfte!

Am Anfang war er überwältigt von seiner neuen Kraft und hatte Angst, was die Menschen in seiner Umgebung denken würden. Aber dann erkannte er, dass er seine Fähigkeiten für das Gute einsetzen konnte. Er beschloss, seine Stadt vor Kriminalität und Unheil zu schützen.

Mit seinen neuen Kräften verhinderte Alex Raubüberfälle und half Menschen in Not. Er wurde schnell zu einem Helden in seiner Stadt und genoss das Gefühl, anderen helfen zu können. Alex hatte endlich einen Sinn in seinem Leben gefunden.

In den folgenden Wochen und Monaten entwickelte Alex seine Fähigkeiten weiter und erkannte, dass er noch viel mehr erreichen konnte. Er entschied sich, seine Kräfte zu nutzen, um gegen das Böse in der Welt anzukämpfen.

Und so wurde Alex zu einem der mächtigsten Superhelden der Welt. Aber er erinnerte sich immer daran, dass seine Kräfte ihm gegeben wurden, um anderen zu helfen und die Welt zu einem besseren Ort zu machen.

Mit diesem Few-Shot-Input wurde das Modell für die Aufgabe feinabgestimmt und der Geschichte eine bestimmte Richtung gegeben.

Few-Shot-Prompting kann auch gut für Programmieraufgaben genutzt werden. Z.B. um ein SQL-Statement zu erstellen, das Daten aus einer (unbekannten) Datenstruktur selektiert. In den Few-Shot Inputs kann man die nötigen Tabellen anreißen und dann eine konkrete Frage zu den benötigten Daten stellen.

Beispiel Prompt:

Q: Selektiere alle Produkte
A: SELECT id, product_code, product_name, description, list_price FROM
`products`;
###
Q: Selektiere alle Kunden
A: SELECT id, company, last_name, first_name, email_address, address,
city, state_province, zip_postal_code FROM `customers`;
###
Q: Selektiere alle Aufträge
A: SELECT id, customer_id, order_date, ship_address, ship_city,
ship_zip_postal_code, ship_country_region FROM `orders`;
###
Q: Selektiere alle Auftragspositionen
A: SELECT id, order_id, product_id, quantity FROM `order_details`;
###
Q: Selektiere die Auftragspositionen aller Kunden der Company "Company
D"
A:

Antwort:

SELECT od.id, od.order_id, od.product_id, od.quantity +
FROM order_details AS od +
JOIN orders AS o ON od.order_id = o.id +
JOIN customers AS c ON o.customer_id = c.id +
WHERE c.company = 'Company D';

Chat-GPT hat hier die gewünschten Spalten der Auftragspositionen selektiert, die beiden JOINs identifiziert um von der Tabelle Customer über Orders auf Order_Details zu kommen und den Namen der Company in die WHERE Klausel übernommen. Das Ergebnis entspricht dem erwarteten Ergebnis.

Ergebnis der SQL-Abfrage

Insgesamt scheint es, dass die Bereitstellung von Beispielen für die Lösung einiger Aufgaben nützlich ist und Chat-GPT aus den Beispielen ein Muster ableiten kann, mit deren Hilfe dann eine Lösung gefunden werden kann.

Hinweis: Dieser Prompt kann auch schon in die Kategorie „Chain-of-Thought“ fallen. Die Grenzen sind fließend und es gibt keine klare Abgrenzung.

Grenzen des Few-Shot Prompting

Few-Shot Prompting funktioniert bei vielen Aufgaben gut, ist aber dennoch keine perfekte Technik, insbesondere wenn es um komplexere Denkaufgaben geht. Wenn Zero-Shot Prompting und Few-Shot Prompting nicht ausreichen, könnte es bedeuten, dass das Modell nicht genug Daten hat, um die Aufgabe korrekt zu lösen. Bei komplexen Zusammenhängen scheint es so, als ob die Aufforderung mit wenigen Worten nicht ausreichend sind, um zuverlässige Antworten zu erhalten. In dem Fall sollte man den Prompt einer näheren Betrachtung unterziehen und überarbeiten.

Mögliche Verbesserungen eines Few-Shot Prompts:

  • Weitere Shots ergänzen

  • Problem in einzelne Schritte zerlegen.

An dieser Stelle ist es ratsam, über die Feinabstimmung des Modells nachzudenken oder mit fortgeschritteneren Prompting-Techniken zu experimentieren.

Chain-of-Thought (Gedankenkette) Prompting

Das Chain-of-Thought-Prompting wurde erstmals vom Google Research, Brain Team im Januar 2022 in dem Paper Chain-of-Thought Prompting Elicits Reasoning in Large Language Models vorgestellt und liegt aktuell in der Version 6 (10 Jan. 2023) vor.

Die Experimente in dem vorliegenden Paper zeigen, dass die Aufforderung, eine Gedankenkette aufzubauen, die Leistung bei verschiedenen arithmetischen Aufgaben, Aufgaben des gesunden Menschenverstands und Aufgaben des symbolischen Denkens wesentlich verbessern kann.

Es geht darum, beim Lösen einer Denkaufgaben den eigenen Denkprozess zu berücksichtigen. Löst man z. B. ein mehrstufiges mathematischen Problem, ist typisch, das Problem in Zwischenschritte zu zerlegen und jeden Schritt zu lösen bevor man die endgültige Antwort gibt. Diese Gedankenkette kommt oft bei Logik-Rätseln zum Einsatz. Hier ein paar Beispiele.

Beispiel 1:

Ein Bild

Beispiel 2:

Ein Bild

In den Beispielen wird mit Hilfe einer Gedankenkette ein Lösungsweg vorgegeben. Dieser kann von Chat-GPT analysiert werden. Mit Hilfe des Lösungswegs kann dann die Lösung ermittelt werden.

Die Chain-of-Thought Prompting Methode hat in dem Paper Chain-of-Thought Prompting Elicits Reasoning in Large Language Models besonders gute Ergebnisse bei qualitativ hochwertigen, sprachlich vielfältige Mathe-Wortaufgaben für die Grundschule funktioniert. Bei den Performance Tests konnte die Lösungsquote bei Verwendung der GSM8K ca. Datensatzes verdoppelt werden. Andere Datensätze (SVAMP, MAWPS) haben im GPT-3 Modell keine so deutlichen Unterschiede gezeigt. Aber auch anderen Datensätze wie Sport oder SayCan haben deutliche Verbesserungen mit der CoT Prompting Technik erzielt.

Zero-Shot CoT

Eine Variante des Chain-of-Thought Prompts ist der Zero-Shot CoT die im Wesentlichen darin besteht, der ursprünglichen Aufforderung den Text "Lass uns Schritt für Schritt denken" hinzuzufügen. Diese Technik wurde unter "Large Language Models are Zero-Shot Reasoners" erstmals vorgestellt.

Führt man das Beispiel zum Erzeugen eines SQL Statements (Siehe „Few-Shot-Prompting“) mit der Ergänzung „Lass uns Schritt für Schritt denken“ aus, werden die einzelnen Schritte Lösungsschritte kurz beschrieben und statt einem JOIN Statement wird ein SQL Statement aus Subqueries gebildet.

Ein Bild

Das Ergebnis der Abfrage ist wieder korrekt:

Ein Bild

Generated Knowledge Prompting

Reverse Prompt Engineering

Beim Reverse Prompt Engineering geht es darum, einen Prompt aus einem vorliegenden Text oder Programmcode zu konstruieren. Dabei ist der Ausgangspunkt nicht eine Aufgabe oder ein Problem ist, das gelöst werden soll, sondern der fertige Output bzw. das erwartete Ergebnis.

Durch das Reverse Prompt Engineering wird Modell in die Lage versetzt, selbst der Prompt Engineer zu sein, der die Aufgabe erhält, auf Grundlage des fertigen Outputs ein Prompt zu erzeugen.

Im Gegensatz zur normalen Vorgehensweise, bei der ein Modell mit Eingabedaten gefüttert wird, um eine bestimmte Aufgabe zu erfüllen, wird beim Reverse Prompt Engineering zuerst die gewünschte Ausgabe spezifiziert und dann werden die Eingabedaten ermittelt, die das Modell benötigt, um diese Ausgabe zu erzeugen.

Dieser Ansatz kann besonders nützlich sein, wenn es schwierig ist, eine ausreichende Menge von Trainingsdaten für eine bestimmte Aufgabe zu sammeln oder wenn es schwierig ist, die geeigneten Eingabedaten für ein Problem zu identifizieren. Durch die Verwendung von Reverse Prompt Engineering kann ein Prompt auf der Grundlage von erwarteten Ergebnissen generiert werden.

Das Reverse Prompt Engineering ist ein mehrstufiger Prozess, bei dem man im ersten Schritt Chat-GPT mit einer kurzen Anweisung dazu auffordert, ein Prompt zu erstellen. Diese Anweisung sollte die Aufforderung enthalten, sich in die Lage eines Prompt-Engineer zu versetzen. In dem Fall beginnt der Prompt mit „Verhalte Dich wie ein Prompt Engineer und erstelle mir einen Prompt, der Chat-GPT dazu bringt, …

Beispiel:

Prompt:

Verhalte Dich wie ein Prompt Engineer und erstelle mir einen Prompt, der Chat-GPT dazu bringt, einen Text über eine Maus im Stil "Grzimeks Tierleben" zu schreiben.

Ergebnis:

Okay, ich werde versuchen, einen geeigneten Prompt zu erstellen, der Chat-GPT dazu anregt, einen Text im Stil von "Grzimeks Tierleben" über eine Maus zu schreiben.

"Beschreibe die faszinierende Welt der Maus in all ihrer Pracht und Schönheit. Erwecke das Leben dieser erstaunlichen Kreatur zum Leben, indem du ihre gewohnheitsmäßigen Verhaltensweisen, ihr Aussehen und ihre Umgebung detailliert beschreibst. Schreibe, als ob du einen Eintrag in Grzimeks Tierleben verfasst hättest und lasse uns eintauchen in das Leben der kleinen, aber unglaublich wichtigen Maus."

Die einfache Anweisung einen Prompt zu schreiben hat Chat-GPT übernommen und schon viele Details aus dem beiden Begriffen „Maus“ und „Grzimeks Tierleben“ in dem Prompt übernommen. Durch den bewusst kurz gehaltenen Prompt hat Chat-GPT viel Freiheit bei der Erstellung des Ergebnisses.

Den generierten Prompt kann man nun als Muster verwenden und entsprechend anpassen. Im folgenden Beispiel wurde die Maus gegen eine Pfeffermühle ausgetauscht.

Beschreibe die faszinierende Welt der Pfeffermühlen in all ihrer Pracht und Schönheit. Erwecke das Leben dieser erstaunlichen Kreatur zum Leben, indem du ihre gewohnheitsmäßigen Verhaltensweisen, ihr Aussehen und ihre Umgebung detailliert beschreibst. Schreibe, als ob du einen Eintrag in Grzimeks Tierleben verfasst hättest und lasse uns eintauchen in das Leben der scharfen, aber unglaublich wichtigen Pfeffermühlen

Chat-GPT hat den Stil von Grzimeks Tierleben übernommen und die Pfeffermühle in allen Einzelheiten beschreiben. Dabei aber trotzdem bei der Beschreibung eine Ausdrucksform Gewählt als würde es um ein Tier gehen.

Liebe Leserinnen und Leser,

ich freue mich sehr, Ihnen heute die faszinierende Welt der Pfeffermühlen näherbringen zu dürfen. Pfeffermühlen sind erstaunliche Kreaturen, die für den Geschmack von vielen Speisen verantwortlich sind und somit eine wichtige Rolle in unserer Küche spielen.

Pfeffermühlen gehören zur Familie der Gewürzmühlen und sind meist aus Holz oder Edelstahl gefertigt. Sie sind in verschiedenen Größen und Formen erhältlich und haben einen Deckel, der es ermöglicht, den Pfeffer vor Feuchtigkeit und Luft zu schützen.

Das Aussehen von Pfeffermühlen ist einzigartig. Sie haben eine schlanke Form und sind meistens zylindrisch geformt. Der Griff, mit dem man die Mühle bedient, ist in der Regel rund oder länglich geformt und besteht oft aus Holz. Das Mahlwerk im Inneren der Mühle ist in der Regel aus Keramik oder Edelstahl und wird durch Drehen des Griffs in Bewegung gesetzt.

Pfeffermühlen sind in der Küche unverzichtbar und haben einige gewohnheitsmäßige Verhaltensweisen. Wenn sie beispielsweise lange Zeit nicht verwendet werden, können sie sich verstopfen oder der Pfeffer darin kann verklumpen. Deshalb sollten Pfeffermühlen regelmäßig gereinigt werden, um ein optimales Mahlergebnis zu erzielen. Außerdem ist es wichtig, den Pfeffer in kleinen Mengen in die Mühle zu geben, um eine Überlastung des Mahlwerks zu vermeiden.

Pfeffermühlen leben in der Küche und sind oft in der Nähe von anderen Gewürzmühlen und Küchengeräten zu finden. Sie sind jedoch auch auf Tischen und in Restaurants zu finden und tragen dazu bei, den Geschmack von Speisen zu verbessern.

Insgesamt sind Pfeffermühlen erstaunliche Kreaturen, die für den Geschmack unserer Speisen unverzichtbar sind. Sie haben ein einzigartiges Aussehen und müssen sorgfältig gepflegt werden, um ein optimales Mahlergebnis zu erzielen. Wir sollten uns glücklich schätzen, solch wundervolle Wesen in unserer Küche zu haben.

Auf diese Weise ist es möglich, kreative Texte zu erstellen. Trotz der offensichtlichen Diskrepanz zwischen Grzimeks Tierleben und der Pfeffermühle, schafft es Chat-GPT eine Brücke zu schlagen und einen qualitativ hochwertigen Text zu erstellen.

Tipps und Tricks

TODO

Weiterführende Dokumentation

Prompt Sammlungen

Hier noch ein paar Prompt Sammlungen, die von verschiedenen Nutzern zusammengetragen wurden.

Chat-GPT Plugins

TODO