Was ist Prompt Engineering?
Seit der Einführung von Large Language Models (LLM) haben sich neue Wege aufgetan, Problemstellungen effizienter und dynamischer zu lösen. Um nun die gewünschten Resultate zu generieren, muss man mit dem KI-Modell optimal kommunizieren, was es zu lösen beziehungsweise zu beantworten hat. Dieser Prozess, die optimalen Anweisungen und Fragestellungen zu entwerfen, wird Prompt Engineering genannt. Dabei ähnelt Prompt Engineering vielmehr einer Kunst als einem strikten Vorgehen. Damit eine qualitativ hochwertige und relevante Antwort erzielt werden kann, müssen die Anweisungen detailliert und verständlich genug gestaltet werden. Es werden einige Fähigkeiten und Wissen benötigt um die optimalen Prompts (Eingaben) zu erstellen. Angefangen von einfachen Kommunikationsfähigkeiten, über tiefes technisches Verständnis, bis zu fundiertem Wissen über LLMs. Ebenfalls sind Kreativität und eine realistische Einschätzung der Vorteile und Risiken von neuen Technologien in der Rolle eines Prompt Engineers von großer Bedeutung.
Wieso braucht man Prompt Engineering?
Je komplizierter und umso mehr Interpretationsspielraum in den Anweisungen stecken, desto ungenauer kann die Antwort werden und die Relevanz dieser kann stark vom gewünschten Ergebnis abweichen. Ähnlich verhält sich dies mit der Eingabe in die Google-Suche, aber auch mit der Kommunikation mit MitarbeiterInnen. In all den erwähnten Fällen muss das Gegenüber und dessen Aufnahmefähigkeiten berücksichtigt werden. Die Aufgabenstellung muss so präzise wie möglich gestaltet werden, und dabei die Komplexität im Rahmen der Fähigkeiten des Gegenübers zu halten. Wie bei beinahe allen KI-Modellen, verhält sich die Qualität des Resultats ähnlich der Qualität der Eingabe. Ein weiterer Makel von generativen KI-Modellen ist, dass deren Antworten nicht immer deterministisch sind, also nicht immer einheitlich, und somit bei einem neuerlichen Anlauf mit gleicher Eingabe nicht zwingend dieselbe Antwort liefert. Dem kann jedoch entgegengewirkt werden, indem die Aufgabenstellung eine klare Anweisung zu dem erwarteten Resultat beinhaltet. Beim Prompt Engineering wird versucht alle zuvor erwähnten Risiken zu reduzieren, damit das KI-Modell maßgeschneiderte und optimale Antworten liefert.
Erfolgsgeheimnisse eines guten Prompts
Die folgenden Punkte sollten beachtet werden, um die Anweisungen klar und verständlich zu kommunizieren (eventuell nicht nur für LLMs):
- Präzision statt Poesie: Es geht nicht darum, einen unterhaltsamen oder erheiternden Text zu schreiben, sondern klare, konkrete Fragen zu stellen ohne vage Formulierungen.
- Kontext ist King: Um mögliche Missverständnisse zu vermeiden, geben Sie dem LLM so viel relevante Informationen wie möglich, aber versuchen Sie trotzdem Redundanzen zu vermeiden.
- Schritt für Schritt: Bitten Sie die KI, deren Gedankengang klar in mehreren Schritten darzulegen und eine logische Abfolge einzuhalten.
- Seien Sie nett: Seien Sie höflich und respektvoll zu Ihrer KI und das nicht nur wegen dystopischer Schauergeschichten: Erstaunlicherweise reagieren viele Sprachmodelle darauf mit ausführlicheren und durchdachteren Antworten.
- Zum Beispiel: Fügen Sie zu Ihrem Prompt ein Beispiel hinzu. Dabei kann die KI besser verstehen, was Sie von dieser erwarten und das LLM hat somit einen Leitfaden, an dem man sich halten kann.
- Der Weisheit letzter Schluss: Ein guter Prompt entsteht oft durch iteratives Ausprobieren und wiederholtes Anpassen.
Prompting Techniken
Zusätzlich zu den bereits beschriebenen Erfolgsgeheimnisse gibt es noch einige Techniken das Prompting zu gestalten, die, abhängig vom Anwendungsfall, eingesetzt werden können. Dazu gehören:
- Zero-Shot-Prompting: Die KI bekommt eine Aufgabenstellung ohne Beispiele
- One-Shot- & Few-Shot-Prompting: Hier werden ein oder wenige Beispiele geliefert, um die Erwartungen zu verdeutlichen.
- Mulit-Shot-Prompting: Manchmal ist es notwendig, mehrere Beispiele zu nennen, um das gewünschte Verhalten zu erzeugen.
- Chain-of-Thought-Prompting (CoT): Die KI wird aufgefordert, ihren Denkprozess in mehreren Schritten zu erklären.
- Role-based Prompting: Die KI wird gebeten, eine bestimmte Rolle anzunehmen, z.B.: “Du bist ein Lead Software Architect mit 15 Jahren Berufserfahrung”. Diese Technik hilft, diese Ausgabe zu verfeinern und die Stärken der KI optimal zu nutzen.
Prompting Vergleiche
Wir werden nun hier ein paar Beispiele geben, um die Prompting Techniken und Erfolgsgeheimnisse genauer zu beleuchten. Es wurde dabei jeweils eine einfache Eingabe mit einer verbesserten Eingabe verglichen. Diese Prompts wurden dann von Open AI GPT-4o beantwortet:
Fibonacci – Powered by AI
Wir wollen nun von unserem LLM eine Java Methode, die die Fibonacci-Reihe für uns ausgibt. Dabei verwenden wir zuerst einen sehr einfachen Prompt und anschließend wenden wir die Role-based Prompting Technik an (und bleiben ebenfalls nett zu unserem Freund und Helfer). Hier die Ergebnisse:
Einfache Eingabe ohne Techniken:
Please write me a java function where the fibonacci sequence will be calculated
Ergebnis:
// Function to calculate Fibonacci sequence
public static int fibonacci(int n) {
if (n <= 1) {
return n;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
Aufforderung mit Role-based Prompting:
Imagine you are a lead software engineer with 15 years of experience and have a really good reputation. Please use your expertise to write me a java function that calculates the fibonacci sequence. Thank you very much!
Ergebnis:
// Iterative approach for efficiency
public static long fibonacciIterative(int n) {
if (n < 0) {
throw new IllegalArgumentException("Input must be a non-negative integer.");
}
if (n == 0) return 0;
if (n == 1) return 1;
long a = 0, b = 1, c;
for (int i = 2; i <= n; i++) {
c = a + b;
a = b;
b = c;
}
return b;
}
// Recursive approach for clarity
public static long fibonacciRecursive(int n) {
if (n < 0) {
throw new IllegalArgumentException("Input must be a non-negative integer.");
}
if (n == 0) return 0;
if (n == 1) return 1;
return fibonacciRecursive(n - 1) + fibonacciRecursive(n - 2);
}
Wie man sehen kann, wurde bei dem einfachen Prompt auf einen Edge-Case vergessen und das Programm würde bei einer negativen Eingabe diese Zahl wiedergeben. Dieses Verhalten ist jedoch bei der Fibonacci-Sequenz nicht vorgesehen. Ebenfalls wurde bei dem zweiten Prompt ebenfalls eine iterative Berechnung hinzugefügt. Will man nur eine Funktion, die man direkt kopieren kann, dann muss man dies auch genau so formulieren, wie wir im nächsten Beispiel sehen werden.
Präziser Kontext
Wir wollen nun, dass unsere KI uns ein JSON-Objekt mit Informationen über den Präsidenten von Peru 2012 gibt. Das Resultat soll dann direkt übernommen werden, ohne extra Erklärung.
Einfache Eingabe:
Wer war der Präsident in 2012 in Peru? Erstell mir ein JSON Objekt dazu.
Ergebnis:
Hier ist ein JSON-Objekt mit den Informationen zum Präsidenten Perus im Jahr 2012:
{
"country":"Peru",
"year":2012,
"president": {
"name":"Ollanta Humala",
"term_start":"2011-07-28",
"term_end":"2016-07-28",
"party":"Partido Nacionalista Peruano"
}
}
Ollanta Humala war der Präsident Perus im Jahr 2012. Seine Amtszeit begann am 28. Juli 2011 und endete am 28. Juli 2016. Er gehörte der Partido Nacionalista Peruano an.
Eingabe mit präziserem Kontext:
Wer war der Präsident in 2012 in Peru?
Ihre Antwort sollte im JSON-Format sein. Die Datenstruktur für das JSON sollte dieser Java-Klassen entsprechen:
{
„name“: java.lang.string,
„geburtsdatum“: java.time.instant
„beginn_amtszeit_jahr“: java.lang.Integer,
„ende_amtszeit_jahr“: java.lang.Integer
}
Fügen Sie keine Erklärungen hinzu, sondern geben Sie lediglich eine RFC8259-konforme JSON-Antwort in diesem Format ohne Abweichung.
Vielen lieben Dank für deine Bemühungen! Ich schätze deine Zeit sehr!
Ergebnis:
{
“name”: “Ollanta Humala”,
“geburtsdatum”: “1961-06-27T00:00:00Z”,
“beginn_amtszeit_jahr”: 2011,
“ende_amtszeit_jahr”: 2016
}
Im Vergleich zum einfachen Prompt, können wir nun das Resultat direkt verwenden und in ein Java-Objekt umwandeln, ohne davor das JSON-Format aus dem Resultat zu extrahieren. Hier kann man sehen, je präziser die Formulierung ist, umso genauer kann das LLM auf unsere Wünsche eingehen. Bei diesem Umwandeln in ein Java-Objekt kann uns Spring AI erheblichen Aufwand abnehmen, aber dazu später mehr.
Ein letztes Beispiel
Um unsere Anfrage noch verständlicher zu machen und dadurch den Interpretationsspielraum zu verkleinern, kann dem LLM ein paar Beispiele mitgegeben werden. Unser Ziel ist nun, die Stimmung einer Aussage zu bestimmen. Jedoch ist diese Aussage von einer Person, die sehr positive Stimmung mit Euphorie begegnet, während negative Stimmung mit Zurückhaltung und neutraler Sprache gezeigt wird.
Einfache Eingabe:
Wie ist die Stimmung des folgenden Satzes:
„Es passt alles“
Ein letztes Beispiel
Ergebnis:
Die Stimmung des Satzes “Es passt alles” wirkt positiv, ausgeglichen und zufrieden.
Er drückt aus, dass alles in Ordnung ist, ohne Stress oder negative Emotionen. 😊
Multi-Shot-Prompting mit mehreren Beispielen:
Hier ein paar Beispiel Sätze und deren Stimmung:
Beispiel 1: Es war wirklich gut! Ich bin überrascht!
Antwort: Eher Positiv
Beispiel 2: Ich bin wirklich begeistert, es freut mich wirklich total!
Antwort: Positiv
Beispiel 3: Im großen und ganzen würd ich das jetzt so lassen
Antwort: Neutral bis eher Negativ
Beispiel 4: Ja, das kann man so lassen
Antwort: Negativ
Beispiel 5: Es ist ok
Antwort: Sehr Negativ
Beispiel 6: Alles in Ordnung
Antwort: Negativ
Wie bewerten Sie nun folgende Aussage?
„Es passt alles“
Ergebnis:
Basierend auf den gegebenen Beispielen und deren Stimmung würde ich die Aussage:
“Es passt alles”
als Negativ bewerten.
Begründung: Ähnlich wie „Ja, das kann man so lassen“ oder „Alles in Ordnung“ deutet die Aussage zwar auf keine gravierenden Mängel hin, wirkt aber zurückhaltend, wenig begeistert und eher distanziert. In diesem Kontext scheint eine neutrale oder gar negative Grundhaltung durch.
Wie wir nun gesehen haben, verändert sich das Resultat von positiv zu negativ, da wir zusätzliche Informationen und Beispiele gegeben haben. Sollte ein Verhalten vom Üblichen abweichen, dann ist Multi-Shot-Prompting besonders wichtig, damit das KI-Modell die Anfrage in Relation zu sehen.
Nützliche Tools für Prompt Engineering
Es gibt zahlreiche Tools, die das Leben eines Prompt Engineers erleichtern und verbessern können. Zum einen gibt es zahlreiche Plattformen, die das Verwalten, Testen und Optimieren von Prompts vereinfachen. PromptHub und PromptFoo bieten dabei Versionen-kontrollierte und umfangreiche Analysefunktionen. Zusätzlich gibt es einige Frameworks wie zum Beispiel Spring AI, die EntwicklerInnen dabei helfen können, KI-Anfragen effizienter zu gestalten und sogar Antworten eines LLM mit einer entsprechenden Vorlage direkt in ein JSON-Format umzuwandeln und daraus dann direkt ein Java-Objekt zu erzeugen. Dazu können Sie das Format Ihres Java-Objektes mittels Structured Output Converters direkt an das LLM weitergeben, wodurch das Resultat von Spring AI in ein neu erstelltes Java-Objekt geladen wird!
Nur Zukunftsmusik oder doch eher ein Orchester?
Prompt-Engineering ist kein vorübergehender Trend. In einer Welt, in der KI immer mehr Aufgaben übernimmt, wird die Fähigkeit, sie gezielt anzuleiten, zur Schlüsselqualifikation. Ob in der Software-Entwicklung, im Marketing oder in der Wissenschaft – die richtigen Prompts entscheiden über Effizienz und Innovation. Besonders im Bereich der Automatisierung und Datenanalyse könnte Prompt-Engineering bald so wichtig werden wie Programmierkenntnisse.
Quellen:
[1] https://cloud.google.com/vertex-ai/generative-ai/docs/learn/prompts/introduction-prompt-design
[2] https://www.ibm.com/think/topics/prompt-engineering
[3] https://platform.openai.com/docs/guides/prompt-engineering
[4] https://aws.amazon.com/de/what-is/prompt-engineering/
[5] https://docs.spring.io/spring-ai/reference/api/prompt.html
