Ein Auftrag für einen Coding-Agenten
Ein Coding-Agent ist ein Programm, das mit einem Sprachmodell ein Repository liest, Dateien ändert und Befehle ausführt. Er arbeitet nach einem Auftrag, den Sie schreiben. Der Auftrag entscheidet also, was Sie zurückbekommen.
„Den Kiosk besser machen“ kann als vierzig geänderte Dateien zurückkommen. Ein klarer Auftrag kommt als kleine Änderung zurück, die Sie prüfen können. Die Lektion über gute Fragen an einen Assistenten stellt eine Frage; diese Lektion schreibt einen ganzen Auftrag.
Am Ende dieser Lektion
Notiz
Ich kann einen Auftrag schreiben, den ein Coding-Agent erledigen und ich prüfen kann.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Coding-Agent | ein Programm, das mit einem Modell Code liest, Dateien ändert und Befehle ausführt | |
| Auftrag | schriftliche Anweisungen für ein Stück Arbeit | |
| Umfang | der Teil der Arbeit, der dazugehört | |
| Fertig wenn | eine Prüfung, die zeigt, dass die Arbeit erledigt ist | node --test läuft durch |
| Nicht im Umfang | was die Arbeit nicht berühren darf |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein Auftrag hat fünf Teile
Das Ziel sagt in einem Satz, was sich ändert. Der Umfang sagt, welcher Teil der Arbeit dazugehört. Die Liste der Dateien sagt, wo der Agent schreiben darf.
Fertig wenn nennt eine Prüfung, die Sie ausführen können, etwa einen Testbefehl. Nicht im Umfang sagt, was bleiben muss, wie es ist. Ein Agent hält selten an, um zu fragen. Jeder Teil beantwortet also eine Frage, bei der er sonst raten würde.
Durchgerechnetes Beispiel: vager und klarer Auftrag
| Teil | Vager Auftrag | Klarer Auftrag |
|---|---|---|
| Ziel | Den Kiosk besser machen | In gesamt 10 Prozent Rabatt für Studierende einbauen |
| Umfang | Nicht gesagt | nur gesamt |
| Dateien | Nicht gesagt | kiosk.js und kiosk.test.js |
| Fertig wenn | Nicht gesagt | node --test läuft mit 2 neuen Tests durch |
| Nicht im Umfang | Nicht gesagt | die Preise und inEuro |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein häufiger Fehler
Warnung
Viele denken, ein Agent frage nach, wenn ein Auftrag unklar ist. Die meisten Agenten raten und machen weiter. Eine Lücke wird so zu einer Entscheidung, die Sie nicht getroffen haben. Schreiben Sie „nicht im Umfang“ und die Prüfung, bevor Sie den Agenten starten.
Ein Skript prüft zuerst den Auftrag
Eine Checkliste findet die üblichen Lücken in einer Sekunde. Dieses Skript enthält drei aufgezeichnete Aufträge, A, B und C. Es sucht fehlende Teile, vage Wörter wie „besser“, mehr als drei Dateien und ein Fertig-wenn ohne Test.
Nichts hier startet den Agenten. Der Run prüft nur die Wörter, seine ersten drei Zeilen sind also für alle gleich.
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 Auftragsprüfung schreiben, Teil 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' 'const VAGE = [\"besser\", \"verbessern\", \"sauber\", \"ordentlich\", \"schöner\", \"irgendwie\"];' 'const TEILE = [\"ziel\", \"umfang\", \"dateien\", \"fertig_wenn\", \"nicht_im_umfang\"];' 'const auftraege = {' ' \"A\": { ziel: \"Den Code des Kiosks besser und ordentlich machen\" },' ' \"B\": { ziel: \"In gesamt 10 Prozent Rabatt für Studierende einbauen\", umfang: \"nur gesamt\",' ' dateien: [\"kiosk.js\", \"kiosk.test.js\", \"preise.js\", \"README.md\"], fertig_wenn: \"node --test läuft durch\",' ' nicht_im_umfang: \"die Preise\" },' ' \"C\": { ziel: \"In gesamt 10 Prozent Rabatt für Studierende einbauen\", umfang: \"nur gesamt\",' ' dateien: [\"kiosk.js\", \"kiosk.test.js\"], fertig_wenn: \"node --test läuft mit 2 neuen Tests durch\",' ' nicht_im_umfang: \"die Preise und inEuro\" },' '};' > auftrag.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 Auftragsprüfung schreiben, Teil 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function probleme(a) {' ' const aus = TEILE.filter(function (t) { return a[t] === undefined || a[t].length === 0; })' ' .map(function (t) { return t + \" fehlt\"; });' ' if (a.ziel) {' ' const woerter = a.ziel.toLowerCase().split(\" \");' ' VAGE.forEach(function (v) { if (woerter.indexOf(v) >= 0) aus.push(\"vage: \" + v); });' ' }' ' if (a.dateien && a.dateien.length > 3) aus.push(\"zu viele Dateien\");' ' if (a.fertig_wenn && a.fertig_wenn.toLowerCase().indexOf(\"test\") < 0) aus.push(\"fertig_wenn ohne Test\");' ' return aus;' '}' >> auftrag.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 Auftragsprüfung schreiben, Teil 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' ' Object.keys(auftraege).forEach(function (name) {' ' const gefunden = probleme(auftraege[name]);' ' console.log(\"Auftrag \" + name + \": \" + (gefunden.length === 0 ? \"bereit\" : \"braucht Arbeit \" + JSON.stringify(gefunden)));' ' });' ' const f = \"Schreiben Sie in einem kurzen Satz, warum ein Auftrag für einen Coding-Agenten eine Fertig-wenn-Prüfung braucht.\";' ' const probe = \"Ohne Prüfung weiß der Agent nicht, wann er aufhören soll, und Sie wissen nicht, ob es geklappt hat.\";' ' const antwort = await fragen([{ role: \"user\", content: f }], probe, 60);' ' console.log(\"Das Modell sagte: \" + antwort.text);' '}' 'main();' >> auftrag.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 Auftragsprüfung ausführen
docker exec -w /home/node/project agent node auftrag.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 |
|---|---|
| Auftrag A: braucht Arbeit [...] | Vier Teile fehlen, dazu zwei vage Wörter |
| Auftrag B: braucht Arbeit ["zu viele Dateien"] | Vier Dateien sind zu breit für einen Auftrag |
| Auftrag C: bereit | Alle Teile sind da, und die Prüfung ist ein Test |
| 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.