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

Coding-Agenten in einer CI-Pipeline

Nach dieser Lektion: Ich kann einen Pipeline-Schritt für einen Coding-Agenten mit der Freigabe einer Person vor dem Merge entwerfen.

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

Was ein Agentenschritt in der CI ist

Continuous Integration (CI) führt bei jeder Änderung, die in ein Repository gepusht wird, Prüfungen aus. Ein Team kann einen Coding-Agenten als einen Schritt einbauen, etwa um Tippfehler in der Dokumentation zu beheben.

Niemand beobachtet einen Pipeline-Schritt, also werden seine Grenzen vorher aufgeschrieben. Die Grenzen eines einzelnen Agentenlaufs sind ein eigenes Thema; diese Lektion entwirft die Pipeline darum herum.

Am Ende dieser Lektion

Notiz

Ich kann einen Pipeline-Schritt für einen Coding-Agenten mit der Freigabe einer Person vor dem Merge entwerfen.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
PipelineSchritte, die bei jeder Änderung der Reihe nach laufen
Rechtetwas, das ein Schritt tun darfzweig-schreiben
Minimale Rechtenur die Rechte, die ein Schritt braucht
Freigabeeine Stelle, an der eine Person ja sagen muss
Logeine Aufzeichnung dessen, was der Schritt getan hat

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

Ein Agentenschritt bekommt die wenigsten Rechte

Ein Schritt darf vielleicht den Code lesen, auf einen Zweig schreiben, auf den Hauptzweig schreiben oder die Geheimnisse des Teams lesen. Ein Agentenschritt muss lesen und einen Zweig schreiben. Den Hauptzweig oder die Geheimnisse braucht er nie.

Er nennt außerdem die Ordner, die er ändern darf, und ein Zeitlimit. Ein Stern heißt „alles“, also gar keine Grenze.

Durchgerechnetes Beispiel: Rechte für einen Agentenschritt

RechtAgentenschrittWarum
lesenJaEr muss den Code lesen
zweig-schreibenJaSeine Änderung kommt auf einen eigenen Zweig
main-schreibenNeinNur ein von einer Person freigegebener Merge schreibt main
geheimnisseNeinEin Geheimnis in einem Prompt kann durchsickern
darf ändernnur docs/Die Ordner, die sein Auftrag braucht
Zeitlimithöchstens 30 MinutenEin festgefahrener Agent hört auf

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

Tests, eine Person, dann der Merge

Nach dem Agentenschritt laufen die Tests auf seinem Zweig noch einmal. Dann liest eine Person die Änderung und gibt sie frei. Erst danach läuft der Merge.

Der Schritt führt ein Log: den Auftrag, den er bekam, jeden Befehl, den er ausführte, und jede Datei, die er änderte. Geht einen Monat später etwas schief, sagt das Log, was passiert ist.

Ein häufiger Fehler

Warnung

Viele denken, ein Agent in der CI sei sicher, weil er nur einen Zweig öffnet. Ein Schritt, der Geheimnisse lesen oder nach main pushen kann, kann trotzdem Schaden anrichten. Geben Sie ihm die wenigsten Rechte, und setzen Sie Tests und eine Person vor jeden Merge.

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.

Die Pipeline-Prüfung schreiben, Teil 1

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' 'const pipelines = {' '  \"doku-bot\": [' '    { name: \"auschecken\", art: \"vorbereitung\", rechte: [\"lesen\"] },' '    { name: \"agent\", art: \"agent\", rechte: [\"lesen\", \"zweig-schreiben\"], darf_aendern: [\"docs/\"],' '      fuehrt_log: true, max_minuten: 20 },' '    { name: \"tests\", art: \"test\", rechte: [\"lesen\"] },' '    { name: \"merge\", art: \"merge\", rechte: [\"main-schreiben\"], braucht_freigabe: true },' '  ],' '  \"auto-reparatur\": [' '    { name: \"agent\", art: \"agent\", rechte: [\"lesen\", \"main-schreiben\", \"geheimnisse\"], darf_aendern: [\"*\"],' '      fuehrt_log: false, max_minuten: 90 },' '    { name: \"merge\", art: \"merge\", rechte: [\"main-schreiben\"], braucht_freigabe: false },' '  ],' '};' > ci.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 Pipeline-Prüfung schreiben, Teil 2

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function schrittProbleme(s) {' '  const aus = [];' '  if (s.rechte.indexOf(\"main-schreiben\") >= 0) aus.push(\"darf nach main pushen\");' '  if (s.rechte.indexOf(\"geheimnisse\") >= 0) aus.push(\"kann Geheimnisse lesen\");' '  if (s.darf_aendern.length === 0 || s.darf_aendern.indexOf(\"*\") >= 0) aus.push(\"darf alles ändern\");' '  if (s.fuehrt_log === false) aus.push(\"führt kein Log\");' '  if (s.max_minuten > 30) aus.push(\"läuft zu lange\");' '  return aus.map(function (p) { return s.name + \": \" + p; });' '}' >> ci.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 Pipeline-Prüfung schreiben, Teil 3

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function probleme(schritte) {' '  let aus = [];' '  let agent = false;' '  let getestet = false;' '  schritte.forEach(function (s) {' '    if (s.art === \"agent\") { aus = aus.concat(schrittProbleme(s)); agent = true; getestet = false; }' '    if (s.art === \"test\") getestet = true;' '    if (s.art === \"merge\" && agent && getestet === false) aus.push(s.name + \": keine Tests nach dem Agenten\");' '    if (s.art === \"merge\" && agent && s.braucht_freigabe === false) aus.push(s.name + \": keine Freigabe\");' '  });' '  return aus;' '}' >> ci.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 Pipeline-Prüfung schreiben, Teil 4

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  Object.keys(pipelines).forEach(function (name) {' '    const gefunden = probleme(pipelines[name]);' '    console.log(name + \": \" + (gefunden.length === 0 ? \"sicher\" : \"unsicher\"));' '    gefunden.forEach(function (p) { console.log(\"  \" + p); });' '  });' '  const f = \"Schreiben Sie in einem kurzen Satz, warum eine Person zustimmen soll, bevor die Änderung eines Agenten gemergt wird.\";' '  const probe = \"Eine Person sieht, was die Änderung bedeutet, und das können weder die Tests noch der Agent beurteilen.\";' '  const antwort = await fragen([{ role: \"user\", content: f }], probe, 60);' '  console.log(\"Das Modell sagte: \" + antwort.text);' '}' 'main();' >> ci.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 Pipeline-Prüfung ausführen

Befehl
docker exec -w /home/node/project agent node ci.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
doku-bot: sicherWenigste Rechte, Tests, dann eine Freigabe
auto-reparatur: unsicherSieben Probleme darunter aufgelistet
agent: darf nach main pushenEr kann jede Person umgehen
merge: keine Tests nach dem AgentenNichts prüft seine Änderung
merge: keine FreigabeNiemand sagt ja vor dem Merge
Das Modell sagte: ...Ein Satz aus dem Labor. Eine Aufgezeichnete Probe, wenn kein Modell antwortet

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.