-
Notifications
You must be signed in to change notification settings - Fork 0
Tutorial 2 How the Code Works tr
Amaç: bu projeyi bir AI ajanıyla değiştirmeyi kolay — ve güvenli — kılan bir avuç tasarım kararını anlamak. Kodu ezberlemenize gerek yok; ajanı hassas bir şekilde yönlendirebilmeniz için zihinsel modele ihtiyacınız var.
← Önceki: Eğitim 1 Yönlendirme · Sonraki: Eğitim 3 İlk Ajan Göreviniz
lockedin-cli/
├── bin/lockedin.js # giriş noktası — girdi/çıktı yapan TEK bölüm
├── src/lockedin.js # çekirdek — string döndüren saf işlevler
├── test/
│ ├── unit.test.js # çekirdek işlevleri doğrudan test eder
│ └── cli.test.js # gerçek çalıştırılabilir dosyayı başlatır ve çıktısını denetler
├── tools/screenshot.js # docs/ içindeki SVG'leri oluşturur
└── package.json # meta veriler + `npm test` betiği
Dört fikir bunu işletir. Bunları öğrenin, ajandan neredeyse her değişikliği güvenle isteyebilirsiniz.
src/lockedin.js'i açın. Render fonksiyonlarının yazdırmadığına dikkat edin —
onlar dize döndürür:
function renderConnect() {
const names = shuffle(NAMES).slice(0, 6);
// ...satırlardan oluşan bir dizi kurar...
return out.join('\n'); // metin döndürür; hiçbir şey yazdırmaz
}Tüm asıl yazdırma (ve tuş vuruşlarınızı okuma) bin/lockedin.js'te olur. Bu
"çekirdek veri döndürür, kenar I/O yapar" ayrımı buradaki tek en önemli şeydir,
çünkü yalnızca bir dize döndüren bir fonksiyonun test edilmesi önemsizdir:
const out = app.renderConnect();
assert.ok(out.includes("“Seni profesyonel network'üme eklemeyi çok isterim.” — gönderilen kişi: "));Terminal mock'lamak yok, stdout yakalamak yok. Ajandan bir özellik eklemesini istediğinizde, bunun için hızlı, güvenilir bir test de ekleyebilmesinin nedeni budur.
Şakalar, src/lockedin.js'in üst tarafındaki düz dizilerde yaşar:
const HOOKS = [ 'Popüler olmayan fikir:', 'Reddedilmek daha iyi ışıklandırılmış bir yönlendirmedir. — DM’e hazır versiyon', /* ...~25 total... */ ];
const LESSONS = [ "→ Network'ün net worth'ündür.", /* ... */ ];Üreticiler bu havuzlardan seçer. v1.2.0'da her havuz ~25 varyasyona büyüdü ve
ikinci bir katman şablon havuzları eklendi (POST_REVEALS ve REFLECT_TAGSETS
gibi şeyler) böylece her çıktının yapısı değişir, yalnızca sözcükler değil. İçerik
eklemek çoğu zaman bir diziye dize eklemek kadar basittir — bir ajana devretmek için
mükemmel bir ilk görev.
Rastgele çıktı ve otomatik testler uyumsuz gibi görünür. Bu proje, bu çemberi bir tohumlanabilir rastgele sayı üreteciyle kare içine alır:
setSeed(42);
const a = generatePost();
setSeed(42);
const b = generatePost();
// a === b → aynı tohum, aynı gönderiHer rastgele seçim, o tohumlu üreteçten çeken paylaşılan pick() / shuffle()
yardımcılarından geçer. LOCKEDIN_SEED=42 ayarlayın ve CLI tamamen yeniden
üretilebilir olur. Herhangi bir değişiklik için altın kural: yeni rastgelelik
pick / shuffle kullanmalı, asla doğrudan Math.random — aksi halde
determinizm (ve testler) kırılır. Bunu arka cebinizde tutun; 3. bölümde bunu ajana
hatırlatacaksınız.
-
test/unit.test.jsçekirdek fonksiyonlarını çağırır ve döndürdükleri dizeler üzerinde doğrulama yapar (hızlı, hassas). -
test/cli.test.jsaslındabin/lockedin.js'i başlatır ve gerçek stdout'unu ve çıkış kodunu kontrol eder (tüm şeyin uçtan uca çalıştığını kanıtlar).
Birlikte kapıyı oluştururlar. Ayrıca değişmezleri kodlarlar — uygulamanın verdiği
sözler. Örneğin, bir gönderi her zaman bilinen bir hook ile açılır ve her zaman en az
üç → ders içerir; "connect" ekranı her zaman incalculable der. Bir ajan kodu
değiştirdiğinde, bu testler sessizce bir sözü bozan her şeyi yakalar.
Dört fikri bir araya getirin ve bir ajanın şunları yapabileceği bir kod tabanı elde edersiniz:
- Bir özellik ekle dize döndüren saf bir fonksiyon olarak,
- Onun için bir test ekle herhangi bir I/O jimnastiği olmadan,
- Çıktıyı tohumlu RNG aracılığıyla yeniden üretilebilir tut, ve
- Mevcut kapıyı çalıştırarak hiçbir şeyi bozmadığını kanıtla.
Bir sonraki bölümde çalıştıracağınız döngü budur.
Ajanınızdan anlayışınızı doğrulamasını isteyin — okuyarak, düzenlemeden değil:
- "
src/lockedin.js'teki her içerik havuzunu ve her birinin kaç girdisi olduğunu listele." - "
test/unit.test.js'ingeneratePosthakkında zorunlu kıldığı bir değişmez göster ve onu neyin bozacağını açıkla." - "Tohumlu RNG nerede tanımlı ve hangi fonksiyonlar
Math.randomyerine onu kullanmalı? Hiçbir şeyi değiştirme — sadece açıkla."
Ajanın cevapları bu bölümle eşleştiğinde, geliştirmeye hazırsınız.
Sonraki: Eğitim 3 İlk Ajan Göreviniz
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.