Warum der Test vor dem Agenten kommt
Ein Leitplankentest ist ein Test, den Sie schreiben, bevor ein Coding-Agent startet. Er scheitert jetzt und muss bestehen, wenn die Arbeit fertig ist. So entscheidet eine Maschine über „fertig“ und nicht der Bericht des Agenten.
Andere Lektionen testen Code, nachdem er geschrieben ist. Diese Lektion schreibt den Test zuerst und verhindert dann, dass der Agent ihn austrickst.
Am Ende dieser Lektion
Notiz
Ich kann zuerst einen scheiternden Test schreiben, damit die Arbeit eines Coding-Agenten geprüft wird.
Schlüsselwörter
| Begriff | Was er bedeutet |
|---|---|
| Leitplankentest | ein zuerst geschriebener Test, den die Arbeit bestehen muss |
| Erst rot, dann grün | der Test scheitert vor der Arbeit und besteht danach |
| Betrug | eine Änderung, die einen Test besteht, ohne die Arbeit zu tun |
| Zurückgehaltener Test | ein Test, den der Agent nicht sieht |
| Geschützte Testdatei | eine Testdatei, die der Agent nicht ändern darf |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Schreiben Sie zuerst den scheiternden Test
Schreiben Sie den Test aus dem Auftrag, bevor der Agent startet. Führen Sie ihn aus und sehen Sie zu, wie er scheitert. Ein Test, der schon vor der Arbeit besteht, prüft nichts Neues.
Geben Sie dem Agenten dann den Auftrag und den Test. Der Agent ändert den Code, bis der Test besteht. Jetzt haben Sie eine Prüfung, die nicht davon abhängt, was der Agent über seine Arbeit sagt.
Ein Test kann ohne die Arbeit bestehen
Ein Agent soll den Test bestehen lassen, und er findet vielleicht einen kurzen Weg. Er kann nur die Eingaben beantworten, die er sieht. Er kann den Test ändern oder löschen.
Das ist keine böse Absicht. Der Agent bekam ein Ziel und hat das Ziel erreicht. Machen Sie den falschen Weg also schwer.
Durchgerechnetes Beispiel: Betrug und wie man ihn stoppt
| Betrug | Wie er aussieht | Wie man ihn stoppt |
|---|---|---|
| Sonderfall | Bei einem Preis von 2000 kommt 0 | Zurückgehaltene Tests mit anderen Eingaben |
| Test ändern | Ein Fall wird gelöscht oder geändert | Die Testdatei schützen und vergleichen |
| Test überspringen | Der Test wird als übersprungen markiert | Die Tests vorher und nachher zählen |
| Schwächerer Test | Eine genaue Prüfung wird zu „ist eine Zahl“ | Jede Änderung an einer Testdatei prüfen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein häufiger Fehler
Warnung
Viele denken, ein grüner Testlauf heiße, der Agent habe die Arbeit getan. Ein Test kann grün werden, weil er geändert wurde oder weil nur die sichtbaren Eingaben gehen. Trauen Sie Grün nur, wenn die Testdatei unverändert ist und die zurückgehaltenen Tests auch bestehen.
Vier aufgezeichnete Versuche beurteilen
Der Versand kostet 299 Cent unter 2000 Cent und nichts ab 2000. Das Skript enthält drei sichtbare und zwei zurückgehaltene Tests.
Es beurteilt den Code vor der Arbeit und drei aufgezeichnete Versuche. Die Versuche sind von Hand geschrieben und stehen für das, was ein Agent zurückgeben kann.
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 Leitplankenprüfung schreiben, Teil 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' '// Der Versand kostet 299 Cent unter 2000 Cent und nichts ab 2000 Cent.' 'const sichtbar = [[500, 299], [1999, 299], [2000, 0]];' 'const zurueck = [[2500, 0], [100, 299]];' 'const versuche = {' ' \"vorher\": { fn: function (p) { return 299; }, tests: sichtbar },' ' \"ehrlich\": { fn: function (p) { return p >= 2000 ? 0 : 299; }, tests: sichtbar },' ' \"Sonderfall\": { fn: function (p) { return p === 2000 ? 0 : 299; }, tests: sichtbar },' ' \"Test geändert\": { fn: function (p) { return 299; }, tests: [[500, 299], [1999, 299]] },' '};' > leitplanke.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 Leitplankenprüfung schreiben, Teil 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function bestanden(fn, faelle) {' ' return faelle.filter(function (f) { return fn(f[0]) === f[1]; }).length;' '}' 'function urteil(v) {' ' if (JSON.stringify(v.tests) === JSON.stringify(sichtbar) === false) return \"ablehnen: Tests geändert\";' ' if (bestanden(v.fn, v.tests) < v.tests.length) return \"nicht fertig\";' ' if (bestanden(v.fn, zurueck) < zurueck.length) return \"Betrug vermutet\";' ' return \"behalten\";' '}' >> leitplanke.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 Leitplankenprüfung schreiben, Teil 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' ' Object.keys(versuche).forEach(function (name) {' ' const v = versuche[name];' ' console.log(name + \": sichtbar \" + bestanden(v.fn, v.tests) + \"/\" + v.tests.length' ' + \", zurückgehalten \" + bestanden(v.fn, zurueck) + \"/\" + zurueck.length + \": \" + urteil(v));' ' });' ' const f = \"Schreiben Sie in einem kurzen Satz, warum man einige Tests vor einem Coding-Agenten verbirgt.\";' ' const probe = \"Verborgene Tests zeigen, ob der Agent das Problem gelöst hat oder nur die Beispiele, die er sah.\";' ' const antwort = await fragen([{ role: \"user\", content: f }], probe, 60);' ' console.log(\"Das Modell sagte: \" + antwort.text);' '}' 'main();' >> leitplanke.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 Leitplankenprüfung ausführen
docker exec -w /home/node/project agent node leitplanke.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 |
|---|---|
| vorher: sichtbar 2/3 ...: nicht fertig | Rot: Der Test scheitert vor der Arbeit |
| ehrlich: sichtbar 3/3, zurückgehalten 2/2: behalten | Grün, und die verborgenen Fälle stimmen |
| Sonderfall: ... zurückgehalten 1/2: Betrug vermutet | Nur die sichtbaren Eingaben gehen |
| Test geändert: ...: ablehnen: Tests geändert | Ein Fall wurde gelöscht, also zählt nichts |
| 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.