Prompt-Design

von Arvid Lunnemark in Forschung

Prompting ist wie Webdesign. Nennen wir es Prompt-Design und bauen wir bessere Werkzeuge dafür.

Ich bin normalerweise abgeneigt gegenüber der gängigen Angewohnheit, krampfhaft Analogien aus der alten Welt für neue Phänomene zu suchen. Also haben Sie bitte etwas Geduld mit mir, während ich genau diese Sünde begehe: Ich möchte darlegen, warum Prompting Prompt-Design genannt und mit Webdesign verglichen werden sollte.

Ich sehe Prompting als Kommunikation mit einem zeitlich stark eingeschränkten Menschen. Während LLM-spezifische Techniken (am deutlichsten Chain-of-Thought) sicherlich hilfreich sind, habe ich festgestellt, dass eine der besten Möglichkeiten zur Leistungssteigerung einfach extrem klare und hochwertige Anweisungen sind – ganz ähnlich wie Klarheit und Prägnanz auch echten Menschen helfen, besser zu verstehen.

Prompting-als-klare-Kommunikation lässt Prompting wie Schreiben klingen. Ein Großteil des Promptings, das ich mache, ist jedoch parametrisch: Ich habe eine Reihe von Eingabevariablen und muss meinen Prompt dynamisch an diese anpassen.

Daher fühlt sich Prompting-als-klare-Kommunikation-mit-dynamischer-Eingabe wie die treffendste Charakterisierung an.

Welches andere Gebiet befasst sich mit klarer Kommunikation bei dynamischem Input? Webdesign.

Schauen wir uns alle Ähnlichkeiten an. Prompting und Webdesign:

  1. erfordern Klarheit und haben Kommunikation als primäres Ziel;

  2. müssen auf dynamische Inhalte reagieren – im Gegensatz zu klassischem Schreiben oder Zeitschriften-Layout; und

  3. müssen ihre Inhalte an unterschiedliche Größen anpassen – Bildschirmgrößen beim Webdesign, Kontextfenster beim Prompting.

Aus meiner Erfahrung mit sowohl Prompting als auch Webdesign habe ich außerdem festgestellt, dass ich in beiden Bereichen ähnliche Entwicklerpräferenzen habe:

  1. Den tatsächlichen Prompt anzuschauen ist enorm wichtig, genau wie sich die gerenderte Website anzuschauen enorm wichtig ist. Ich kann keine Website gestalten, wenn ich den HTML- und CSS-Rendering-Prozess in meinem Kopf simulieren muss. Genauso ist es wirklich schwer, gute und klare Prompts zu schreiben, ohne sich die gerenderte Ausgabe eines Prompts mit allen ausgefüllten Eingabevariablen anzusehen.

  2. Zum Beispiel mag der Prompt "Hi ${username} ${message}" zunächst vernünftig aussehen, bis man ihn rendert und feststellt, dass der Benutzername mit der Nachricht verschwimmt.

  3. Komponierbare Komponenten sind sowohl beim Prompting als auch beim Webdesign nützlich.

  4. Deklarativ ist in beiden Fällen besser als imperativ. Es ist wirklich schwer, eine Website zu ändern, bei der alle HTML-Elemente mit document.createElement-Aufrufen erzeugt werden. Ebenso wird das Lesen und Ändern eines Prompts, der aus einer langen Sequenz von str += "..." besteht, schnell unübersichtlich.

  5. In beiden Fällen möchte ich manchmal „Pixel-Perfektion“ erreichen. Wenn ich weniger leistungsfähige Modelle (GPT-3.5 und schlechter) mit Prompts versorge, möchte ich sicherstellen, dass ich keine überflüssigen Zeilenumbrüche oder andere Arten unperfekter Formatierung habe, und beim Design einer Website zählt manchmal jeder Pixel.

Für LLM-Agents lässt sich die Analogie noch weiter treiben: Agent-Prompting kann als der Aufbau einer interaktiven Website für die Agents gesehen werden, auf der sie durch das Aufrufen von Funktionen „Buttons klicken“ können und bei der der Prompt als Reaktion auf einen Funktionsaufruf neu gerendert wird – so wie eine Website als Reaktion auf einen Buttonklick neu gerendert wird.

Natürlich gibt es Unterschiede zwischen Prompt-Design und Webdesign:

  1. Prompting befasst sich ausschließlich mit Text (zumindest vorerst!).

  2. Caching funktioniert anders: Gerade bei Agents möchte man sicherstellen, dass Re-Renders günstig sind, indem man nur die späteren Teile des Prompts ändert. Es gibt hier eine etwas konstruierte Parallele zum Web (man möchte seine Website cache-optimieren), aber ich denke, dass es im Kern eine ziemlich andere Herausforderung ist.

Dennoch haben mich die Gemeinsamkeiten überzeugt, dass Prompting Prompt-Design und nicht Prompt-Engineering genannt werden sollte. Einen Prompt zu schreiben fühlt sich genauso an wie das Designen einer Website und sollte dementsprechend auch so benannt werden.

Die Prompt-Design-Perspektive hat mich dazu inspiriert, Priompt zu erstellen, eine React-ähnliche, JSX-basierte Prompt-Design-Bibliothek.

Priompt v0.1: ein erster Versuch einer Prompt-Design-Bibliothek

Priompt ist ein erster Versuch, eine Prompt-Design-Bibliothek zu erstellen, die von modernen Webdesign-Prinzipien inspiriert ist. Wir verwenden sie intern bei Cursor und sind sehr zufrieden damit.

Ich glaube, die Abstraktionen sind wahrscheinlich nicht in jeder Hinsicht ganz korrekt, aber ich bin zumindest überzeugt, dass JSX eine wesentlich ergonomischere Art ist, Prompts zu schreiben, als String-Templates. Schon die einfache Möglichkeit, Teile des Prompts unkompliziert auskommentieren zu können, macht die Iterationsschleife deutlich schneller.

Priompt wird außerdem mit einer (sehr hastig zusammengebauten) Preview-Website mitgeliefert, auf der du deinen Prompt mit echten Daten ansehen kannst. Während du deine Anwendung entwickelst, kannst du die serialisierten props loggen, die bei jeder Anfrage in eine Komponente eingehen. Wenn du dann unerwartetes Verhalten siehst, kannst du zur Priompt-Preview gehen, dir den exakten Prompt ansehen und den Quellcode ändern, sodass sich der Prompt mit denselben props wie bei der echten Anfrage aktualisiert. Wir haben festgestellt, dass es dadurch leichter wird, an Prompts zu iterieren.

Wenn du es ausprobierst, lass mich bitte wissen, was du denkst! Ich würde sehr gern mehr Ideen in dieser Richtung sehen – oder einfach gesagt bekommen, dass ich völlig falsch liege und Prompt-Design dumm ist :).

Einschränkungen

Modelle verändern sich schnell – und genauso müssen sich auch Prompting-Techniken anpassen. In diesem Zusammenhang sehe ich ein paar Einschränkungen bei der Bezeichnung Prompt Design:

  1. Pixelgenaue Designs sind für GPT-4 unwichtig und werden für GPT-4.5 oder bessere Modelle wahrscheinlich überflüssig sein.

  2. Die Einschränkung durch das Kontextfenster könnte verschwinden, wenn man den jüngsten Trend zu Modellen mit langem Kontext extrapoliert. Davon bin ich allerdings nicht überzeugt.

  3. OpenAI scheint sich in die Richtung zu bewegen, Entwickler:innen immer weniger Kontrolle über den Prompt zu geben; es ist möglich, dass es in einem Jahr so etwas wie einen Prompt gar nicht mehr gibt und der API-Aufruf uns nur nach den rohen Eingaben plus einer Anweisung fragt. Dieser Trend zu weniger Kontrolle begann mit dem Chat-Format und hat sich mit dem kürzlich angekündigten „Function Calling“ fortgesetzt.

  4. Es ist möglich, dass Caching einer der wichtigsten Aspekte des Promptings ist – in diesem Fall klingt das Ganze eher nach Engineering als nach Design.

  5. Vielleicht ist Prompt Design zu Low-Level und sollte einem höherstufigen Framework oder Compiler überlassen werden (z. B. langchain). Ich halte das für möglich, aber angesichts der sich schnell verändernden Natur von LLMs ziehe ich es persönlich vor, dem Rohmodell so nahe wie möglich zu bleiben.

Obligatorische letzte Anmerkung

...weil ich sehr gerne mit dir zusammenarbeiten würde: Bei Cursor bauen wir Cursor, einen KI‑first-Code-Editor. Wenn du dich für Prompt-Design, LLMs zum Programmieren oder die Entwicklung großartiger Produkte begeisterst, schreib mir bitte eine E‑Mail an arvid@cursor.com. Wir sind fünf Leute in San Francisco, all meine Kolleg:innen sind außergewöhnlich, und wir möchten noch ein paar weitere außergewöhnliche Menschen – Coder:innen und Designer:innen – dazugewinnen, die mit uns an der Zukunft des Programmierens bauen.

Kategorisiert unter: Forschung

Autor: Arvid Lunnemark

Prompt-Design · Cursor