Prompting und Prompt Engineering sind mit Sicherheit die gefragtesten Fähigkeiten im Jahr 2023. Das schnelle Wachstum der LLMs für große Sprachmodelle hat nur zur Entstehung dieser neuen KI-Disziplin namens Prompt Engineering geführt. In diesem Artikel werfen wir einen kurzen Blick darauf, was Prompting ist, was Prompt-Ingenieure tun und auch mit den verschiedenen Elementen eines Prompts, mit denen ein Prompt-Ingenieur arbeitet.
Bei der Eingabeaufforderung handelt es sich lediglich um die Eingabe, die Sie einem „trainierten“ Modell bereitstellen. Wenn ich trainiertes Modell sage, sind die Gewichte des Modells fest oder eingefroren und werden sich während des Aufforderungsprozesses nicht ändern. Sie fragen sich jetzt vielleicht, was der Unterschied zur Inferenz ist, denn wir haben Modelle trainiert, Inferenzen auf Modellen für maschinelles Lernen bereitgestellt und ausgeführt. Der Punkt ist, dass bei der Inferenz die Eingabe festgelegt ist. Wir ändern es niemals und was auch immer das Modell als Ausgabe liefert, wir akzeptieren es als Ergebnis. Stellen Sie sich die Bildklassifizierung als Beispielaufgabe vor.
Bei der Eingabeaufforderung sind Sie jedoch nicht auf eine einzelne Eingabe beschränkt. Sie können die Eingabe an Ihre Bedürfnisse anpassen, um das Verhalten des Modells zu verbessern. Sie weisen das Modell vielmehr mit der Absicht an, ihm die richtige Antwort zu geben. Während Sie das Modell als gegeben hinnehmen, wenn es um Schlussfolgerungen geht, untersuchen Sie mit Hilfe von Anregungen die Fähigkeiten und Grenzen des Modells.
Die Kunst, diese Eingaben so zu entwerfen oder zu konstruieren, dass sie zum jeweiligen Problem passen und Ihnen bestmöglichen Nutzen bringen, bringt eine ziemlich neue Disziplin hervor, die Prompt Engineering genannt wird.
Bevor wir uns mit der Entwicklung von Eingabeaufforderungen befassen, wollen wir anhand von Beispielen die Motivation oder Notwendigkeit verstehen, Eingabeaufforderungen zu entwickeln. Nehmen wir an, ich möchte eine bestimmte Passage zusammenfassen. Also gebe ich eine große Passage aus Wikipedia als Input und sage am Ende: „ Fass den obigen Absatz zusammen “. Diese Art der Bereitstellung einfacher Anweisungen in der Eingabeaufforderung, um eine Antwort vom LLM zu erhalten, wird als Anweisungsaufforderung bezeichnet.
Gehen wir zu einem etwas komplizierteren Fall der Mathematik über und bitten wir den LLM, zwei Zahlen zu multiplizieren. Versuchen wir es mit der Eingabeaufforderung „ Was ist 2343*1232“. Die Antwort, die wir erhalten, lautet „ 23431232 “, was offensichtlich nicht die Multiplikation der beiden Zahlen ist, sondern beide zusammen.
Lassen Sie mich nun die Eingabeaufforderung ändern und eine zusätzliche Zeile hinzufügen, um genauer zu sein: „ Was ist 2343 multipliziert mit 1232. Geben Sie mir nach der Multiplikation die genaue Antwort “. Wir bekommen jetzt „ 2886576 “ die richtige Antwort vom LLM.
Die Qualität der Modellausgabe wird also eindeutig von der Qualität der Eingabeaufforderung bestimmt. Hier kommt Prompt Engineering ins Spiel. Das Ziel eines Prompt-Ingenieurs besteht darin , die Qualität der Ausgabe eines Modells zu bewerten und Verbesserungsmöglichkeiten im Prompt zu identifizieren, um bessere Ergebnisse zu erzielen. Prompt Engineering ist also eine äußerst experimentelle Disziplin, bei der die Fähigkeiten und Grenzen des LLM durch Versuch und Irrtum untersucht werden, mit der Absicht, sowohl das LLM zu verstehen als auch gute Prompts zu entwerfen.
Um die Eingabeaufforderungen zu konstruieren oder zu entwerfen, müssen wir die verschiedenen Elemente einer Eingabeaufforderung verstehen. Eine Eingabeaufforderung kann eines oder mehrere der folgenden Elemente enthalten.
Eingabeaufforderungen können Anweisungen sein, bei denen Sie das Modell auffordern, etwas zu tun. In unserem Beispiel haben wir einen riesigen Textkörper bereitgestellt und das Modell gebeten, ihn zusammenzufassen.
Eingabeaufforderungen können optional einen Kontext für das Modell enthalten, um Ihnen einen besseren Service zu bieten. Wenn ich beispielsweise Fragen zu beispielsweise englischen Kulturerbestätten habe, kann ich zunächst einen Kontext bereitstellen wie: „English Heritage kümmert sich um über 400 historische Denkmäler, Gebäude und Orte – von weltberühmten prähistorischen Stätten bis hin zu großen mittelalterlichen Burgen und römischen Festungen.“ …“ und stellen Sie dann meine Frage: „ Welches ist die größte englische Kulturerbestätte?“ ”
Im Rahmen der Eingabeaufforderung können Sie auch angeben, in welchem Format Sie die Ausgabe sehen möchten. Daher kann eine Eingabeaufforderung optional über einen Ausgabeindikator verfügen. Sie können beispielsweise fragen: „ Ich möchte eine Liste aller englischen Kulturerbestätten in England, ihrer Lage und Besonderheit .“ Ich möchte die Ergebnisse in tabellarischer Form .“
Wenn Sie eine noch bessere Antwort wünschen, können Sie mit dieser Syntax das gewünschte Format eingeben, um anzugeben, dass Sie Spalten und Zeilen in der Ausgabe sehen möchten:
Desired format:
Company names: <comma_separated_list_of_sites>
Sites: -||-Location: -||-Speciality: -||-
Eine Eingabeaufforderung kann eine oder mehrere Eingabedaten enthalten, in denen wir Beispieleingaben für das bereitstellen, was vom Modell erwartet wird. Sehen Sie sich im Fall der Stimmungsklassifizierung diese Eingabeaufforderung an, in der wir mit der Bereitstellung von Beispielen beginnen, um unsere Absichten zu veranschaulichen, und auch angeben, dass wir in der Antwort keine Erklärung wünschen:
Text: Today I saw a movie. It was amazing.
sentiment: Positive
Text: I don't very good after seeing that incident.
sentiment:
Diese Art, Beispiele in der Eingabeaufforderung anzugeben, ähnelt der Art und Weise, wie wir Menschen erklären, indem wir Beispiele zeigen. In der Welt des Promptings nennt man das „Fow-Shot-Prompting“ . Wir stellen qualitativ hochwertige Beispiele bereit, die sowohl den Input als auch den Output der Aufgabe enthalten. Auf diese Weise versteht das Modell, was Sie suchen, und reagiert daher viel besser.
Ergänzend zu unserem Beispiel: Wenn ich die Stimmung einer Passage wissen möchte, kann ich, anstatt nur zu fragen: „Was ist die Stimmung der Passage“, ein paar Beispiele liefern, die die möglichen Klassen in der Ausgabe abdecken. In diesem Fall positiv und negativ:
Text: Today I saw a movie. It was amazing.
sentiment: Positive
Text: I don't very good after seeing that incident.
sentiment: Negative
Text: Lets party this weekend to celebrate your anniversary.
sentiment: Positive
Text: Walking in that neighbourhood is quite dangerous.sentiment: Negative
Text: I love watching tennis all day long
sentiment:
Und ich kann das Modell dann verlassen, um auf den zuletzt eingegebenen Text zu antworten. Normalerweise sollten 5 bis 8 Beispiele für die Aufforderung mit wenigen Schüssen ausreichen. Wie Sie mittlerweile erraten können, besteht der Nachteil dieses Ansatzes darin, dass Ihre Eingabeaufforderung zu viele Token enthält. Wenn Sie einfach anfangen möchten, müssen Sie keine Beispiele angeben, sondern können wie folgt direkt zum Problem springen:
Text: I love watching tennis all day long
sentimet:
Hierbei handelt es sich um eine Zero-Shot-Eingabeaufforderung , bei der Sie keine Beispiele angeben, aber dennoch erwarten, dass das Modell Ihnen richtig antwortet. Typischerweise beginnt man beim Prompt Engineering mit Null-Schüssen, da es einfacher ist. Basierend auf der Reaktion geht man dann zu wenigen Schüssen über, indem man Beispiele liefert, um eine bessere Reaktion zu erhalten.
Wenn Sie mit dem LLM zu einem speziellen Thema springen möchten, können Sie ihn direkt zum Experten auf einem Gebiet machen, indem Sie ihm eine Rolle zuweisen. Dies wird als Rollenaufforderung bezeichnet.
Normalerweise beginnen Sie die Eingabeaufforderung mit der Expertenrolle, die der LLM spielen muss. Befolgen Sie dann die Anweisungen, was zu tun ist. Als einfaches Beispiel könnte die Rolle darin bestehen, den LLM zu bitten, ein Dichter zu sein, und die Anweisung könnte darin bestehen, einfach ein Gedicht über AI Bites zu schreiben.
Oder es könnte etwas komplizierter sein, wenn Sie den LLM bitten, als Linux- Terminal zu fungieren. Und Bereitstellung spezifischer Anweisungen zum Kopieren der ersten 10 Zeilen einer Datei in eine andere Datei und zum Speichern dieser. Sie können sogar verhindern, dass in die Ausgabe anderer Text eingefügt wird, indem Sie ausdrücklich darauf hinweisen, keine Erklärung abzugeben.
You are a poet.
Write a poem about AI Bites
Act as a linux terminalI want you to provide the shell command to read the contents of a file named "input.txt".Copy the first 10 lines to a different file with the name "new.txt" and save it.Do not give any explanations.
Verschiedene mögliche Elemente einer Eingabeaufforderung, die wir in ein LLM eingeben können
Wenn Sie möchten, dass ich die Struktur einer Eingabeaufforderung formalisiere, würde ich nach alledem so vorgehen. Eine Eingabeaufforderung beginnt normalerweise mit einer Rolle, die das Modell spielen muss, wenn es sich bei Ihrer Eingabeaufforderung um ein spezielles Thema handelt. Dann kann es alle Anweisungen enthalten, die Sie dem LLM geben möchten. Wenn Sie dem LLM darüber hinaus zusätzliche Informationen zur Verfügung stellen möchten, können Sie dies auch im Anschluss an die Anweisung tun.
Kurz danach können Sie qualitativ hochwertige Beispiele bereitstellen, wenn Sie die Eingabeaufforderung mit wenigen Schüssen durchführen. Auf diese Beispiele kann dann jeder beliebige Kontext folgen, den Sie dem Modell bereitstellen möchten. Wenn Sie eine Frage stellen und eine Frage- und eine A-Aufgabe erledigen möchten, können Sie Ihre Fragen am Ende einfügen
Nachdem wir nun gesehen haben, was eine Eingabeaufforderung ausmacht, ist es umso besser, wenn wir wissen, wie diese Eingabeaufforderungen formatiert werden. Beispielsweise ist es besser, das gewünschte Format explizit zu erwähnen und dann das Format tatsächlich bereitzustellen.
Extract locations from the below textDesired format:Cities: <comma_separated_list_of_cities>Countries: <comma_separated_list_of_countries>Input: Although the exact age of Aleppo in Syria is unknown,an ancient temple discovered in the city dates to around 3,000 BC Excavations in the1990s unearthed evidence of 5,000 years of civilization,dating Beirut, which is now Lebanon's capital, to around 3,000 BC
Ebenso ist es für die Eingabe oder den Kontext besser, „Eingabe“ gefolgt von einem Doppelpunkt zu sagen und dann Ihre Eingabe bereitzustellen.
Bei der Bereitstellung von Beispielen ist es besser, diese durch ein paar Hashes zu trennen, wie in diesem Beispiel.
Text: Today I saw a movie. It was amazing.sentiment: Positive
Text: I don't very good after seeing that incident.sentiment: Negative
Text: Lets party this weekend to celebrate your anniversary.sentiment: PositiveText: Walking in that neighbourhood is quite dangerous.sentiment: Negative
Wenn Sie Eingaben bereitstellen, können Sie diese wie im folgenden Beispiel in Anführungszeichen setzen:
Text: """{text input here}"""
Dann gibt es eine sogenannte Stoppsequenz , die das Modell darauf hinweist, die Ausgabe von Text zu beenden, da die Ausgabe abgeschlossen ist. Sie können eine Stoppsequenz mit einem beliebigen Symbol Ihrer Wahl wählen. Aber New Line scheint hier die übliche Option zu sein.
Text: "Banana",
Output: "yellow \\n"
Text: "Tomato",
Output: "red \\n"
Text: "Apple",
Output: "red \\n"
Wenn Sie beispielsweise mit der Codegenerierung arbeiten, ist es besser, Kommentare entsprechend der Sprache bereitzustellen, in der der Ausgabecode generiert werden soll.
/*
Get the name of the use as input and print it
*/
# get the name of the user as input and print it
Wenn Sie bis hierhin gelesen haben, gehe ich davon aus, dass Ihnen der Artikel entweder gefallen hat oder Sie neugierig auf KI sind. Wie auch immer, schauen Sie sich doch unser Video zu Prompt Engineering an. Dies ist das erste Video in der Videoreihe zum Thema Prompting. Warum also nicht abonnieren und auf dem Laufenden bleiben!
Mit all der Einleitung zu Eingabeaufforderungen, Eingabeaufforderungstechnik und deren Typen haben wir hier nur an der Oberfläche gekratzt. Wie können wir beispielsweise den LLM bitten, über eine bestimmte Situation nachzudenken? Es gibt fortgeschrittenere Methoden zur Aufforderung wie Gedankenkette, Selbstkonsistenz, Allgemeinwissen usw. Schauen wir uns diese in den kommenden Beiträgen und Videos an. Bitte bleiben Sie dran!