-
Notifications
You must be signed in to change notification settings - Fork 0
Tutorial 2 How the Code Works el
Στόχος: κατανόησε τη χούφτα σχεδιαστικών επιλογών που κάνουν αυτό το έργο εύκολο — και ασφαλές — να αλλάξει με έναν πράκτορα AI. Δεν χρειάζεται να απομνημονεύσεις τον κώδικα· χρειάζεσαι το νοητικό μοντέλο, ώστε να καθοδηγείς τον πράκτορα με ακρίβεια.
← Προηγούμενο: Μάθημα 1 Προσανατολισμός · Επόμενο: Μάθημα 3 Η πρώτη σου εργασία με πράκτορα
lockedin-cli/
├── bin/lockedin.js # σημείο εισόδου — το ΜΟΝΟ κομμάτι που κάνει είσοδο/έξοδο
├── src/lockedin.js # ο πυρήνας — καθαρές συναρτήσεις που επιστρέφουν strings
├── test/
│ ├── unit.test.js # ελέγχει τις συναρτήσεις πυρήνα απευθείας
│ └── cli.test.js # ξεκινά το πραγματικό binary και ελέγχει την έξοδό του
├── tools/screenshot.js # αποδίδει τα SVG που βλέπεις στο docs/
└── package.json # metadata + το script `npm test`
Τέσσερις ιδέες το κάνουν να λειτουργεί. Μάθε αυτές και μπορείς να ζητήσεις από τον πράκτορα σχεδόν οποιαδήποτε αλλαγή με σιγουριά.
Άνοιξε το src/lockedin.js. Πρόσεξε ότι οι συναρτήσεις απόδοσης δεν τυπώνουν —
επιστρέφουν strings:
function renderConnect() {
const names = shuffle(NAMES).slice(0, 6);
// ...χτίζει έναν πίνακα από γραμμές...
return out.join('\n'); // επιστρέφει κείμενο· δεν τυπώνει τίποτα
}Όλο το πραγματικό τύπωμα (και η ανάγνωση των πλήκτρων σου) συμβαίνει στο
bin/lockedin.js. Αυτός ο διαχωρισμός «ο πυρήνας επιστρέφει δεδομένα, το άκρο
κάνει I/O» είναι το μοναδικό πιο σημαντικό πράγμα εδώ, γιατί μια συνάρτηση που
απλώς επιστρέφει ένα string είναι τετριμμένο να ελεγχθεί:
const out = app.renderConnect();
assert.ok(out.includes("“Θα ήθελα να σε προσθέσω στο professional network μου.” — στάλθηκε σε "));Χωρίς προσομοίωση terminal, χωρίς σύλληψη του stdout. Όταν ζητάς από τον πράκτορα να προσθέσει ένα χαρακτηριστικό, γι' αυτό μπορεί να προσθέσει και ένα γρήγορο, αξιόπιστο test γι' αυτό.
Τα αστεία ζουν σε απλούς πίνακες κοντά στην κορυφή του src/lockedin.js:
const HOOKS = [ 'Μη δημοφιλής άποψη:', 'Άστο να κάτσει μέσα σου.', /* ...~25 συνολικά... */ ];
const LESSONS = [ '→ Το network σου είναι το net worth σου.', /* ... */ ];Οι γεννήτριες επιλέγουν από αυτά τα pools. Στην v1.2.0 κάθε pool μεγάλωσε σε
~25 παραλλαγές, και προστέθηκε ένα δεύτερο στρώμα από pools προτύπων
(πράγματα όπως τα POST_REVEALS και REFLECT_TAGSETS) ώστε η δομή κάθε εξόδου
να ποικίλλει, όχι μόνο οι λέξεις. Η προσθήκη περιεχομένου είναι συχνά τόσο απλή
όσο η προσθήκη strings σε έναν πίνακα — μια τέλεια πρώτη εργασία για να αναθέσεις
σε έναν πράκτορα.
Η τυχαία έξοδος και τα αυτοματοποιημένα tests ακούγονται ασύμβατα. Αυτό το έργο τετραγωνίζει τον κύκλο με μια γεννήτρια τυχαίων αριθμών με seed:
setSeed(42);
const a = generatePost();
setSeed(42);
const b = generatePost();
// a === b → ίδιο seed, ίδια δημοσίευσηΚάθε τυχαία επιλογή περνάει μέσα από τους κοινούς βοηθούς pick() / shuffle(),
που αντλούν από αυτή τη γεννήτρια με seed. Όρισε LOCKEDIN_SEED=42 και το CLI
είναι πλήρως αναπαραγώγιμο. Ο χρυσός κανόνας για κάθε αλλαγή: η νέα τυχαιότητα
πρέπει να χρησιμοποιεί pick / shuffle, ποτέ Math.random απευθείας —
αλλιώς ο ντετερμινισμός (και τα tests) σπάνε. Κράτα το στην τσέπη σου· θα το
θυμίσεις στον πράκτορα στο Κεφάλαιο 3.
- Το
test/unit.test.jsκαλεί τις συναρτήσεις πυρήνα και διαβεβαιώνει για τα strings που επιστρέφουν (γρήγορα, ακριβή). - Το
test/cli.test.jsπράγματι ξεκινά τοbin/lockedin.jsκαι ελέγχει το πραγματικό stdout και τον κωδικό εξόδου του (αποδεικνύει ότι όλο το πράγμα λειτουργεί από άκρη σε άκρη).
Μαζί είναι η πύλη. Επίσης κωδικοποιούν αναλλοίωτα — υποσχέσεις που δίνει η
εφαρμογή. Για παράδειγμα, μια δημοσίευση πάντα ανοίγει με ένα γνωστό hook και
πάντα περιέχει τουλάχιστον τρία → διδάγματα· η οθόνη «connect» λέει πάντα
incalculable. Όταν ένας πράκτορας αλλάζει κώδικα, αυτά τα tests πιάνουν
οτιδήποτε έσπασε σιωπηλά μια υπόσχεση.
Βάλε τις τέσσερις ιδέες μαζί και παίρνεις έναν κώδικα όπου ένας πράκτορας μπορεί:
- Να προσθέσει ένα χαρακτηριστικό ως καθαρή συνάρτηση που επιστρέφει ένα string,
- Να προσθέσει ένα test γι' αυτό χωρίς ακροβατικά I/O,
- Να κρατήσει την έξοδο αναπαραγώγιμη μέσω της γεννήτριας με seed, και
- Να αποδείξει ότι δεν έσπασε τίποτα τρέχοντας την υπάρχουσα πύλη.
Αυτός είναι ο βρόχος που θα τρέξεις στο επόμενο κεφάλαιο.
Ζήτα από τον πράκτορά σου να επαληθεύσει την κατανόησή σου — διαβάζοντας, όχι επεξεργαζόμενος:
- «Παράθεσε κάθε pool περιεχομένου στο
src/lockedin.jsκαι πόσες εγγραφές έχει το καθένα.» - «Δείξε μου ένα αναλλοίωτο που επιβάλλει το
test/unit.test.jsγια τοgeneratePost, και εξήγησε τι θα το έσπαγε.» - «Πού ορίζεται η γεννήτρια με seed, και ποιες συναρτήσεις πρέπει να τη
χρησιμοποιούν αντί για
Math.random; Μην αλλάξεις τίποτα — απλώς εξήγησε.»
Όταν οι απαντήσεις του πράκτορα ταιριάζουν με αυτό το κεφάλαιο, είσαι έτοιμος/η να χτίσεις.
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.