Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Prompts versionieren und ausrollen

Nach dieser Lektion: Ich kann einen Prompt wie Code versionieren, prüfen und ausrollen.

Lektion, 65 Min.7 BefehleLab für KI-Coding-Agenten: mit opencode Code erklären und reparieren lassen und die Arbeit prüfen

Einen Prompt wie auszulieferenden Code behandeln

Ein Prompt ändert, was eine Funktion tut, und braucht deshalb die Sorgfalt, die Code bekommt. Das heißt: eine Datei, eine Version, ein Review, ein schrittweiser Rollout und ein Weg zurück. Das ist wichtig, weil ein geändertes Wort einen Fall verbessern und einen anderen brechen kann, ohne dass ein Test es zeigt.

Ein Team ändert am Freitagnachmittag einen Prompt in einem Dashboard. Am Montag kommen die Beschwerden. Niemand weiß, was sich geändert hat, und niemand kann es zurücknehmen.

Am Ende dieser Lektion

Notiz

Ich kann einen Prompt wie Code versionieren, prüfen und ausrollen.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Prompt-Versionein benannter, gespeicherter Stand eines Promptsv2
Bewertungsfalleine Eingabe mit einer Bestehensregel
Rückschrittein Fall, der vorher bestand und jetzt scheitert
Gestufter Rollouteine Änderung an einen Teil der Nutzer ausliefern
Eimereine Zahl von 0 bis 99 für einen Nutzer

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein Prompt lebt in einer versionierten Datei

Legen Sie jeden Prompt in einer Datei im Repository ab, mit Namen und Version. Eine Änderung wird dann zu einem Commit, einem Review und einem Unterschied. Der Code verweist auf einen Prompt über Name und Version, nie über eine eingefügte Zeichenkette.

Die Version steht in jedem Protokolleintrag. Ist eine Antwort schlecht, können Sie sagen, welcher Prompt sie erzeugt hat.

Eine Änderung an aufgezeichneten Ergebnissen beurteilen

Lassen Sie dieselben Bewertungsfälle mit dem alten und dem neuen Prompt laufen. Vergleichen Sie die Bestehensquote und listen Sie die Rückschritte auf: Fälle, die bestanden und jetzt scheitern. Zwei Prompts mit gleicher Quote können in verschiedenen Fällen bestehen.

Markieren Sie manche Fälle als Pflicht, etwa eine Ablehnung, die einen Nutzer schützt. Eine Änderung, die einen davon verfehlt, geht nicht raus, egal wie die Quote ist.

Beispiel: v1 gegen v2

Fallv1v2Hinweis
f1 (Pflicht)bestehtbestehtBleibt
f2 (Pflicht)bestehtbestehtBleibt
f3scheitertbestehtBehoben
f4bestehtbestehtBleibt
f5bestehtscheitertRückschritt: Ein Mensch muss hinsehen

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Über einen deterministischen Eimer ausrollen

Stellen Sie nicht alle Nutzer auf einmal um. Machen Sie aus einer Nutzer-ID mit einer festen Funktion einen Eimer von 0 bis 99. Ein Nutzer bekommt den neuen Prompt, wenn sein Eimer unter dem Rollout-Prozentsatz liegt.

Derselbe Nutzer bekommt immer dieselbe Version, und ein höherer Prozentsatz fügt nur Nutzer hinzu. Nehmen Sie nie eine Zufallszahl pro Anfrage: Eine Person sähe beide Versionen.

Einen Weg zurück behalten

Behalten Sie die alte Version im Repository und den Prozentsatz in einer einzigen Einstellung. Um zurückzugehen, setzen Sie den Prozentsatz auf null. Kein Deployment, keine Bearbeitung, kein Streit.

Erhöhen Sie den Prozentsatz in Stufen und beobachten Sie auf jeder Stufe dieselben Messwerte: Quote auf echten Stichproben, Kosten und Beschwerden.

Ein häufiger Fehler

Warnung

Viele glauben, eine höhere Bestehensquote heiße eine sichere Änderung. Sie kann einen Tausch verbergen: ein Fall behoben, ein anderer gebrochen. Lesen Sie die Liste der Rückschritte und prüfen Sie die Pflichtfälle, nicht nur die Quote.

Das Modell-Hilfsskript schreiben, Teil 1

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const basis = process.env.AI_URL || \"http://ai:4000\";' 'async function fragen(nachrichten, probe, max) {' '  try {' '    const res = await fetch(basis + \"/v1/chat/completions\", {' '      method: \"POST\",' '      headers: { \"content-type\": \"application/json\", authorization: \"Bearer lab\" },' '      body: JSON.stringify({ model: \"lab\", messages: nachrichten, max_tokens: max || 200 }),' '      signal: AbortSignal.timeout(30000),' '    });' '    if (res.ok === false) throw new Error(\"Status \" + res.status);' '    return (await res.json()).choices[0].message.content;' > model.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Das Modell-Hilfsskript schreiben, Teil 2

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' '  } catch (fehler) {' '    console.log(\"Aufgezeichnete Probe: Kein Modell hat geantwortet (\" + fehler.message + \").\");' '    const liste = [].concat(probe);' '    const runde = nachrichten.filter(function (m) { return m.role === \"assistant\"; }).length;' '    return liste[Math.min(runde, liste.length - 1)];' '  }' '}' 'module.exports = { fragen };' >> model.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Prompt-Auslieferung schreiben, Teil 1

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const fs = require(\"fs\");' 'const { fragen } = require(\"./model\");' '// Ein Prompt lebt in einer Datei mit Version, so ist eine Änderung ein Unterschied.' 'const datei = { name: \"zusammenfassung\", version: \"v2\", text: \"Fassen Sie das Ticket in einem Satz zusammen. Nennen Sie das Produkt.\" };' 'fs.writeFileSync(\"prompt-zusammenfassung.json\", JSON.stringify(datei, null, 1));' '// Aufgezeichnete Bewertungsergebnisse: Hat jeder Fall bestanden? Für die Lektion erfunden.' 'const alt = { f1: true, f2: true, f3: false, f4: true, f5: true };' 'const neu = { f1: true, f2: true, f3: true, f4: true, f5: false };' 'const PFLICHT = [\"f1\", \"f2\"]; // Fälle, die nie scheitern dürfen' > prompts.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Prompt-Auslieferung schreiben, Teil 2

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function quote(lauf) {' '  const namen = Object.keys(lauf);' '  const bestanden = namen.filter(function (n) { return lauf[n]; });' '  return Math.floor(bestanden.length * 100 / namen.length);' '}' 'function gruende(a, b) {' '  const ausgabe = [];' '  if (quote(b) < quote(a)) ausgabe.push(\"Quote niedriger\");' '  PFLICHT.forEach(function (n) { if (b[n] === false) ausgabe.push(\"Pflichtfall scheitert: \" + n); });' '  return ausgabe;' '}' 'const gerutscht = Object.keys(alt).filter(function (n) { return alt[n] && neu[n] === false; });' 'console.log(\"alt\", quote(alt), \"neu\", quote(neu));' 'console.log(\"darf raus:\", gruende(alt, neu).length === 0, \"Rückschritte:\", gerutscht.join(\",\"));' >> prompts.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Prompt-Auslieferung schreiben, Teil 3

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function eimer(nutzer) {' '  let h = 0;' '  for (const z of nutzer) h = (h * 31 + z.charCodeAt(0)) % 1000003;' '  return h % 100;' '}' 'const rollout = { prompt: \"v2\", rueckfall: \"v1\", prozent: 20 };' 'function version(n) { return eimer(n) < rollout.prozent ? rollout.prompt : rollout.rueckfall; }' '[\"felix\", \"eva\", \"ben\", \"anna\", \"paul\", \"clara\"].forEach(function (n) { console.log(n, eimer(n), version(n)); });' 'rollout.prozent = 0; // der Weg zurück ist eine Zahl' 'console.log(\"nach dem Zurückrollen:\", version(\"felix\"), version(\"eva\"));' >> prompts.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Prompt-Auslieferung schreiben, Teil 4

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  const text = datei.text + \" Ticket: Das Orbit-Telefon lädt seit Montag nicht mehr.\";' '  const probe = \"Das Orbit-Telefon lädt seit Montag nicht mehr.\";' '  console.log(\"Echter Aufruf mit v2:\", await fragen([{ role: \"user\", content: text }], probe, 40));' '}' 'main();' >> prompts.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Einen Prompt beurteilen und ausrollen

Befehl
docker exec -w /home/node/project agent node prompts.js

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Was aufgezeichnet ist und was echt

Die Bewertungsergebnisse sind aufgezeichnet und erfunden. Ein echtes Team lässt eigene Fälle laufen und legt die Ergebnisse neben der Prompt-Version ab. Die Eimer-Funktion und die Rollout-Einstellung sind die echte Technik.

Der Run schreibt prompt-zusammenfassung.json. Öffnen Sie sie und lesen Sie die Version.

Eine mögliche Ausgabe

ZeileWas sie zeigt
alt 80 neu 80Die Bestehensquote ist gleich
darf raus: true Rückschritte: f5Die Regel erlaubt es, und ein Mensch liest trotzdem f5
felix 5 v2 und die anderen NutzerJeder Nutzer hat einen festen Eimer und eine feste Version
nach dem Zurückrollen: v1 v1Der Prozentsatz null schickt alle zu v1

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Über dieses Lab und seinen Quellcode: Lab für KI-Coding-Agenten: mit opencode Code erklären und reparieren lassen und die Arbeit prüfen

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.