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

Berechtigungsmodi für Code-Agenten

Nach dieser Lektion: Ich kann denselben Agenten in den Modi fragen, plan und auto laufen lassen und sagen, was jeder durchlässt und was immer nachfragt.

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

Ein Agent, drei Vertrauensstufen

Ein Berechtigungsmodus entscheidet, was ein Agent ohne Nachfrage tun darf. Im Modus plan liest er nur. Im Modus fragen fragt er, bevor er etwas ändert. Im Modus auto arbeitet er allein innerhalb von Grenzen.

Derselbe Agent ist in einem Modus sicher unbeaufsichtigt und in einem anderen nicht. Den Modus wählt man deshalb für jeden Lauf.

Am Ende dieser Lektion

Notiz

Ich kann denselben Agenten in den Modi fragen, plan und auto laufen lassen und sagen, was jeder durchlässt und was immer nachfragt.

Schlüsselwörter

BegriffWas er bedeutet
Moduseine Einstellung, die entscheidet, was ohne Nachfrage läuft
Planmodusein Modus, der nur liest
Risikowie viel Schaden eine Aktion anrichten kann
Erlaubnislistevorab genehmigte Befehle
Geschützter Pfadeine Datei, die immer eine Freigabe braucht
Freigabedas Ja oder Nein der Person zu einer Aktion

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

Ein Modus ist eine Einstellung, kein Prompt

Sie könnten «ändere nie Dateien» in den Prompt schreiben. Ein Modell kann es trotzdem tun, denn ein Prompt ist eine Bitte.

Ein Modus ist Code im Harness. Jede Aktion läuft vor der Ausführung durch eine Funktion. Im Planmodus lehnt diese Funktion ein Schreiben ab, was das Modell auch sagt. Das Modell sieht keinen Weg daran vorbei.

Regeln werden der Reihe nach geprüft

Geben Sie jeder Aktion ein Risiko: lesen, schreiben, ausführen oder zerstörend. Entscheiden Sie dann nach Modus, mit Regeln in fester Reihenfolge. Der Planmodus kommt zuerst, weil er mehr ablehnt als jeder andere.

Danach fragt ein geschützter Pfad oder eine zerstörende Aktion immer nach. Erst dann lockert ein Modus etwas. Eine Erlaubnisliste lässt den Modus auto benannte Befehle ohne Nachfrage ausführen.

Was jeder Modus mit jedem Risiko tut

RisikoPlanFragenAuto
LesenErlaubenErlaubenErlauben
SchreibenVerweigernNachfragenErlauben
AusführenVerweigernNachfragenErlauben, wenn gelistet
ZerstörendVerweigernNachfragenNachfragen
Geschützter PfadVerweigernNachfragenNachfragen

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

Ein häufiger Fehler

Warnung

Viele verlangen bei jeder Aktion eine Freigabe. Dann klicken Menschen ohne zu lesen auf Ja. Fragen Sie nur, wo es zählt: geschützte Pfade, zerstörende Aktionen und Befehle außerhalb der Liste.

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

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

Modusprüfer schreiben, Teil 1

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' 'const ERLAUBT = [\"pytest\"];' 'const aktionen = [' '  { werkzeug: \"datei_lesen\", risiko: \"lesen\", ziel: \"src/app.py\" },' '  { werkzeug: \"datei_schreiben\", risiko: \"schreiben\", ziel: \"src/app.py\" },' '  { werkzeug: \"ausfuehren\", risiko: \"ausfuehren\", ziel: \"pytest\" },' '  { werkzeug: \"ausfuehren\", risiko: \"ausfuehren\", ziel: \"curl seite\" },' '  { werkzeug: \"datei_loeschen\", risiko: \"zerstoerend\", ziel: \"src/alt.py\" },' '  { werkzeug: \"datei_lesen\", risiko: \"lesen\", ziel: \".env\" },' '];' > modi3.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.

Modusprüfer schreiben, Teil 2

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function geschuetzt(z) {' '  return z === \".env\" || z.startsWith(\".env.\") || z.startsWith(\".git/\") || z.toLowerCase().includes(\"geheim\");' '}' 'function entscheide(modus, a) {' '  if (modus === \"plan\") return a.risiko === \"lesen\" && geschuetzt(a.ziel) === false ? \"erlauben\" : \"verweigern\";' '  if (geschuetzt(a.ziel) || a.risiko === \"zerstoerend\") return \"nachfragen\";' '  if (modus === \"fragen\") return a.risiko === \"lesen\" ? \"erlauben\" : \"nachfragen\";' '  if (a.risiko === \"ausfuehren\") return ERLAUBT.includes(a.ziel) ? \"erlauben\" : \"nachfragen\";' '  return \"erlauben\";' '}' >> modi3.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.

Modusprüfer schreiben, Teil 3

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  for (const a of aktionen) {' '    const zeile = [\"fragen\", \"plan\", \"auto\"].map(function (m) { return m + \":\" + entscheide(m, a); });' '    console.log(a.werkzeug + \" \" + a.ziel + \" -> \" + zeile.join(\" \"));' '  }' '  const f = \"Ein Agent will src/alt.py löschen. Schreiben Sie einen kurzen Satz, der die Person um Freigabe bittet.\";' '  const antwort = await fragen([{ role: \"user\", content: f }], \"Der Agent will src/alt.py löschen. Erlauben Sie das?\", 40);' '  console.log(\"angezeigte Frage: \" + antwort.text);' '}' 'main();' >> modi3.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 Aktionen in drei Modi ausführen

Befehl
docker exec -w /home/node/project agent node modi3.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 Entscheidungen brauchen kein Modell

Die sechs Zeilen kommen allein aus der Entscheidungsfunktion, sind also für alle gleich. Danach macht der Run einen kurzen Aufruf, um die Frage zu formulieren, die eine Person vor einem Löschen sähe.

Ohne Modell gibt er für diese eine Zeile eine aufgezeichnete Probe aus.

Eine mögliche Ausgabe

ZeileWas sie zeigt
datei_lesen src/app.py -> fragen:erlauben plan:erlauben auto:erlaubenEin einfaches Lesen geht überall durch
datei_schreiben src/app.py -> fragen:nachfragen plan:verweigern auto:erlaubenNur auto lässt ein Schreiben durch
ausfuehren pytest -> fragen:nachfragen plan:verweigern auto:erlaubenEs steht auf der Erlaubnisliste
ausfuehren curl seite -> fragen:nachfragen plan:verweigern auto:nachfragenNicht gelistet, also fragt auto
datei_loeschen src/alt.py -> fragen:nachfragen plan:verweigern auto:nachfragenEin Löschen fragt immer
datei_lesen .env -> fragen:nachfragen plan:verweigern auto:nachfragenEin geschützter Pfad fragt immer

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.