Drei Dateien, obwohl Sie eine Funktion wollten
Ein KI-Agent ändert Dateien selbst und zeigt Ihnen am Ende eine Liste seiner Änderungen. Diese Liste heißt Diff. Sie haben eine kleine Funktion verlangt, und der Diff berührt drei Dateien.
Behalten Sie die Änderung, bevor Sie sie gelesen haben, übernehmen Sie Dinge, die Sie nie verlangt haben. Diese Lektion zeigt, wie Sie einen Diff lesen und entscheiden.
Am Ende dieser Lektion
Notiz
Ich kann die Änderung eines Agenten im Diff lesen und entscheiden, ob ich sie behalte, ändere oder verwerfe.
Schlüsselwörter
| Begriff | Was er bedeutet |
|---|---|
| Diff | die Liste dessen, was sich zwischen zwei Fassungen geändert hat |
| Hunk | ein zusammenhängender Abschnitt einer Änderung in einer Datei |
| Anfrage | das, was Sie verlangt haben und woran die Änderung zu messen ist |
| Umfang | wie viele Dateien und Zeilen eine Änderung berührt |
| Verwerfen | eine Änderung ganz zurücknehmen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein Diff besteht aus Dateien und Hunks
Ein Diff nennt zuerst jede berührte Datei. Darunter steht je Änderung ein Hunk: Zeilen mit einem Minus wurden entfernt, Zeilen mit einem Plus kamen hinzu, Zeilen ohne Zeichen sind der Rahmen.
Lesen Sie erst die Dateiliste, dann jeden Hunk. Fragen Sie bei jedem: Habe ich das verlangt?
Eine mögliche Anfrage an den Agenten
So könnte eine Anfrage lauten: „Ergänze in preise.js eine Funktion mitPfand(cent), die 25 Cent aufschlägt, und einen Test dafür. Ändere sonst nichts.“
Die Anfrage ist Ihr Maßstab. Alles im Diff, was sie nicht deckt, ist ein Fall für Fragen: berührte Dateien, entfernte Tests, ein größerer Umfang als verlangt.
Zwei Ordner vergleichen
Die Runs unten schreiben in einen Ordner demo-pruefung-diff/ zwei Fassungen: vorher/ und nachher/. Die zweite hat die Funktion bekommen, die Sie verlangt haben, und dazu drei Dinge, die Sie nicht verlangt haben.
Alles ist von Hand geschrieben und keine Antwort eines Agenten. Das Werkzeug diff zeigt die Unterschiede wie ein Agent sie zeigen würde.
Den Code von vorher schreiben
docker exec -w /home/node/project agent sh -c "mkdir -p demo-pruefung-diff/vorher && printf '%s\n' '// Preise in Cent. Ab 8 Stueck gibt es 5 Prozent Rabatt.' 'function gesamtpreis(menge, cent) {' ' const brutto = menge * cent;' ' if (menge >= 8) return Math.round(brutto * 0.95);' ' return brutto;' '}' 'module.exports = { gesamtpreis };' > demo-pruefung-diff/vorher/preise.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 Tests von vorher schreiben
docker exec -w /home/node/project agent sh -c "mkdir -p demo-pruefung-diff/vorher && printf '%s\n' 'const { gesamtpreis } = require(\"./preise.js\");' 'let fehler = 0;' 'function pruefe(name, stimmt) {' ' if (stimmt === false) {' ' fehler = fehler + 1;' ' console.log(\"fehler: \" + name);' ' }' '}' 'pruefe(\"ein stueck\", gesamtpreis(1, 120) === 120);' 'pruefe(\"sieben stueck\", gesamtpreis(7, 120) === 840);' 'pruefe(\"acht stueck\", gesamtpreis(8, 120) === 912);' 'pruefe(\"neun stueck\", gesamtpreis(9, 125) === 1069);' 'pruefe(\"kein stueck\", gesamtpreis(0, 120) === 0);' 'console.log(require(\"path\").basename(__dirname) + \": \" + fehler + \" Fehler\");' > demo-pruefung-diff/vorher/tests.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.
Den Code von nachher schreiben
docker exec -w /home/node/project agent sh -c "mkdir -p demo-pruefung-diff/nachher && printf '%s\n' '// Preise in Cent. Ab 8 Stueck gibt es 5 Prozent Rabatt.' 'function gesamtpreis(menge, cent) {' ' const brutto = menge * cent;' ' if (menge >= 8) return Math.floor(brutto * 0.95);' ' return brutto;' '}' 'function mitPfand(cent) {' ' return cent + 25;' '}' 'module.exports = { gesamtpreis, mitPfand };' > demo-pruefung-diff/nachher/preise.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 Tests von nachher schreiben
docker exec -w /home/node/project agent sh -c "mkdir -p demo-pruefung-diff/nachher && printf '%s\n' 'const { gesamtpreis } = require(\"./preise.js\");' 'let fehler = 0;' 'function pruefe(name, stimmt) {' ' if (stimmt === false) {' ' fehler = fehler + 1;' ' console.log(\"fehler: \" + name);' ' }' '}' 'pruefe(\"ein stueck\", gesamtpreis(1, 120) === 120);' 'pruefe(\"sieben stueck\", gesamtpreis(7, 120) === 840);' 'pruefe(\"acht stueck\", gesamtpreis(8, 120) === 912);' 'pruefe(\"kein stueck\", gesamtpreis(0, 120) === 0);' 'console.log(require(\"path\").basename(__dirname) + \": \" + fehler + \" Fehler\");' > demo-pruefung-diff/nachher/tests.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.
Eine Datei mehr schreiben
docker exec -w /home/node/project agent sh -c "mkdir -p demo-pruefung-diff/nachher && printf '%s\n' '// Neu: Einstellungen fuer Rundung und Pfand, noch von nichts benutzt.' 'module.exports = { runden: \"ab\", pfandCent: 25 };' > demo-pruefung-diff/nachher/einstellungen.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 geänderten Dateien auflisten
docker exec -w /home/node/project/demo-pruefung-diff agent env LC_ALL=C diff -rq vorher nachherHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Den ganzen Diff lesen
docker exec -w /home/node/project/demo-pruefung-diff agent env LC_ALL=C diff -r vorher nachherHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein entfernter Test macht den Rest grün
Im Diff fehlt eine Prüfzeile: neun Stück zu 125 Cent. Der Agent hat außerdem in preise.js Math.round durch Math.floor ersetzt, was Sie nicht verlangt haben. Genau dieser Test hätte die Änderung bemerkt.
Mit dem Test weniger sind alle Tests grün. Ein entfernter Test ist immer eine Frage an den Agenten, nie ein Detail.
Tests laufen lassen und Prüfzeilen zählen
docker exec -w /home/node/project/demo-pruefung-diff agent sh -c "node vorher/tests.js; node nachher/tests.js; grep -c ^pruefe vorher/tests.js nachher/tests.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 Rundung für neun Stück vergleichen
docker exec -w /home/node/project/demo-pruefung-diff agent node -e "console.log(require(\"./vorher/preise.js\").gesamtpreis(9, 125), require(\"./nachher/preise.js\").gesamtpreis(9, 125))"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein häufiger Fehler
Warnung
Viele denken, wenn der Agent meldet, alle Tests liefen durch, könne man die Änderung behalten. Das stimmt nur, wenn niemand Tests entfernt oder gelockert hat. Lesen Sie zuerst den Diff der Tests und zählen Sie, bevor Sie dem grünen Ergebnis glauben.
Beispiel: behalten, ändern oder verwerfen
| Was der Diff zeigt | Entscheidung | Grund |
|---|---|---|
| Nur die verlangte Funktion und ihr Test | Behalten | Deckt die Anfrage |
| Die richtige Funktion, aber eine Datei mehr | Ändern | Die Datei lässt sich ablehnen |
| Ein Test wurde gestrichen | Verwerfen | Der Schutz ist weg, Sie wissen nicht, was sonst passiert |
| Die Änderung ist viel größer als die Anfrage | Ändern | Bitten Sie um einen kleineren Schritt |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Weiter: an einer anderen Änderung ausprobieren
Jetzt ist ein guter Moment, diese Ideen an einer anderen Änderung auszuprobieren. Der Fehler des Labs bleibt unberührt. Bitten Sie den Agenten um eine kleine Ergänzung in einer Kopie von shop.js.
Lesen Sie danach zuerst die Dateiliste, dann den Diff der Tests, dann jeden Hunk. Entscheiden Sie, ob Sie behalten, ändern oder verwerfen, und schreiben Sie den Grund auf.