-
Notifications
You must be signed in to change notification settings - Fork 0
Tutorial 2 How the Code Works fi
Tavoite: ymmärtää se kourallinen suunnitteluvalintoja, jotka tekevät tästä projektista helpon — ja turvallisen — muuttaa tekoälyagentin kanssa. Sinun ei tarvitse ulkoa opetella koodia; tarvitset mentaalimallin, jotta voit ohjata agenttia täsmällisesti.
← Edellinen: Tutorial 1 Orientaatio · Seuraava: Tutorial 3 Ensimmäinen agenttitehtäväsi
lockedin-cli/
├── bin/lockedin.js # sisääntulopiste — AINOA osa, joka tekee syöttöä/tulostetta
├── src/lockedin.js # ydin — puhtaita funktioita, jotka palauttavat merkkijonoja
├── test/
│ ├── unit.test.js # testaa ydinfunktioita suoraan
│ └── cli.test.js # käynnistää oikean binäärin ja tarkistaa sen tulosteen
├── tools/screenshot.js # renderöi SVG:t, jotka näet docs/-kansiossa
└── package.json # metadata + `npm test`-skripti
Neljä ideaa saavat sen tikittämään. Opi nämä, niin voit pyytää agentilta lähes mitä tahansa muutosta luottavaisin mielin.
Avaa src/lockedin.js. Huomaa, että renderöintifunktiot eivät tulosta — ne
palauttavat merkkijonoja:
function renderConnect() {
const names = shuffle(NAMES).slice(0, 6);
// ...rakentaa rivitaulukon...
return out.join('\n'); // palauttaa tekstiä; ei tulosta mitään
}Kaikki varsinainen tulostus (ja näppäinpainallustesi lukeminen) tapahtuu
bin/lockedin.js:ssä. Tämä "ydin palauttaa dataa, reuna tekee I/O:n" -jako
on tärkein yksittäinen asia täällä, koska funktiota, joka vain palauttaa
merkkijonon, on triviaalia testata:
const out = app.renderConnect();
assert.ok(out.includes("\"Haluaisin lisätä sinut ammatilliseen verkostooni.\" — lähetetty "));Ei terminaalin mockkaamista, ei stdoutin kaappaamista. Kun pyydät agenttia lisäämään ominaisuuden, tästä syystä se voi myös lisätä nopean, luotettavan testin sille.
Läpät asuvat tavallisissa taulukoissa lähellä src/lockedin.js:n alkua:
const HOOKS = [ 'Epäsuosittu mielipide:', 'Anna sen upota.', /* ...~25 yhteensä... */ ];
const LESSONS = [ '→ Verkostosi on nettovarallisuutesi.', /* ... */ ];Generaattorit valitsevat näistä pooleista. Versiossa v1.2.0 jokainen pooli
kasvoi ~25 vaihteluun, ja toinen kerros mallipooleja lisättiin (kuten
POST_REVEALS ja REFLECT_TAGSETS), jotta kunkin tulosteen rakenne vaihtelee,
ei vain sanat. Sisällön lisääminen on usein yhtä yksinkertaista kuin
merkkijonojen lisääminen taulukkoon — täydellinen ensimmäinen tehtävä agentille.
Satunnainen tuloste ja automatisoidut testit kuulostavat ristiriitaisilta. Tämä projekti ratkaisee sen siemennettävällä satunnaislukugeneraattorilla:
setSeed(42);
const a = generatePost();
setSeed(42);
const b = generatePost();
// a === b → sama siemen, sama julkaisuJokainen satunnainen valinta kulkee jaettujen pick() / shuffle()
-apufunktioiden kautta, jotka ammentavat tuosta siemennetystä generaattorista.
Aseta LOCKEDIN_SEED=42, ja CLI on täysin toistettavissa. Kultainen sääntö
mille tahansa muutokselle: uuden satunnaisuuden täytyy käyttää pick/shuffle,
ei koskaan suoraan Math.random — muuten determinismi (ja testit) hajoavat.
Pidä tämä takataskussasi; muistutat siitä agenttia luvussa 3.
-
test/unit.test.jskutsuu ydinfunktioita ja tekee väitteitä merkkijonoista, jotka ne palauttavat (nopea, tarkka). -
test/cli.test.jstodella käynnistääbin/lockedin.js:n ja tarkistaa sen oikean stdoutin ja poistumiskoodin (todistaa, että koko homma toimii päästä päähän).
Yhdessä ne ovat portti. Ne myös koodaavat invariantteja — sovelluksen
antamia lupauksia. Esimerkiksi julkaisu alkaa aina tunnetulla koukulla ja
sisältää aina vähintään kolme →-oppia; "connect"-näyttö sanoo aina
incalculable. Kun agentti muuttaa koodia, nämä testit nappaavat kaiken, mikä
hiljaa rikkoi lupauksen.
Yhdistä nämä neljä ideaa, niin saat koodikannan, jossa agentti voi:
- Lisätä ominaisuuden puhtaana funktiona, joka palauttaa merkkijonon,
- Lisätä sille testin ilman I/O-akrobatiaa,
- Pitää tulosteen toistettavana siemennetyn RNG:n kautta, ja
- Todistaa, ettei se rikkonut mitään ajamalla olemassa olevan portin.
Se on silmukka, jonka ajat seuraavassa luvussa.
Pyydä agenttiasi vahvistamaan ymmärryksesi — lukemalla, ei muokkaamalla:
- "Listaa jokainen sisältöpooli
src/lockedin.js:ssä ja kuinka monta merkintää kussakin on." - "Näytä minulle yksi invariantti, jonka
test/unit.test.jspakottaageneratePost:ille, ja selitä mikä sen rikkoisi." - "Missä siemennetty RNG on määritelty, ja mitkä funktiot sitä täytyy
käyttää
Math.random:n sijaan? Älä muuta mitään — vain selitä."
Kun agentin vastaukset täsmäävät tähän lukuun, olet valmis rakentamaan.
Seuraava: Tutorial 3 Ensimmäinen agenttitehtäväsi
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.