Eine Checkliste vor dem Start eines Agenten
Eine Sicherheitsprüfung kontrolliert den Entwurf eines Agenten vor dem Einsatz gegen eine Checkliste. Jeder Punkt ist eine Frage mit Ja oder Nein, daher kommen zwei Prüfende zum selben Ergebnis.
Das ist wichtig, weil die Lektionen dieses Moduls nur helfen, wenn alle zusammenwirken. Ein Entwurf mit gutem Ordner, aber ohne Weg zum Anhalten bleibt unsicher.
Am Ende dieser Lektion
Notiz
Ich kann den Entwurf eines Agenten anhand einer Checkliste prüfen.
Schlüsselwörter
| Begriff | Was er bedeutet |
|---|---|
| Checkliste | eine feste Liste von Fragen mit Ja oder Nein |
| Entwurf | welche Werkzeuge, Daten und Grenzen ein Agent hat |
| Grenze | eine Obergrenze für Schritte oder Kosten |
| Notaus | ein Weg, mit dem eine Person den Agenten anhält |
| Protokoll | eine Aufzeichnung dessen, was der Agent getan hat |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Sechs Bereiche, acht Fragen
Die Checkliste deckt sechs Bereiche ab: Werkzeuge, Daten, Ordner, Grenzen, einen Weg zum Anhalten und eine Aufzeichnung. Jeder Bereich hat eine oder mehrere Fragen mit Ja oder Nein.
Ein Entwurf besteht nur, wenn jede Frage besteht. Nennen Sie jeden Mangel mit seinem Bereich, damit die Abhilfe leicht zu finden ist.
Durchgerechnetes Beispiel: drei Entwürfe
| Entwurf | Mängel | Welche |
|---|---|---|
| helfer | 0 | Keine: er besteht |
| bauer | 4 | Hat ein Shell-Werkzeug, schreibt überall, kein Schrittlimit, kein Protokoll |
| kundschafter | 5 | Keine Werkzeugliste, Geheimnisse im Prompt, keine Grenzen, kein Notaus |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein häufiger Fehler
Warnung
Viele denken, eine starke Kontrolle mache einen Entwurf sicher. Das stimmt nicht. Der bauer hat einen Notaus, schreibt aber überall hin und führt kein Protokoll. Sicherheit besteht aus Schichten, und die schwächste fehlende Schicht versagt zuerst.
Zahlen brauchen eine Kante
Eine Grenze ist nur dann eine Prüfung, wenn sie eine Kante hat. Hier darf ein Lauf höchstens 20 Schritte machen. Ein Entwurf mit 20 besteht. Einer mit 21 oder ganz ohne Grenze fällt durch.
Sagen Sie, wo die Kante liegt, testen Sie beide Seiten, und werten Sie einen fehlenden Wert als Mangel.
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 Entwurfsprüfung schreiben, Teil 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' 'const pruefungen = [' ' [\"Werkzeuge: keine Positivliste\", function (d) { return d.positivliste === false; }],' ' [\"Werkzeuge: hat Shell\", function (d) { return d.werkzeuge.indexOf(\"shell\") >= 0; }],' ' [\"Ordner: Schreiben nicht eingegrenzt\", function (d) { return d.schreibenErlaubt && (d.wurzel === \"\" || d.wurzel === \"/\"); }],' ' [\"Daten: Geheimnisse im Prompt\", function (d) { return d.geheimnisse; }],' > pruefung.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 Entwurfsprüfung schreiben, Teil 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' ' [\"Grenzen: kein Schrittlimit\", function (d) { return d.maxSchritte === null || d.maxSchritte > 20; }],' ' [\"Grenzen: kein Kostenlimit\", function (d) { return d.maxKosten === null; }],' ' [\"Anhalten: kein Notaus\", function (d) { return d.notaus === false; }],' ' [\"Aufzeichnung: kein Protokoll\", function (d) { return d.protokoll === false; }],' '];' 'function maengel(d) { return pruefungen.filter(function (c) { return c[1](d); }).map(function (c) { return c[0]; }); }' >> pruefung.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 Entwurfsprüfung schreiben, Teil 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const entwuerfe = [' ' { name: \"helfer\", werkzeuge: [\"lesen\", \"schreiben\"], positivliste: true, schreibenErlaubt: true, wurzel: \"arbeit/\", geheimnisse: false, maxSchritte: 10, maxKosten: 5, notaus: true, protokoll: true },' ' { name: \"bauer\", werkzeuge: [\"lesen\", \"schreiben\", \"shell\"], positivliste: true, schreibenErlaubt: true, wurzel: \"/\", geheimnisse: false, maxSchritte: null, maxKosten: 20, notaus: true, protokoll: false },' ' { name: \"kundschafter\", werkzeuge: [\"suchen\"], positivliste: false, schreibenErlaubt: false, wurzel: \"\", geheimnisse: true, maxSchritte: 50, maxKosten: null, notaus: false, protokoll: true },' '];' >> pruefung.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 Entwurfsprüfung schreiben, Teil 4
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' ' entwuerfe.forEach(function (d) {' ' const f = maengel(d);' ' console.log(d.name + \": \" + f.length + \" Mängel\" + (f.length > 0 ? \": \" + f.join(\"; \") : \"\"));' ' });' ' const q = \"Schreiben Sie in einem kurzen Satz, warum ein Agent einen Notaus haben muss.\";' ' const probe = \"Geht etwas schief, muss eine Person ihn sofort anhalten und nachlesen können, was er getan hat.\";' ' const antwort = await fragen([{ role: \"user\", content: q }], probe, 60);' ' console.log(\"Das Modell sagte: \" + antwort.text);' '}' 'main();' >> pruefung.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 Entwurfsprüfung ausführen
docker exec -w /home/node/project agent node pruefung.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 |
|---|---|
| helfer: 0 Mängel | Er besteht jede Prüfung |
| bauer: 4 Mängel: Werkzeuge: hat Shell; ... | Er fällt in vier Bereichen durch |
| kundschafter: 5 Mängel: Werkzeuge: keine Positivliste; ... | Er fällt am häufigsten durch |
| Das Modell sagte: ... | Ein Satz. Die Worte ändern sich bei jedem Lauf oder zeigen Aufgezeichnete Probe |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.