Noch vor wenigen Jahren musste man sich mit viel Aufwand weiterbilden, um professionelle Texte zu schreiben, digitale Bilder zu erschaffen oder funktionsfähigen Code zu programmieren. Generative KI-Anwendungen, wie ChatGPT, stellen in Aussicht, eine vergleichbare Qualität zu ermöglichen, bei gleichzeitig einfachem Zugang für die breite Masse an Menschen. Die Ergebnisse von generativer KI sind längst noch nicht perfekt, aber wir stehen erst am Anfang eines disruptiven Wandels. Innerhalb kürzester Zeit ist unsere natürliche menschliche Sprache zur beliebtesten Programmiersprache der Welt geworden.
Die Anwendungsmöglichkeiten haben sich zwar nicht grundlegend verändert, jedoch ist das, was zuvor bereits möglich war, nun leichter zugänglich und in erheblich kürzerer Zeit umsetzbar. Umso wichtiger ist es, den Schlüssel zur generativen KI, das Prompt Engineering, besser zu verstehen und nützliche Techniken und Methoden zu meistern.
Was bedeutet Prompt Engineering?
Der Begriff Prompt in seiner ursprünglichen Bedeutung bezeichnet die Aufforderung an Nutzer:innen, eine Eingabe in ein Computersystem zu schreiben, beispielsweise über ein Command Line Interface (CLI) [1]. In der heutigen Zeit verbindet man Prompts jedoch vor allem mit der Eingabe von Nutzer:innen in ein generatives KI-Modell. Ein Prompt kann in verschiedenen Modalitäten dem generativen KI-Modell übergeben werden. Typischerweise schreiben wir einen Prompt in Form eines Textes in natürlicher Sprache, jedoch sind auch andere Modalitäten wie Bild, Audio oder Video möglich.
Ein Prompt ist demnach eine Nachricht in unterschiedlichen Modalitäten, die wir an ein generatives KI-Modell schicken.
Prompt Engineering hingegen ist
„Der iterative Prozess zur Ermittlung des „richtigen“ Prompts an ein generatives KI-Modell, um das optimale Ergebnis zu erzielen“
Die sechs Elemente eines Prompts
Auch wenn ein Prompt aus unterschiedlichen Modalitäten bestehen kann, fokussieren wir uns in diesem Blogbeitrag erstmal nur auf den Text Input und Output. Ein effektiver Prompt an ein Sprachmodell (z.B. GPT-4o, Mistral Large, Claude 3 etc.) besteht häufig aus weit mehr Teilen als der eigentlichen Anweisung (Englisch: instruction). Prompts können unterschiedliche Formate und Komplexität besitzen. Je nach Anwendungsfall macht es Sinn einen Prompt komplexer aufzubauen oder eher simpel und prägnant. Dabei ist es wichtig zu verstehen, dass die Sprachmodelle nicht inhärent ein Verständnis von genau diesen Prompt-Elementen haben. Die Elemente sind viel mehr eine Guideline und Best Practices, mit dem Ziel bessere Resultate zu erzielen. Im Folgenden schauen wir uns einmal die einzelnen Bauteile eines Prompts im Detail an.
Die sechs Elemente eines Prompts [2] [3]
1. Input Prompt
Am Anfang einer Interaktion mit einem Sprachmodell steht in der Regel eine Problemstellung, die man mit Hilfe eines LLMs lösen möchte. Dafür müssen wir dem Modell einen Input übergeben. Das kann zum Beispiel ein Text sein, den wir zusammenfassen möchten oder auch eine Fragestellung wie zum Beispiel “Was ist Prompt Engineering?“.
Beispiel: Input Prompt
Die Antwort auf unsere Frage wurde mit GPT 3.5 erzeugt, der ersten Modellversion, die initial über ChatGPT verfügbar war. Die Antwort des Modells ist sehr unpräzise und trifft nicht unsere Erwartungen (siehe Infobox Halluzination). Die Frage klingt zwar sehr einfach, jedoch ist sie für diese Version des Modells nicht trivial.
2. Instruction Prompt
Eine der einfachsten Prompting-Methoden ist das Geben von Anweisungen (auch Instruction Prompting genannt). Zu Beginn eines Prompts können wir so definieren, wie sich die KI verhalten soll und was ihre Aufgabe ist. Im Falle eines Chatbots im Service Management, sollte ein Chatbot zum Beispiel immer freundlich sein und gezielte Rückfragen stellen, sofern noch Informationen des Nutzers fehlen. Bei der Formulierung der Anweisung kann ein Prompt Engineer auch definieren, welche Handlung die KI durchführen soll. Schlagwörter wie zum Beispiel „Schreibe“, „Klassifiziere“, „Fasse zusammen“, „Übersetze“ oder „Ordne“, können hier platziert werden.
Beispiel: Instruction Prompt
In unserem Beispiel wollen wir weiterhin die Frage, was Prompt Engineering ist, beantworten. Da wir jetzt neben dem Input auch einen Bereich für die Instruction haben, macht es Sinn, den dynamischen User Input durch ein Trennzeichen zu markieren. Die Trennzeichen helfen dem Modell, bei komplexeren Prompt-Konstrukten Systemanweisungen von User-Eingaben zu trennen (siehe Infobox System und User Prompt). Trennzeichen erhöhen die Lesbarkeit und reduzieren die Fehlerwahrscheinlichkeit. Mögliche Trennzeichen sind z.B. +++, `, ###, <user_input>.
Unsere Instruktion weist das Modell an, die Frage faktisch korrekt zu beantworten. Die Antwort ist tatsächlich korrekter als zuvor und stellt die Erstellung von Texten mehr in den Fokus. Jedoch fehlt der Aspekt des Prompts, also der Input in ein Sprachmodell.
Aufgrund des eingeschränkten Wissens über Prompt Engineering von GPT-3.5 (Ende der Trainingsdaten im September 2021), müssen wir dem Modell dieses Wissen nachträglich übergeben. Diese Wissens- oder auch Kontexterweiterung können wir über das nächste Prompt-Element erreichen.
3. Context Prompt
Es gibt im Grunde zwei Möglichkeiten, dem Modell neues Wissen beizubringen.
Möglichkeit 1: Ein sogenanntes Fine-Tuning, bei dem wir mit einem neuen Trainingsdatensatz die Gewichte des Modells verändern.
Möglichkeit 2: Kontexterweiterung mit Hilfe von Prompt Engineering.
Wir konzentrieren uns auf die Möglichkeit 2, durch die wir den Prompt mit neuen Informationen erweitern. Das Ziel ist es, dem Modell alle relevanten Informationen zur Umsetzung einer Aufgabe mitzugeben. Die Informationen kann man entweder manuell in einen Prompt einfügen, oder man bindet systematisch verschiedene Quellen ein, wie beispielsweise interne Dokumente eines Unternehmens aus dem Intranet, Wiki-Dokumentationen oder auch Office 365-Dokumente wie Word, PowerPoint etc. (siehe Infobox Retrieval Augmented Generation)
Beispiel: Context Prompt
In unserem Beispiel erweitern wir das Wissen des Modells mit Hilfe eines Auszugs aus dem Tech Blog von Lilian Weng. Damit haben wir endlich ein faktisch korrekte Antwort auf unsere Frage generiert. In dieser Definition wird Prompt Engineering auch noch einmal von Fine-tuning abgegrenzt, da wir explizit die Gewichte des Modells nicht anpassen.
Für den ein oder anderen mag diese Antwort jedoch zu technisch sein. Mit dem nächsten Prompt Element können wir dem entgegenwirken.
4. Role Prompt
Häufig ist der erste Baustein eines Prompts die Zuweisung einer Rolle an die KI. Zum Beispiel könnte dein Prompt mit „Du bist ein Service Portal Mitarbeiter“ oder „Du bist ein Senior Java Entwickler“ beginnen und dann die KI auffordern, eine Service Frage oder Programmieraufgaben zu lösen. Die KI versucht dabei die Rolle zu imitieren, wodurch wir einen indirekten Einfluss auf den Sprachstil, die Tonalität oder auch den Detailgrad der generierten Antwort erreichen.
Beispiel: Role Prompt
In unserem Beispiel wünschen wir uns eine einfache Erklärung eines komplexen Themas. Dafür geben wir der KI die Rolle eines Kindergärtners. Das Sprachmodell versucht nun, weiterhin unseren übergebenen Kontext zu verwenden, jedoch die Antwort so zu generieren, dass Kinder die Antwort verstehen.
5. Examples Prompt
In den meisten Fällen verwendet man Input/Output Paare als Beispiele. Das Sprachmodell versucht Muster in den Beispielen zu erkennen und einen neuen, ungesehenen Input anhand dieser Muster ähnlich zu verarbeiten.
Generative AI Use Cases
Konkrete Use Cases kann man auf unserer Website zum Thema Prompt Engineering einsehen.
Wie geht man mit Fehlern um?
Häufig können Fehler auftreten, weil wir eine komplexe Aufgabe stellen und das Modell direkt eine Antwort generieren lassen. Am besten gibt man dem Modell “Zeit zum Nachdenken“. Das kann man zum Beispiel erreichen, indem man eine komplexe Frage in weniger komplexe Unteraufgaben aufteilt. Eine andere Taktik ist, das Modell direkt zu instruieren, eine Schritt-für-Schritt Lösung auszuarbeiten. Zum Beispiel kann man an das Ende eines Prompt „Erstelle eine Schritt-für-Schritt Lösung“ (engl. „Let’s think step by step“) anhängen.
Generell sollte man nicht frustriert sein, wenn das Ergebnis nicht auf Anhieb den Erwartungen entspricht. Prompt Engineering ist ein iterativer Prozess, bei dem wir etwas versuchen und wenn es nicht funktioniert, verfeinern den Prompt und wiederholen folgendes Vorgehen:
- Etwas ausprobieren
- Analysieren, an welchen Stellen das Ergebnis noch nicht wie gewünscht ist
- Prompt Elemente verbessern, mehr Zeit zum Nachdenken geben
- Sofern sinnvoll, Anweisungen mit einer Gruppe von Beispielen verfeinern
- wiederholen
Ausblick
Da wir nun die Grundlagen von Prompt Engineering beherrschen, bleibt noch die Frage: Was gibt es noch?
Neben den Prompt-Elementen gibt es noch eine Reihe weiterer Prompt-Engineering-Techniken, unter anderem Chain-of-Thought, Self-Consistency, Retrieval Augmented Generation (RAG) oder Reflexion. Diese Techniken sind jedoch Teil für einen zukünftigen Blogartikel und werden hier nicht weiter betrachtet.
Key Takeaways
In diesem Blog sind wir tiefer in die Welt des Prompt Engineering eingetaucht. Zum Abschluss hier noch einmal die Key Takeaways:
- Bei Prompt Engineering handelt es sich um einen iterativen Prozess zur Ermittlung der richtigen Nachricht an ein generatives KI-Modell, um das optimale Ergebnis zu erzielen.
- Ein Prompt kann aus bis zu 6 Elementen bestehen.
- Sprachmodelle können halluzinieren.
- Durch Prompt Engineering können wir den Kontext eines Sprachmodells erweitern und damit dem Modell Wissen übergeben, welches nicht Teil der Trainingsdaten war.
- Wir können unstrukturierte Texte in strukturierte Output-Formate transformieren.
- Es gibt zahlreiche Use Cases bei denen Prompt Engineering nützlich sein kann.
Referenzen
[1] https://en.wikibooks.org/wiki/Guide_to_Unix/Explanations/Shell_Prompt
[2] https://learnprompting.org/docs/basics/formalizing
[3] https://www.promptingguide.ai/introduction/elements
[4] https://arxiv.org/pdf/2305.11747.pdf
[5] https://platform.openai.com/docs/models/gpt-3-5-turbo