Bu bloqun yarısını yenidən yazdım, çünki ilk qaralamalar utancverici idi. Tam olaraq səhv deyildi. Sadəcə cılız idi. Ümumi. Oxuyub dərhal unutduğun növdən. Hər digər “WordPress addonunu belə qurdum” yazısına oxşayırdılar, çünki əslində elə də idi: bir abzas qeydim, üstəgəl modelin pluginlərin adətən necə işlədiyi barədə yaddaşından bərpa edə bildiyi nə vardısa.
İkinci dəfə bir şeyi fərqli etdim. Agenti əsl repozitoriyalara yönəltdim. Əsl addon koduna. Və yazı tamamilə dəyişdi.
Vibe inamlı və səhvdir
Süni intellekt agentinə qısa xülasə verib oradan yazmasını istəyəndə vibe alırsan. O, gördüyü hər şeyin ortalamasına uyğunlaşdırır. Orta WooCommerce əlavəsi. Orta ödəniş inteqrasiyası. Orta qovluq quruluşu. Nəticə axıcı və inandırıcıdır, amma demək olar ki, heç vaxt sənin kodunla üst-üstə düşmür.
Mətndə bu, qeyri-müəyyənlik kimi üzə çıxır. Bir yazının ilk qaralaması təxminən belə deyirdi: “addon rezervasiya axınına qoşulur və depozit addımı əlavə edir.” Mahiyyətcə doğru. Praktikada faydasız. Orada heç bir fayl yoxdur. Heç bir qərar yoxdur. Niyə məhz belə qurulduğunun səbəbi yoxdur. Repozitoriyanı heç vaxt açmamış birinin yazacağı təsvirdir.
Kod üçün isə daha pisdir, çünki vibe kompilyasiya olunur. Agent mövcud olmayan bir köməkçi funksiya uydurur, freymvorkdə olduğunu güman etdiyi imza ilə metodu çağırır, iki versiya əvvəl adı dəyişdirilmiş konfiq açarını fərz edir. İşə düşənə qədər hamısı düzgün görünür. İnamlı uydurmaları düzəltməyə özün yazacağından çox vaxt sərf edirsən.
Reponu verəndə nə dəyişdi
Öz kommersiya addonlarımın hər birini github.com/74h1r altında ayrı repozitoriyada saxlayıram. Bloq işini həmin repoları əslində oxuya bilən agentlərlə yenidən işlədəndə fərq dərhal və konkret oldu.
Depozit addonu haqqında yazı “depozit addımı əlavə edir” deməyi dayandırıb işin əsl formasını adlandırmağa başladı: onu hansı giriş faylının qeydiyyatdan keçirdiyi, parametrlərin harada olduğu, hamıdan kor-koranə pul almaq əvəzinə ilk dəfə gələn müştəriləri konfiqurasiya olunan minimumla onlayn ödənişə məcbur etmək qərarı. Bu incəlik qeydlərimdə yox idi. Kodda idi. Agent onu yalnız kodu oxuduğu üçün tapdı.
Digərlərində də eyni hekayə. Subdomen və xüsusi domen marşrutlaşdırma addonu. Hər işçiyə görə müddət təyinatı. Müstəqil bank köçürməsi ödəniş üsulu. Hər yazı konkretləşdi, çünki mənbə konkret idi. Əsl fayl quruluşları. Əslində verdiyim güzəştlər, bəzən mənə özümə nə üçün belə etdiyimi xatırladan şəkildə geri qaytarıldı.
Yeri gəlmişkən, əlamət budur. Nəticə sənə öz işin haqqında nə isə öyrədəndə agent oxuyur. Hamar ümumiləşdirmələrlə sənə yarınanda isə təxmin edir.
Bu, yazı fəndi deyil
Dərs birbaşa gündəlik kodlamaya keçir, vaxtımın əsl keçdiyi yerə.
Baqı təsvir etmə. Düşən testi göstər. “Bəzən endirim tətbiq olunmur” agentə uydurmaqdan başqa heç nə vermir. Düşən əsl assertion, əsl stack trace, onu işə salan əsl giriş — bax bu, vura biləcəyi hədəfdir.
API-ni xülasə etmə. Əsl sinfə yönəlt. Hər freymvorkun öz konvensiyaları var və onlara dair təxmin sadəcə təxmindir. WordPress hooklar və qlobal $wpdb təqdim edir; Booknetic WordPress üzərində öz strukturunu verir; orada bütün bir kateqoriya plugin heç bir abstraksiya olmadan birbaşa verilənlər bazasına xam sorğular atır. “Bu, WordPress pluginidir” əsasında işləyən agent orta plugin üçün kod yazacaq, sənin üçün yox. Əsl fayllarını oxuyan agent isə sənin konvensiyalarına yazır.
Konfiqi parafraz etmə. Aç onu. payment_min_deposit ilə min_deposit_amount arasındakı fərq işləyən kodla xəta atan kod arasındakı fərqdir və heç bir mühakimə modelin heç vaxt görmədiyi açarı bərpa etməz.
Üçünün də altındakı naxış: gerçəkliyin təsvirini gerçəkliyin özü ilə əvəz et. Kodun haqqında yaddaşın itkilidir. Xülasən itkilidir. Repo isə yox.
Agenti boğmadan əsasda saxlamaq
Aydın etiraz kontekstdir. Bütöv kod bazasını prompta tökə və ardıcıllıq gözləyə bilməzsən — başqa cür uğursuzluq alırsan, siqnal boğulur. Deməli, əsl bacarıq “hər şeyi ver” deyil, “düzgün dilimi, kiçik miqyasda ver”dir.
Mənim üçün həm yazıda, həm kodda işləyən ritm budur:
- Beyin fırtınası. Əvvəlcə niyyəti danış, ucadan, heç bir fayla toxunmadan. Əslində nə etməyə çalışıram və niyə.
- Spesifikasiya. Bitmişin necə göründüyünü yaz. Mən olmayan birinə verə biləcəyim qədər konkret.
- Plan. Spesifikasiyanı sıralanmış addımlara böl, hər biri ayrıca yoxlana biləcək qədər kiçik.
- Kiçik hissələr. Bir addımı bir dəfəyə icra et, hər biri lazım olan konkret əsl fayllara yönəlmiş və başqa heç nəyə yox.
Hər mərhələ kontekstı daraldır. Agent kiçik hissəni edən vaxt bütöv reponu beynində saxlamır — bu addımın toxunduğu üç faylı, üstəgəl keçirməli olduğu düşən testi saxlayır. Əsl kod, amma miqyaslı. Konkret, boğulmadan.
Bu, eyni zamanda asan olduğunu iddia etməyəcəyim hissədir. Agentləri bu döngədə orkestrləşdirmək üçün öz qurğumu işlədirəm. Onun şəxsi işlətdiyim bir adı və burada açmayacağım bir forması var. Mən yatanda agentləri gerçəkliyə yönəlmiş saxlayan şey de. Alacağın bu qədərdir.
Ziddiyyətli hissə
İndi sənaye söhbəti əsasən daha böyük modellər, daha uzun kontekst pəncərələri, daha ağıllı promptlar haqqındadır. Hamısı faydalı. Heç biri əsas qaldırac deyil.
Qaldırac sadədir: agent əsl şeyi oxudu, yoxsa vibe-dan uydurdu. Sənin əsl kodunu oxuyan mütəvazi model xülasədən təxmin edən qabaqcıl modeli hər dəfə həm yazıda, həm mühəndislikdə üstələyəcək. Birinci yarını sübut etmək üçün yenidən yazılmış bloq yazılarım var, ikincini sübut etmək üçün bir illik addon kommitlərim.
Deməli, daha yaxşı modelə və ya daha uzun prompta əl atmadan əvvəl darıxdırıcı şeyi yoxla. Mənbə otaqdadırmı. Düşən testdir, əsl konfiqdir, əsl sinifdir — yoxsa onların sənin təsvirin. Bu boşluğu bağla, keyfiyyət probleminin çoxu da onunla bağlanar.
Vibe musiqi üçündür. Kod kodu istəyir.