Risiken aufschreiben, damit keines fehlt
Ein Risikoregister ist eine Tabelle dessen, was bei einer Funktion schiefgehen kann, wie wahrscheinlich das ist und was Sie dagegen tun.
Ein Team, das über Risiken nur spricht, vergisst einige. Ein Register steht auf Papier. So prüfen Sie es auf Lücken und ordnen das Schlimmste nach vorn.
Am Ende dieser Lektion
Notiz
Ich kann die Risiken einer KI-Funktion so aufschreiben, dass nichts fehlt.
Schlüsselwörter
| Begriff | Was er bedeutet |
|---|---|
| Risiko | etwas, das für einen Menschen schiefgehen kann |
| Wahrscheinlichkeit | wie wahrscheinlich es ist, von 1 bis 3 |
| Auswirkung | wie schlimm es wäre, von 1 bis 3 |
| Maßnahme | was Sie tun, damit ein Risiko kleiner wird |
| Bereich | ein Teil des Weges der Daten, etwa Speicherung |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Jedes Risiko hat eine Punktzahl und eine Maßnahme
Geben Sie jedem Risiko eine Wahrscheinlichkeit und eine Auswirkung, jeweils von 1 bis 3. Die Punktzahl ist das Produkt beider. Eine Punktzahl bis 2 ist niedrig, 3 oder 4 ist mittel, und 6 oder 9 ist hoch.
Jede Zeile braucht außerdem eine Maßnahme. Ein Risiko ohne Plan ist nur eine Sorge.
Durchgerechnetes Beispiel: Wahrscheinlichkeit mal Auswirkung
| Risiko | Wahrscheinlichkeit | Auswirkung | Punktzahl | Stufe |
|---|---|---|---|---|
| Prompt enthält eine E-Mail | 3 | 2 | 6 | Hoch |
| Protokoll speichert ganze Prompts | 2 | 3 | 6 | Hoch |
| Sicherung behält gelöschte Daten | 2 | 2 | 4 | Mittel |
| Beschäftigte lesen jeden Chat | 1 | 3 | 3 | Mittel |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein Register kann Lücken und schlechte Zeilen haben
Eine Zeile kann falsch sein: eine Wahrscheinlichkeit von 5 oder eine leere Maßnahme. Ein Register kann auch unvollständig sein. Prüfen Sie, dass jeder Bereich des Datenwegs mindestens eine Zeile hat.
Typische Bereiche sind Erhebung, Versand, Speicherung, Zugriff, Löschung und Training, also die Nutzung der Daten, um ein Modell etwas zu lehren. Ein Bereich ohne Zeile ist eine Lücke.
Ein häufiger Fehler
Warnung
Viele denken, die Punktzahl sei eine Messung. Sie ist ein Urteil, das als Zahl geschrieben steht, und zwei Menschen können abweichen. Nutzen Sie sie, um das Gespräch zu ordnen, und nie, um zu beweisen, dass eine Funktion sicher ist. Ein kurzes Register kann einfach ein unvollständiges sein.
Die Modellhilfe schreiben, Teil 1
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
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.
Die Registerprüfung schreiben, Teil 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' 'const erforderlich = [\"erhebung\", \"versand\", \"speicherung\", \"zugriff\", \"loeschung\", \"training\"];' 'const register = [' ' { risiko: \"Prompt enthält eine E-Mail\", bereich: \"versand\", w: 3, a: 2, massnahme: \"Vorher schwärzen\" },' ' { risiko: \"Protokoll speichert ganze Prompts\", bereich: \"speicherung\", w: 2, a: 3, massnahme: \"Nur die Länge protokollieren\" },' ' { risiko: \"Sicherung behält gelöschte Daten\", bereich: \"loeschung\", w: 2, a: 2, massnahme: \"\" },' ' { risiko: \"Beschäftigte lesen jeden Chat\", bereich: \"zugriff\", w: 1, a: 3, massnahme: \"Leser begrenzen\" },' ' { risiko: \"Anbieter behält Prompts\", bereich: \"erhebung\", w: 0, a: 3, massnahme: \"Vertrag prüfen\" },' '];' > register.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 Registerprüfung schreiben, Teil 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function stufe(s) { return s <= 2 ? \"niedrig\" : s <= 4 ? \"mittel\" : \"hoch\"; }' 'function probleme(r) {' ' const aus = [];' ' if (r.w < 1 || r.w > 3) aus.push(\"Wahrscheinlichkeit außerhalb 1 bis 3\");' ' if (r.a < 1 || r.a > 3) aus.push(\"Auswirkung außerhalb 1 bis 3\");' ' if (r.massnahme.trim().length === 0) aus.push(\"keine Maßnahme\");' ' return aus;' '}' >> register.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 Registerprüfung schreiben, Teil 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function abgedeckt(bereich) {' ' return register.some(function (r) { return r.bereich === bereich; });' '}' 'async function main() {' ' const rang = register.slice().sort(function (a, b) { return b.w * b.a - a.w * a.a; });' ' rang.forEach(function (r) {' ' const s = r.w * r.a;' ' console.log(s + \" \" + stufe(s) + \" | \" + r.risiko + \" | \" + JSON.stringify(probleme(r)));' ' });' ' console.log(\"fehlende Bereiche: \" + JSON.stringify(erforderlich.filter(function (b) { return abgedeckt(b) === false; })));' >> register.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 Registerprüfung schreiben, Teil 4
docker exec -w /home/node/project agent sh -c "printf '%s\n' ' const q = \"Nennen Sie in einem kurzen Satz eine Maßnahme gegen dieses Risiko: Eine Sicherung behält Daten nach einer Löschanfrage.\";' ' const probe = \"Legen Sie eine kurze Frist für Sicherungen fest und sagen Sie der Person, wann sie frei wird.\";' ' const antwort = await fragen([{ role: \"user\", content: q }], probe, 60);' ' console.log(\"Das Modell sagte: \" + antwort.text);' '}' 'main();' >> register.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 Registerprüfung ausführen
docker exec -w /home/node/project agent node register.jsHier 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
| Zeile | Was sie zeigt |
|---|---|
| 6 hoch | Prompt enthält eine E-Mail | [] | Das schlimmste Risiko, ohne Problem |
| 4 mittel | Sicherung behält gelöschte Daten | ["keine Maßnahme"] | Eine Zeile mit fehlendem Teil |
| 0 niedrig | Anbieter behält Prompts | ["Wahrscheinlichkeit außerhalb 1 bis 3"] | Eine Zeile mit falscher Zahl |
| fehlende Bereiche: ["training"] | Ein Bereich ohne Zeile |
| Das Modell sagte: ... | Ein Satz. Die Worte ändern sich bei jedem Lauf |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.