-
Notifications
You must be signed in to change notification settings - Fork 0
Tutorial 2 How the Code Works tl
🌎 Wika: Tagalog (tl) — tingnan ang lahat ng 33 wika
Layunin: unawain ang ilang mga pagpipilian sa disenyo na nagpapadali sa proyektong ito — at ligtas — na baguhin sa isang ahente ng AI. Hindi mo kailangang isaulo ang code; kailangan mo ang mental model, para maidirekta mo ang ahente nang tumpak.
← Nakaraan: Tutorial 1 Oryentasyon · Susunod: Tutorial 3 Ang Iyong Unang Gawaing Ahente
lockedin-cli/
├── bin/lockedin.js # entry point — ang TANGING bahaging gumagawa ng input/output
├── src/lockedin.js # core — mga pure function na nagbabalik ng string
├── test/
│ ├── unit.test.js # direktang sinusubok ang mga core function
│ └── cli.test.js # pinapatakbo ang tunay na binary at sinusuri ang output nito
├── tools/screenshot.js # nire-render ang mga SVG na makikita sa docs/
└── package.json # metadata + ang `npm test` script
Apat na ideya ang nagpapatakbo rito. Unawain ang mga ito at maaari mong hilingin sa ahente ang halos anumang pagbabago nang may kumpiyansa.
Buksan ang src/lockedin.js. Pansinin na ang mga render function ay hindi
nagpi-print — nagbabalik sila ng mga string:
function renderConnect() {
const names = shuffle(NAMES).slice(0, 6);
// ...bumubuo ng array ng mga linya...
return out.join('\n'); // nagbabalik ng text; walang pini-print
}Ang lahat ng aktwal na pag-print (at pagbabasa ng iyong mga keystroke) ay
nangyayari sa bin/lockedin.js. Ang paghahating "core returns data, edge does
I/O" ang pinakamahalagang ideya rito, dahil ang function na nagbabalik lang ng
string ay napakadaling subukan:
const out = app.renderConnect();
assert.ok(out.includes("“Gusto kitang idagdag sa professional network ko.” — ipinadala sa "));Hindi kailangang mag-mock ng terminal o kumuha ng stdout. Kapag hiniling mo sa ahente na magdagdag ng feature, ito ang dahilan kung bakit maaari rin itong magdagdag ng mabilis at maaasahang test.
Ang mga biro ay nakatira sa mga simpleng hanay malapit sa tuktok ng src/lockedin.js:
const HOOKS = [ 'Unpopular opinion:', 'Let that sink in.', /* ...~25 total... */ ];
const LESSONS = [ '→ Ang network mo ang net worth mo.', /* ... */ ];Pinipili ng mga generator ang mga pool na ito. Sa v1.2.0 ang bawat pool ay lumago sa ~25 variation, at isang pangalawang layer ng template pools ay idinagdag (mga bagay tulad ng POST_REVEALS at REFLECT_TAGSETS) kaya nag-iiba ang structure ng bawat output, hindi lang ang mga salita. Ang pagdaragdag ng nilalaman ay kadalasang kasing simple ng pagdaragdag ng mga string sa isang array — isang perpektong unang gawain na ibigay sa isang ahente.
Mukhang hindi magkatugma ang random na output at mga automated test. Nilulutas ito ng proyekto gamit ang isang seedable random number generator:
setSeed(42);
const a = generatePost();
setSeed(42);
const b = generatePost();
// a === b → parehong seed, parehong postAng bawat random na pagpili ay dumadaan sa magkatuwang na helper na pick() /
shuffle(), na kumukuha mula sa seeded generator. Itakda ang
LOCKEDIN_SEED=42 at ganap na mauulit ang output ng CLI. Ang ginintuang
tuntunin: ang bagong randomness ay dapat gumamit ng pick / shuffle, hindi
direktang Math.random — kung hindi, masisira ang determinismo at mga test.
Tandaan ito; ipapaalala mo ito sa ahente sa Kabanata 3.
-
test/unit.test.jstumatawag sa mga pangunahing function at iginiit sa mga string na ibinabalik nila (mabilis, tumpak). -
test/cli.test.jstalagang pinapatakbo angbin/lockedin.jsat sinusuri ang stdout at exit code nito (patunay na gumagana ang lahat end-to-end).
Magkasama nilang binubuo ang gate. Nag-e-encode rin sila ng invariants — mga
pangakong ginagawa ng app. Halimbawa, palaging nagsisimula ang post sa isang
kilalang hook at may hindi bababa sa tatlong araling →; palaging sinasabi ng
"connect" screen ang incalculable. Kapag binago ng ahente ang code, nahuhuli
ng mga test ang anumang tahimik na paglabag sa pangako.
Pagsama-samahin ang apat na ideya at makakakuha ka ng codebase kung saan ang isang ahente ay maaaring:
- Magdagdag ng feature bilang isang purong function na nagbabalik ng string,
- Magdagdag ng pagsubok para dito nang walang anumang I/O gymnastics,
- Panatilihin ang output reproducible sa pamamagitan ng seeded RNG, at
- Patunayan na wala itong nasira sa pamamagitan ng pagpapatakbo sa kasalukuyang gate.
Iyan ang loop na tatakbo ka sa susunod na kabanata.
Hilingin sa iyong ahente na i-verify ang iyong pag-unawa — pagbabasa, hindi pag-edit:
- "Ilista ang bawat pool ng nilalaman
src/lockedin.jsat kung gaano karaming mga entry ang mayroon ang bawat isa." - "Ipakita sa akin ang isang invariant na ipinapatupad ng
test/unit.test.jspara sageneratePost, at ipaliwanag kung ano ang makakasira rito." - "Saan tinukoy ang seeded RNG, at aling mga function ang dapat gumamit nito sa halip na
Math.random? Huwag mong baguhin ang anuman — ipaliwanag mo lang."
Kapag tumugma ang mga sagot ng ahente sa kabanatang ito, handa ka nang bumuo.
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.