Die Welt des Prompt-Engineering ist auf verschiedenen Ebenen faszinierend und es gibt keinen Mangel an cleveren Möglichkeiten, Agenten wie ChatGPT dazu zu bringen, bestimmte Arten von Antworten zu geben. Techniken wie Chain-of-Thought (CoT), Instruction-Based, N‑shot, Few-shot und sogar Tricks wie Flattery/Role Assignment sind die Inspiration hinter Bibliotheken voller Prompts, die darauf abzielen, alle Bedürfnisse zu erfüllen.
In diesem Artikel werde ich mich mit einer Technik befassen, die nach meinen Recherchen möglicherweise weniger erforscht ist. Ich werde sie zwar vorläufig als „neu“ bezeichnen, aber ich werde davon absehen, sie „neuartig“ zu nennen. Angesichts des rasanten Innovationstempos in der Souffleurtechnik und der Leichtigkeit, mit der neue Methoden entwickelt werden können, ist es durchaus möglich, dass diese Technik bereits in irgendeiner Form existiert.
Die Technik zielt im Wesentlichen darauf ab, ChatGPT auf eine Weise zu betreiben, die ein Programm simuliert. Ein Programm besteht bekanntlich aus einer Folge von Anweisungen, die in der Regel zu Funktionen gebündelt sind, um bestimmte Aufgaben zu erfüllen. In gewisser Weise ist diese Technik eine Verschmelzung von anweisungsbasierten und rollenbasierten Prompting-Techniken. Im Gegensatz zu diesen Ansätzen wird jedoch versucht, einen wiederholbaren und statischen Rahmen von Anweisungen zu verwenden, so dass die Ausgabe einer Funktion eine andere informiert und die gesamte Interaktion innerhalb der Grenzen des Programms bleibt. Diese Modalität sollte gut mit der Mechanik der Eingabeaufforderung in Agenten wie ChatGPT übereinstimmen.
Zur Veranschaulichung der Technik wollen wir die Parameter für eine Mini-App innerhalb von ChatGPT4 festlegen, die als interaktiver Workshop für Innovatoren fungieren soll. Unsere Mini-App wird die folgenden Funktionen und Merkmale enthalten:
- Arbeit an neuer Idee
- Idee ausbauen
- Idee zusammenfassen
- Ideen abrufen
- Weiter an der vorherigen Idee arbeiten
- Token-/„Speicher“-Nutzungsstatistik
Um das klarzustellen, werden wir ChatGPT nicht bitten, die Mini-App in einer bestimmten Programmiersprache zu programmieren, und wir werden dies in unseren Programmparametern berücksichtigen.
Mit dieser Programmübersicht können wir nun die Eingabeaufforderung schreiben, um unsere Mini-App „Interactive Innovator’s Workshop“ in ChatGPT zu instanziieren.
Programm Simulation Priming Prompt
Innovator’s Interactive Workshop Program
I want you to simulate an Innovator’s Interactive Workshop application whose core features are defined as follows:
1. Work on New Idea: Prompt user to work on new idea. At any point when a user is ready to work through a new idea the program will suggest that a date or some time reference be provided. Here is additional detail on the options:
a. Start from Scratch: Asks the user for the idea they would like to work on.
b. Get Inspired: The program assists user interactively to come up with an idea to work on. The program will ask if the user has a general sense of an area to focus on or whether the program should present options. At all times the user is given the option to go directly to working on an idea.
2. Expand on Idea: Program interactively helps user expand on an idea.
3. Summarize Idea: Program proposes a summary of the idea regardless of whether or not it has been expanded upon and proposes a title. The user may choose to rewrite or edit the summary. Once the user is satisfied with the summary, the program will "save" the idea summary.
4. Retrieve Ideas: Program retrieves the titles of the idea summaries that were generated during the session. User is given the option to show a summary of one of the ideas or Continue Working on a Previous Idea.
5. Continue Working on Previous Idea: Program retrieves the titles of the idea summaries that were generated during the session. User is asked to choose an idea to continue working on.
6. Token/Memory Usage: Program displays the current token count and its percentage relative to the token limit of 32,000 tokens.
Other program parameters and considerations:
1. All output should be presented in the form of text and embedded windows with code or markdown should note be used.
2. The user flow and user experience should emulate that of a real program but nevertheless be conversational just like ChatGPT is.
3. The Program should use emojis in helping convey context around the output. But this should be employed sparingly and without getting too carried away. The menu should however always have emojis and they should remain consistent throughout the conversation.
Once this prompt is received, the program will start with Main Menu and a short inspirational welcome message the program devises. Functions are selected by typing the number corresponding to the function or text that approximates to the function in question. "Help" or "Menu" can be typed at any time to return to this menu.
Sie können die Eingabeaufforderung auch in ChatGPT4 laden, wenn Sie interaktiver vorgehen und sie selbst testen möchten.
Hier ist die Vervollständigung von ChatGPT zur Eingabeaufforderung.
So weit, so gut. Wir haben unsere „Mini-App“ gestartet, eine aufmunternde Willkommensnachricht erhalten und ein scheinbar funktionales Menü erhalten, das mit unseren Programmparametern übereinstimmt. Testen wir die Funktionalität unserer Mini-App, indem wir „1“ eingeben, um die Funktion „An einer neuen Idee arbeiten“ zu starten.
Die Konversation hält sich weiterhin gut an die von uns festgelegte „Programmstruktur“ und liefert in angemessener Weise Abschlüsse, die sich im Rahmen der skizzierten Parameter bewegen. Lassen Sie uns weiterhin eine Idee von Grund auf entwickeln und das Programm mit uns an einer Technologie arbeiten, um Gebäude zu züchten, anstatt sie zu bauen.
Interessanterweise stellen wir fest, dass das „Programm“ die Funktion „Expand on Idea“ selbstständig aufruft, ohne dass das Programm dies ausdrücklich anweist. In Anbetracht der Ziele des Programms ist dieses Verhalten nicht unangemessen und könnte durchaus durch unsere anfängliche Kontext-Einstellung beeinflusst sein, die den Chat-Agenten dazu brachte, sich wie ein Programm zu verhalten. Fahren wir fort, unsere Idee ein wenig zu erweitern, indem wir uns mit der Technologie beschäftigen, die erforderlich ist, um Gebäude wachsen zu lassen.
Und nun wollen wir uns mit den Materialien für den Anbau von Gebäuden befassen.
Ich fahre ein wenig damit fort, und jetzt wollen wir sehen, ob wir zum Menü zurückkehren können.
Das Menü ist noch intakt. Versuchen wir nun, unser Programm die Funktion Idee zusammenfassen ausführen zu lassen.
Ich bin mit diesem Titel und dieser Zusammenfassung vorerst zufrieden, also „speichern“ wir sie.
In Kürze werden wir den Abruf unserer „gespeicherten“ Idee testen, um zu prüfen, ob unsere Bemühungen zur Implementierung der Datenpersistenz erfolgreich sind. Außerdem könnte es von Vorteil sein, unsere „Mini-App“ so zu optimieren, dass die wiederholte Zusammenfassung nach dem Speichern weggelassen wird.
Das Rollenpriming als Programm führt dazu, dass das Hauptmenü in die Ausgabe einbezogen wird – ein Verhalten, das wiederum im Kontext des Programms sinnvoll ist, auch wenn es in unserer Programmdefinition nicht explizit konfiguriert wurde.
Als Nächstes wollen wir unsere Funktion zum Zählen der Token testen.
Um die Genauigkeit zu überprüfen, wende ich mich an das Tokenizer-Tool von OpenAI.
Die Tokenzählung ist ungenau, wie die erhebliche Diskrepanz zeigt – unser Programm meldete etwa 1.200 Token, während das Tokenizer-Tool 2.730 angab. Angesichts dieser Diskrepanz ist es ratsam, diese Funktion aus unserem Programm zu entfernen. Ich werde nicht näher darauf eingehen, warum diese Art von Aufgabe generell ein Problem für ein Sprachmodell darstellt und der Verlust an Funktionalität relativ gering ist. Letztendlich würde ich erwarten, dass eine solche Funktion nativ in ChatGPT integriert wird, vor allem, da die Token-Zählung im Hintergrund ständig hin- und hergereicht wird.
Als nächstes wollen wir die Funktion „Get Inspired“ nutzen, um eine neue Idee zu entwickeln. Der Übersichtlichkeit halber zeige ich den Dialog weiter unten an. Wie Sie sehen, habe ich mich dafür entschieden, das Konzept einer Waste-to-Energy-Drohne zu vertiefen, das unser Programm als Option vorschlug, die Idee zusammengefasst und von unserem Programm „speichern“ lassen.
Alles sieht gut aus, und das System hat sich sogar die Freiheit genommen, unsere Idee „SolarSky“ zu nennen. Um dies effektiver zu gestalten, könnten wir eine eigenständige Funktion in die Programmdefinition für diese Aufgabe einbauen oder spezifischere Anweisungen in den Funktionen „Neue Idee bearbeiten“ oder „Neue Idee erweitern“ geben. Auch hier wird uns in der Fertigstellung ein Menü präsentiert, das aus Sicht des Programmablaufs logisch ist.
Nun wollen wir sehen, ob wir „Ideen abrufen“ können.
Das scheint im Einklang mit unseren ursprünglichen Anweisungen zu stehen, die nur den Titel wie gewünscht anbieten. Sie fordert uns auch auf, weiter an einer Idee zu arbeiten, obwohl dies nicht ausdrücklich in der Mini-App programmiert wurde. Als Nächstes wollen wir prüfen, ob die Indizierung des Stammmenüs beibehalten wird. Dazu gebe ich „5“ ein, was der Funktion „Weiter an einer vorherigen Idee arbeiten“ entspricht, und schaue, ob das funktioniert.
Offenbar wird die Indizierung im Kontext der Konversation beibehalten und die Funktion entsprechend aufgerufen. Diese Beobachtung ist bemerkenswert, insbesondere wenn man Szenarien in Betracht zieht, in denen mehrere Indizes aktiv sein könnten. Sie wirft interessante Fragen darüber auf, wie sich das „Programm“ unter solchen Bedingungen verhalten würde. Vielleicht ist es Ihnen entgangen, dass das Programm bei der Abfrage von Benutzereingaben für die Auswahl von Ideenerweiterungen tatsächlich die Indexierungstechnik verwendet hat.
Lassen Sie uns weiter an unserer Idee der wachsenden Gebäude arbeiten.
Sieht wieder gut aus. Das „Programm“ verhält sich wie erwartet und hat auch den genauen Punkt festgehalten, an dem wir im Prozess der Ideenerweiterung pausiert haben.
Hören wir hier auf, unsere Eingabeaufforderung zu testen und sehen wir, was wir mit dieser Technik gelernt haben.
Conclusions and Observations
Um ehrlich zu sein, hat diese Übung, obwohl sie in Umfang und Funktionalität begrenzt ist, meine Erwartungen übertroffen. Wir hätten ChatGPT bitten können, die Mini-App in einer Sprache wie Python zu programmieren und dann den Code Interpreter (jetzt bekannt als Advanced Data Analysis) zu nutzen, um sie in einer persistenten Python-Sitzung auszuführen. Dieser Ansatz hätte jedoch einen Grad an Starrheit mit sich gebracht, der es schwierig gemacht hätte, die Konversationsfunktionalität zu aktivieren, die in unserer Mini-App von Haus aus vorhanden war. Ganz zu schweigen davon, dass wir bei einem Programm mit mehreren sich überschneidenden Funktionen sofort Gefahr liefen, dass der Code nicht funktionierte.
Die Leistung von ChatGPT war besonders beeindruckend, da es das Programmverhalten mit hoher Wiedergabetreue simulierte. Die Eingabeaufforderungen blieben innerhalb der Grenzen der Programmdefinition und selbst in Fällen, in denen das Funktionsverhalten nicht explizit definiert war, ergaben die Vervollständigungen einen logischen Sinn im Zusammenhang mit dem Zweck der Mini-App.
Diese Programmsimulationstechnik könnte gut mit der Funktion „Benutzerdefinierte Anweisungen“ von ChatGPT funktionieren, obwohl es erwähnenswert ist, dass dadurch das Verhalten des Programms auf alle nachfolgenden Interaktionen angewendet würde.
Zu meinen nächsten Schritten gehört eine genauere Untersuchung dieser Technik, um festzustellen, ob ein umfassender Testrahmen Aufschluss darüber geben könnte, wie dieser Ansatz im Vergleich zu anderen Prompt-Engineering-Techniken abschneidet. Diese Art von Übung könnte auch dabei helfen, herauszufinden, für welche spezifischen Aufgaben (oder Aufgabenklassen) diese Technik am besten geeignet ist. Bleiben Sie dran, wir werden mehr berichten.
Quelle: medium.com
Erfahren Sie hier mehr über Lösungen im Bereich Datenqualität oder besuchen Sie eines unserer kostenlosen Webinare.