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

Sicher protokollieren in einer KI-App

Nach dieser Lektion: Ich kann genug protokollieren, um eine Anfrage zu prüfen, und nicht mehr, als ich sollte.

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

Ein Protokoll, das hilft und nichts verrät

Ein Protokoll ist eine Aufzeichnung, die eine App über ihr Tun schreibt. Ist eine Antwort langsam oder falsch, schauen Sie dort nach.

Ein sorgloses Protokoll kopiert jeden Prompt und jede Adresse in eine Datei, die viele lesen können. Ziel ist, genug aufzuheben, um Fehler zu beheben, und nicht mehr.

Am Ende dieser Lektion

Notiz

Ich kann genug protokollieren, um eine Anfrage zu prüfen, und nicht mehr, als ich sollte.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Protokolleintrageine Zeile, die ein Programm über ein Ereignis schreibt
Anfrage-Kennungeine Marke, die alle Einträge einer Anfrage verbindeta-001
Hashein kurzer Code aus einem Wert, der sich nicht zurückrechnen lässt
Salzein geheimes Wort, das vor dem Hashen untergemischt wird
Kürzeneinen Wert auf wenige Zeichen zuschneiden

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

Heben Sie auf, was Sie zur Fehlersuche brauchen

Fragen Sie, wofür Sie das Protokoll nutzen. Für eine langsame Antwort brauchen Sie die Anfrage-Kennung, die Zeit, das Modell und die Länge. Die Worte brauchen Sie nicht.

Ein Eintrag ohne die Worte lässt sich trotzdem seiner Anfrage zuordnen. Die Anfrage-Kennung ist der Schlüssel, der beide verbindet.

Durchgerechnetes Beispiel: ein Eintrag, vorher und nachher

FeldRoher EintragSicherer EintragWarum
anfrage_ida-001a-001Sie verbindet das Protokoll mit der Anfrage
nutzer_email[email protected]3ee95f14Ein gesalzener Hash zählt weiter eine Person
nachrichtBitte erstatten Sie meine Bestellung36 (ihre Länge)Die Worte bleiben aus dem Protokoll
ms420420Nötig, um langsame Antworten zu finden

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

Ein Hash verbirgt den Wert, nicht die Person

Ein Hash macht aus einer Adresse einen kurzen Code. Dieselbe Adresse ergibt immer denselben Code, Sie können also weiter Nutzer zählen. Niemand rechnet den Code durch bloßes Lesen zurück.

Ein Salz macht den Code schwerer erratbar. Legen Sie außerdem fest, wer das Protokoll lesen darf. Ein Protokoll, das niemand lesen muss, sollte es nicht geben.

Ein häufiger Fehler

Warnung

Viele denken, ein Hash sei anonym. Das stimmt nicht. Wer eine Liste von Adressen hat, kann alle hashen und die Codes abgleichen. Ein Hash ist ein Pseudonym, und das Protokoll bleibt personenbezogen. Nutzen Sie ein Salz und halten Sie das Salz vom Protokoll fern.

Die Modellhilfe 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\";' '// Die Token einer Antwort oder null, wenn sie keine nennt.' 'function zaehlen(daten, name) {' '  return daten.usage && typeof daten.usage[name] === \"number\" ? daten.usage[name] : null;' '}' > 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 Modellhilfe schreiben, Teil 2

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' '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 || 100 }),' '      signal: AbortSignal.timeout(30000),' '    });' '    if (res.ok === false) throw new Error(\"Status \" + res.status);' '    const d = await res.json();' '    return { text: d.choices[0].message.content, eingabe: zaehlen(d, \"prompt_tokens\"), ausgabe: zaehlen(d, \"completion_tokens\"), aufgezeichnet: false };' '  } catch (fehler) {' '    console.log(\"Aufgezeichnete Probe: Kein Modell hat geantwortet (\" + fehler.message + \").\");' '    return { text: probe, eingabe: null, ausgabe: null, aufgezeichnet: true };' '  }' '}' '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.

Das sichere Protokoll schreiben, Teil 1

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' 'const crypto = require(\"crypto\");' 'const roh = [' '  { anfrage_id: \"a-001\", nutzer_email: \"[email protected]\", nachricht: \"Bitte erstatten Sie meine Bestellung\", modell: \"lab\", ms: 420 },' '  { anfrage_id: \"a-002\", nutzer_email: \"[email protected]\", nachricht: \"Rufen Sie mich unter 01234567890 an\", modell: \"lab\", ms: 380 },' '  { anfrage_id: \"a-003\", nutzer_email: \"[email protected]\", nachricht: \"Wo ist mein Paket\", modell: \"lab\", ms: 910 },' '];' > logsafe.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 sichere Protokoll schreiben, Teil 2

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function kurzHash(v) {' '  return crypto.createHash(\"sha256\").update(\"labor-salz:\" + v).digest(\"hex\").slice(0, 8);' '}' 'function sicher(r) {' '  return { anfrage_id: r.anfrage_id, nutzer: kurzHash(r.nutzer_email), laenge: r.nachricht.length, modell: r.modell, ms: r.ms };' '}' 'function enthaeltEmail(r) {' '  return Object.values(r).some(function (v) { return typeof v === \"string\" && v.includes(\"@\"); });' '}' >> logsafe.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 sichere Protokoll schreiben, Teil 3

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  const aus = roh.map(sicher);' '  roh.forEach(function (r, i) {' '    console.log(r.anfrage_id + \" roh mit E-Mail: \" + enthaeltEmail(r) + \" | sicher mit E-Mail: \" + enthaeltEmail(aus[i]));' '    console.log(\"  \" + JSON.stringify(aus[i]));' '  });' '  console.log(\"a-001 und a-003 gleiche Person: \" + (aus[0].nutzer === aus[2].nutzer));' '  console.log(\"a-001 und a-002 gleiche Person: \" + (aus[0].nutzer === aus[1].nutzer));' '  const q = \"Schreiben Sie in einem kurzen Satz, warum man die Länge einer Nachricht protokolliert und nicht die Nachricht.\";' '  const probe = \"Eine Länge hilft, langsame Antworten zu finden, und sagt nichts über die Person.\";' '  const antwort = await fragen([{ role: \"user\", content: q }], probe, 60);' '  console.log(\"Das Modell sagte: \" + antwort.text);' '}' 'main();' >> logsafe.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 sichere Protokoll ausführen

Befehl
docker exec -w /home/node/project agent node logsafe.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 Run ausgibt

ZeileWas sie zeigt
a-001 roh mit E-Mail: true | sicher mit E-Mail: falseDer sichere Eintrag hat keine Adresse
{"anfrage_id":"a-001","nutzer":"3ee95f14",...}Der Hash und die Länge, sonst nichts
a-001 und a-003 gleiche Person: trueDieselbe Person lässt sich weiter zuordnen
a-001 und a-002 gleiche Person: falseZwei Personen bleiben getrennt
Das Modell sagte: ...Ein Satz. Die Worte ändern sich bei jedem Lauf

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.