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
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Pipeline | Schritte, die bei jeder Änderung der Reihe nach laufen | |
| Recht | etwas, das ein Schritt tun darf | zweig-schreiben |
| Minimale Rechte | nur die Rechte, die ein Schritt braucht | |
| Freigabe | eine Stelle, an der eine Person ja sagen muss | |
| Log | eine 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
| Recht | Agentenschritt | Warum |
|---|---|---|
| lesen | Ja | Er muss den Code lesen |
| zweig-schreiben | Ja | Seine Änderung kommt auf einen eigenen Zweig |
| main-schreiben | Nein | Nur ein von einer Person freigegebener Merge schreibt main |
| geheimnisse | Nein | Ein Geheimnis in einem Prompt kann durchsickern |
| darf ändern | nur docs/ | Die Ordner, die sein Auftrag braucht |
| Zeitlimit | höchstens 30 Minuten | Ein 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
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 Pipeline-Prüfung schreiben, Teil 1
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
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
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
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
docker exec -w /home/node/project agent node ci.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 |
|---|---|
| doku-bot: sicher | Wenigste Rechte, Tests, dann eine Freigabe |
| auto-reparatur: unsicher | Sieben Probleme darunter aufgelistet |
| agent: darf nach main pushen | Er kann jede Person umgehen |
| merge: keine Tests nach dem Agenten | Nichts prüft seine Änderung |
| merge: keine Freigabe | Niemand 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.