-
Notifications
You must be signed in to change notification settings - Fork 0
Tutorial 2 How the Code Works de
🌎 Sprache: Deutsch — alle 33 Sprachen ansehen
Ziel: die Handvoll Designentscheidungen verstehen, die dieses Projekt leicht — und sicher — mit einem KI-Agenten veränderbar machen. Du musst den Code nicht auswendig lernen; du brauchst das mentale Modell, damit du den Agenten präzise steuern kannst.
← Zurück: Tutorial 1 Orientierung · Weiter: Tutorial 3 Deine erste Aufgabe mit dem Agenten
lockedin-cli/
├── bin/lockedin.js # Einstiegspunkt — der EINZIGE Teil mit Ein-/Ausgabe
├── src/lockedin.js # der Kern — reine Funktionen, die Strings zurückgeben
├── test/
│ ├── unit.test.js # testet die Kernfunktionen direkt
│ └── cli.test.js # startet das echte Binary und prüft seine Ausgabe
├── tools/screenshot.js # rendert die SVGs, die du in docs/ siehst
└── package.json # Metadaten + das `npm test`-Script
Vier Ideen treiben das Ganze an. Lerne sie, und du kannst den Agenten fast jede Änderung mit gutem Gefühl erledigen lassen.
Öffne src/lockedin.js. Achte darauf, dass die Render-Funktionen nichts ausgeben — sie geben Strings zurück:
function renderConnect() {
const names = shuffle(NAMES).slice(0, 6);
// ...baut ein Array von Zeilen auf...
return out.join('\n'); // gibt Text zurück; druckt nichts aus
}Die eigentliche Ausgabe (und das Lesen deiner Tastenanschläge) passiert komplett in bin/lockedin.js. Diese Trennung in „Kern gibt Daten zurück, Rand macht E/A“ ist hier das Allerwichtigste, denn eine Funktion, die einfach nur einen String zurückgibt, ist trivial zu testen:
const out = app.renderConnect();
assert.ok(out.includes("“Ich würde dich gern meinem beruflichen Netzwerk hinzufügen.” — gesendet an "));Kein Mocking eines Terminals, kein Abfangen von stdout. Wenn du den Agenten bittest, ein Feature hinzuzufügen, ist genau das der Grund, warum er dafür auch einen schnellen, zuverlässigen Test hinzufügen kann.
Die Witze leben in einfachen Arrays oben in src/lockedin.js:
const HOOKS = [ 'Unpopuläre Meinung:', 'Lass das kurz sacken.', /* ...~25 insgesamt... */ ];
const LESSONS = [ '→ Dein Netzwerk ist dein Net Worth.', /* ... */ ];Generatoren ziehen aus diesen Pools. In v1.2.0 ist jeder Pool auf ~25 Varianten angewachsen, und es kam eine zweite Ebene von Template-Pools dazu (Dinge wie POST_REVEALS und REFLECT_TAGSETS), sodass nicht nur die Wörter variieren, sondern auch die Struktur jeder Ausgabe. Content hinzuzufügen ist oft so einfach wie Strings in ein Array zu stecken — eine perfekte erste Aufgabe für einen Agenten.
Zufällige Ausgabe und automatisierte Tests klingen unvereinbar. Dieses Projekt bringt beides mit einem zufallszahlengenerator mit Seed zusammen:
setSeed(42);
const a = generatePost();
setSeed(42);
const b = generatePost();
// a === b → gleicher Seed, gleicher PostJede Zufallsentscheidung geht durch die gemeinsamen Helper pick() / shuffle(), die aus diesem Generator mit Seed ziehen. Setze LOCKEDIN_SEED=42, und die CLI wird vollständig reproduzierbar. Die goldene Regel für jede Änderung: Neue Zufälligkeit muss pick / shuffle verwenden, niemals direkt Math.random — sonst gehen Determinismus (und die Tests) kaputt. Behalte das im Hinterkopf; in Kapitel 3 wirst du den Agenten daran erinnern.
-
test/unit.test.jsruft Kernfunktionen auf und prüft die Strings, die sie zurückgeben (schnell, präzise). -
test/cli.test.jsstartet tatsächlichbin/lockedin.jsund prüft echtes stdout und den Exit-Code (beweist, dass das Ganze End-to-End funktioniert).
Zusammen sind sie das Gate. Sie kodieren außerdem Invarianten — Versprechen, die die App macht. Zum Beispiel beginnt ein Post immer mit einem bekannten Hook und enthält immer mindestens drei →-Lektionen; auf dem „connect“-Screen steht immer incalculable. Wenn ein Agent Code ändert, fangen diese Tests alles ab, was still und leise ein Versprechen gebrochen hat.
Wenn du die vier Ideen zusammennimmst, bekommst du eine Codebasis, in der ein Agent:
- Ein Feature hinzufügen kann als reine Funktion, die einen String zurückgibt,
- einen Test hinzufügen kann, ganz ohne E/A-Akrobatik,
- die Ausgabe über den RNG mit Seed reproduzierbar hält und
- beweisen kann, dass nichts kaputtgegangen ist, indem er das vorhandene Gate ausführt.
Genau diesen Loop wirst du im nächsten Kapitel laufen.
Bitte deinen Agenten, dein Verständnis zu überprüfen — lesend, nicht editierend:
- „Liste jeden Content-Pool in
src/lockedin.jsauf und wie viele Einträge jeder hat.“ - „Zeig mir eine Invariante, die
test/unit.test.jsfürgeneratePosterzwingt, und erkläre, wodurch sie kaputtgehen würde.“ - „Wo ist der RNG mit Seed definiert, und welche Funktionen müssen ihn statt
Math.randomverwenden? Ändere nichts — erkläre es nur.“
Wenn die Antworten des Agenten zu diesem Kapitel passen, bist du bereit zu bauen.
Tutorial
- 1 · Orientation
- 2 · How the Code Works
- 3 · Your First Agent Task
- 4 · Prompting & Reviewing
- 5 · Localization
Reference
Satire · Sátira · 風刺. Not affiliated with LinkedIn. GPL-3.0-or-later.