Einstieg: Vielleicht war nicht das Modell das Problem
In Schritt 8 habe ich gemerkt, dass ein großer, fester Prompt irgendwann selbst zum Problem wird. Ich hatte lange versucht, meinen Prompt immer genauer zu machen. Immer wenn etwas schiefging, kam eine neue Regel dazu. Irgendwann war der Prompt so groß, dass er für völlig unterschiedliche Aufgaben gleichzeitig zuständig sein sollte. Aber das funktionierte nicht.
Die eigentliche Erkenntnis war: Der Prompt darf nicht starr sein. Mein eigenes System soll zuerst erkennen, was für eine Aufgabe vorliegt. Danach stellt es nur die Regeln, Informationen und Anweisungen zusammen, die für genau diese Aufgabe gebraucht werden. Daraus entstand mein Flex-Prompt.
Nicht jede Frage ist dieselbe Aufgabe
Eine Eingabe wie „Guten Morgen“ braucht etwas völlig anderes als „Warum fällt ein Apfel auf den Boden?“ Und beides braucht wieder andere Anweisungen als „Wie repariere ich meine Waschmaschine?“
Der Fehler war, all diese Fälle mit demselben großen Regelblock behandeln zu wollen. Eine Begrüßung braucht keine Wissensregeln. Eine Wissensfrage braucht keine Sicherheitshinweise. Und eine Reparaturanleitung braucht andere Informationen als eine einfache Erklärung.
Das eigene System entscheidet zuerst
Das war der zentrale Wechsel: Bevor Ollama überhaupt etwas bekommt, soll mein eigenes Programm zuerst entscheiden, was für eine Art Aufgabe vorliegt. Es muss wissen:
- Welche Informationen werden gebraucht?
- Welche Regeln sind für diese Aufgabe wichtig?
- Welche Regeln sind für diese Aufgabe überflüssig?
- Welche Daten sollen mitgeschickt werden?
Erst danach wird der Prompt zusammengestellt. Sehr wichtig dabei: Das Sprachmodell entscheidet diese Grundstruktur nicht selbst. Mein eigenes System bereitet den Auftrag vor.
Was „Flex-Prompt“ für mich bedeutete
Ein offizieller Fachbegriff war das nicht. Flex-Prompt war einfach meine eigene Bezeichnung für dieses Prinzip. Der Prompt besteht nicht mehr aus einem einzigen festen Text. Er wird aus einzelnen Bausteinen zusammengesetzt.
- Grundregeln
- Aufgabe
- vorhandenes Wissen
- besondere Einschränkungen
- gewünschte Antwortform
Je nach Situation werden nur die passenden Teile verwendet. Der Rest bleibt weg.
Ein einfaches Beispiel
Bei einer Begrüßung reicht vielleicht:
- freundlich antworten
- kurz bleiben
Bei einer Wissensfrage braucht das System vielleicht:
- vorhandene Informationen einfügen
- keine unbekannten Fakten erfinden
- Unsicherheit kenntlich machen
Bei einer Reparaturfrage können zusätzlich wichtig sein:
- Gerät
- Modell
- Symptom
- vorhandene Anleitung
- Sicherheitshinweise
Der Prompt wächst also nicht einfach immer weiter. Er verändert sich abhängig von der Aufgabe.
Warum das für mich besser funktionierte
Der Prompt wurde dadurch übersichtlicher. Ollama bekam weniger unnötige Anweisungen. Mein eigenes Programm übernahm mehr Verantwortung. Und ich konnte Fehler besser eingrenzen.
Wenn eine Reparaturanfrage schlecht funktionierte, musste ich nicht mehr den gesamten Prompt umbauen. Ich konnte genau den Teil prüfen, der für Reparaturfragen zuständig war.
Prompt und Programmlogik trennen
Das ist ein wichtiger Lernschritt: Feste Entscheidungen gehören möglichst in die Programmlogik. Das Sprachmodell soll nicht selbst erraten müssen, welche Regeln gerade gelten.
Das eigene Programm kann zum Beispiel entscheiden:
- welche Aufgabe erkannt wurde
- welcher Prompt-Baustein gebraucht wird
- welches Wissen mitgeschickt wird
- ob überhaupt ein Modell gefragt werden soll
Das Modell bekommt anschließend einen möglichst klaren Auftrag. Es muss nicht mehr raten.
Damit begann mein System modularer zu werden
Aus einem großen Prompt entstanden langsam getrennte Bereiche. Ein Teil kümmerte sich um Wissen. Ein anderer um bestimmte Aufgaben. Andere Teile um Regeln oder Zustände.
Das war damals noch nicht die fertige Architektur. Aber die Richtung wurde sichtbar.
Die Grenzen des Flex-Prompts
Damit waren nicht alle Probleme gelöst. Auch ein dynamischer Prompt macht ein Sprachmodell nicht automatisch zuverlässig. Das Modell kann weiterhin:
- Informationen falsch gewichten
- etwas missverstehen
- Lücken füllen
- eine unerwünschte Antwort erzeugen
Der Flex-Prompt löste für mich vor allem ein anderes Problem: Ich konnte besser kontrollieren, welchen Auftrag das Modell überhaupt bekommt.
Ein neuer Gedanke entsteht
Je mehr Aufgaben mein eigenes Programm übernahm, desto deutlicher wurde mir: Vielleicht muss das Sprachmodell gar nicht so viel entscheiden. Wenn mein eigenes System bereits erkennt, welche Aufgabe vorliegt, welches Wissen gebraucht wird und welche Regeln gelten – warum sollte Ollama dann noch über alles andere entscheiden?
Dieser Gedanke wurde später sehr wichtig.
Schritt 9 ist geschafft, wenn …
- du verstanden hast, dass ein Prompt nicht für jede Aufgabe gleich aussehen muss.
- du weißt, dass unterschiedliche Aufgaben unterschiedliche Anweisungen brauchen.
- du den Prompt aus Bausteinen zusammensetzen kannst.
- du feste Entscheidungen lieber in die eigene Programmlogik legst.
- dein eigenes System den Auftrag vorbereitet, bevor das Sprachmodell ihn bekommt.
- du erkennst, dass der Flex-Prompt ein wichtiger Schritt weg von „Ollama entscheidet alles“ war.
Serien-Navigation
Du arbeitest bereits mit dynamischen Prompts und möchtest direkt zum nächsten Wendepunkt? Dann geht es in Schritt 10 darum, warum ich irgendwann dachte: „ChatGPT kann ich so nicht nachbauen – also alles wieder einstampfen?“
Ausblick: Was in Schritt 10 passiert
Das System funktioniert. Es gibt endlich Antworten. Nicht immer perfekt, aber es funktioniert. Gleichzeitig wird klar: Ein ChatGPT kann ich mit meinen eigenen Mitteln so nicht nachbauen. Die erste Reaktion war: Alles wieder einstampfen? Dann kam die Gegenfrage: Wirklich? Denn das System funktioniert bereits.
Genau aus diesem Spannungsfeld entsteht später die Idee, Fähigkeiten als einzelne Module zu bauen. Aber das ist der Stoff für Schritt 10.