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

Chatbots mit simulierten Nutzern testen

Nach dieser Lektion: Ich kann einen Dialog mit einem geskripteten Nutzer testen und das Gespräch bewerten.

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

Eine Kundin, die ihre Meinung ändert

Ein simulierter Nutzer ist ein Skript, das den Kunden in einem Gespräch mit Ihrem Assistenten spielt. Er lohnt sich, denn ein Dialog hat keine einzige richtige Antwort, und Testchats von Hand zu tippen, kostet bei jedem Test Zeit.

Anna bittet um eine Erstattung, nennt eine Bestellung und ändert dann ihre Meinung. Hält der Assistent Schritt?

Am Ende dieser Lektion

Notiz

Ich kann einen Dialog mit einem geskripteten Nutzer testen und das Gespräch bewerten.

Schlüsselwörter

BegriffWas er bedeutet
Simulierter Nutzerein Skript, das den Kunden spielt
Rollewer der Nutzer ist und wie er schreibt
Zielwas der Nutzer am Ende will
Abbruchbedingungdie Regel, die den Dialog beendet
Protokolldas ganze Gespräch, Zeile für Zeile

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

Schreiben Sie den Nutzer als Skript

Geben Sie dem Nutzer eine Rolle, ein Ziel und eine Liste von Zeilen. Fügen Sie eine Abbruchbedingung hinzu, etwa ein Auf Wiedersehen oder eine Höchstzahl an Runden, damit der Dialog immer endet.

Ein Skript liefert bei jedem Lauf denselben Nutzer. Ein Modell, das den Nutzer spielt, würde variieren, bei jeder Zeile Guthaben kosten und einen Fehler schwer wiederholbar machen. Beginnen Sie mit einem Skript.

Durchgerechnetes Beispiel: Annas vier Zeilen

ZeileWas Anna sagtWas es testet
1hallo, bitte eine Erstattungob der Assistent nach der Bestellung fragt
2Bestellung A17ob er die Erstattung startet
3eigentlich doch die Bestellung B02ob er den Meinungswechsel bewältigt
4danke, auf Wiedersehenob er den Dialog beendet

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

Bewerten Sie das Protokoll, nicht jede Antwort

Prüfen Sie drei Dinge am ganzen Protokoll. Wurde das Ziel erreicht? Blieben die Runden im Limit? Geschah die Aktion genau so oft wie nötig?

Die letzte Prüfung findet einen stillen Fehler. Ein Assistent, der eine Erstattung für A17 und noch eine für B02 startet, hat das Ziel erreicht und zweimal erstattet.

Modell-Helfer 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.

Modell-Helfer 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.

Dialogtreiber schreiben, Teil 1

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' '// Ein geskripteter Nutzer: eine Rolle, ein Ziel, die Zeilen und ein Meinungswechsel in Zeile 3.' 'const nutzer = {' '  rolle: \"Anna, in Eile, schreibt kurze Nachrichten\",' '  ziel: \"eine Erstattung für die Bestellung B02\",' '  zeilen: [\"hallo, bitte eine Erstattung\", \"Bestellung A17\", \"eigentlich doch die Bestellung B02\", \"danke, auf Wiedersehen\"],' '};' '// Ein Ersatzassistent aus Regeln. Ein echter wäre der Agent, der getestet wird.' 'function assistent(text) {' '  const bestellung = text.match(/[AB][0-9][0-9]/);' '  if (bestellung) return \"Erstattung gestartet für \" + bestellung[0] + \".\";' '  if (text.includes(\"Wiedersehen\")) return \"Auf Wiedersehen.\";' '  return \"Wie lautet die Bestellnummer?\";' '}' > simulation.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.

Dialogtreiber schreiben, Teil 2

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function fuehren(maxRunden) {' '  const protokoll = [];' '  for (let i = 0; i < nutzer.zeilen.length && i < maxRunden; i = i + 1) {' '    protokoll.push(\"nutzer: \" + nutzer.zeilen[i]);' '    const antwort = assistent(nutzer.zeilen[i]);' '    protokoll.push(\"assistent: \" + antwort);' '    if (antwort.includes(\"Wiedersehen\")) break;' '  }' '  return protokoll;' '}' 'const protokoll = fuehren(6);' 'protokoll.forEach(function (zeile) { console.log(zeile); });' 'const erstattungen = protokoll.filter(function (zeile) { return zeile.includes(\"Erstattung gestartet\"); });' >> simulation.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.

Dialogtreiber schreiben, Teil 3

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'console.log(\"Ziel erreicht: \" + protokoll.join(\" \").includes(\"Erstattung gestartet für B02\"));' 'console.log(\"Runden genutzt: \" + protokoll.filter(function (zeile) { return zeile.startsWith(\"nutzer\"); }).length);' 'console.log(\"Erstattungen gestartet: \" + erstattungen.length + \" (der Nutzer wollte eine)\");' 'async function main() {' '  const system = \"Sie sind ein Support-Assistent eines Shops. Fragen Sie nach der Bestellnummer, bevor Sie etwas erstatten. Antworten Sie kurz.\";' '  const probe = \"Gern. Wie lautet die Bestellnummer?\";' '  const text = await fragen([{ role: \"system\", content: system }, { role: \"user\", content: nutzer.zeilen[0] }], probe, 60);' '  console.log(\"Antwort live: \" + text.trim());' '  console.log(\"Fragt nach der Bestellung: \" + text.toLowerCase().includes(\"bestell\"));' '}' 'main();' >> simulation.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.

Den Assistenten mit Anna treiben

Befehl
docker exec -w /home/node/project agent node simulation.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 der Treiber ausgibt

ZeileWas sie zeigt
ProtokollVier Zeilen des Nutzers und vier des Assistenten
Ziel erreichttrue
Runden genutzt4
Erstattungen gestartet2, der Nutzer wollte eine
Antwort liveEine mögliche Ausgabe: eine Frage zur Bestellung

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

Probieren Sie es aus

Tipp

Entfernen Sie in simulation.js die dritte Zeile, „eigentlich doch die Bestellung B02“, und starten Sie erneut. Die gestarteten Erstattungen fallen auf 1, aber das Ziel wird nicht mehr erreicht. Erklären Sie, warum.

Ein häufiger Fehler

Warnung

Viele glauben, ein Dialog bestehe, wenn seine letzte Antwort richtig klingt. Ein höfliches Auf Wiedersehen kann auf zwei Erstattungen folgen. Bewerten Sie, was der Assistent im ganzen Protokoll getan hat: das Ziel, die Aktionen und die Runden.

Ü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.