Vaša baza koda pravi je učitelj umjetne inteligencije, a ne upit
Prompt dobiva zasluge jer je vidljiv. Baza koda podučava jer sadrži posljedice.
Zatražite od AI asistenta da doda značajku uz lijepo napisan prompt i možda će izraditi nešto uvjerljivo. Dajte tom istom asistentu pristup dobro strukturiranom repozitoriju, jasnim testovima, smislenim nazivima i lokalnim konvencijama te ima priliku izraditi nešto što ondje zaista pripada.
Ta je razlika važna. Timovi često usvajanje AI-ja promatraju kao problem pisanja promptova: izrađuju predloške, prikupljaju domišljate fraze i zahtijevaju detaljnije upute. Kvaliteta prompta pomaže, ali rijetko je ograničavajući čimbenik u razvoju softvera. Stvarni operativni priručnik obično je raspoređen po cijelom repozitoriju: arhitektura, sučelja, testovi, skripte za izgradnju, konfiguracija implementacije, rukovanje pogreškama i nakupljene odluke zapisane u kodu.
Kontekst softvera nadmašuje općenite upute
Prompt može navesti: „Dodaj validaciju krajnjoj točki za izradu računa.” Ne može učinkovito obuhvatiti svaki detalj potreban da bi ta promjena bila ispravna. Treba li neispravan unos vratiti određeni oblik pogreške? Obavlja li se validacija na HTTP granici, u obrađivaču naredbi ili u objektu domene? Normaliziraju li se adrese e-pošte? Podržava li API starije klijente? Koji testovi utvrđuju očekivano ponašanje?
Zdrava baza koda odgovara na mnoga od tih pitanja bez sastanka. AI sustav koji može pregledati relevantnu rutu, uslugu, shemu, testove i susjedne značajke može zaključiti koje obrasce tim preferira. Rezultat nije magija. To je kontekstualno zaključivanje utemeljeno na artefaktima koji definiraju sustav.
Zato asistent može djelovati iznimno sposobno u jednom repozitoriju, a iznenađujuće nepouzdano u drugom, čak i kada koristi isti model i isti prompt. Razlika često nije u inteligenciji. Ona je u kvaliteti, dostupnosti i usklađenosti okolnih dokaza.
Čemu vas vaš repozitorij već podučava
Svaki projekt nečemu podučava AI agenta. Pitanje je podučava li ga jasnoj ili proturječnoj lekciji.
- Nazivi podučavaju namjeru. Funkcija nazvana
authorizeProjectAccesspruža snažnije smjernice od neodređenog pomoćnog alata nazvanogcheck. - Testovi podučavaju vidljivo ponašanje. Otkrivaju na što se pozivatelji mogu osloniti, uključujući rubne slučajeve koje prozna dokumentacija previđa.
- Tipovi i sheme podučavaju granice. Pokazuju koji su podaci prihvaćeni, proizvedeni, neobavezni, zastarjeli ili zabranjeni.
- Postojeće implementacije podučavaju konvencije. Obližnji kod otkriva obrasce ovisnosti, stil zapisivanja u zapisnik, rukovanje pogreškama i slojevitost.
- Automatizacija podučava očekivanja isporuke. Konfiguracija CI-ja, linteri, migracije i skripte za implementaciju pokazuju što mora ostati istinito nakon promjene.
Nijedan od tih artefakata nije savršen sam za sebe. Zajedno čine mnogo bogatiju specifikaciju od opisa zadatka ili poruke u chatu.
Skriveni trošak neusklađene baze koda
AI brzo otkriva nejasnoće. U repozitoriju s trima suprotstavljenim obrascima za pristup bazi podataka asistent može odabrati bilo koji od njih. Ako testovi ne postoje, nema pouzdan signal o tome čuva li njegov izlaz ponašanje. Ako dokumentacija opisuje arhitekturu koju kod više ne slijedi, model prima proturječne upute.
Primamljivo je to nazvati neuspjehom AI-ja. Točnije, riječ je o ubrzanju problema s kojim se ljudi već suočavaju. Novi razvojni programeri također imaju poteškoća kada su konvencije implicitne, moduli isprepleteni, a ponašanje nedokumentirano. AI samo ubrzava povratnu spregu: nejasni sustavi proizvode nesigurne promjene strojnom brzinom.
To ne znači da bi timovi trebali zaustaviti upotrebu AI-ja dok njihovi repozitoriji ne postanu besprijekorni. Znači da bi razvoj uz pomoć AI-ja trebali smatrati razlogom za poboljšanje signala koji pomažu i ljudima i alatima da rade sigurno.
Namjerno izgradite kontekst
Praktični cilj nije ugurati cijeli repozitorij u svaki zahtjev. Velik kontekst može biti bučan, skup i ometajući. Umjesto toga, olakšajte pronalaženje pravog konteksta i osigurajte da mu se može vjerovati kada se pronađe.
Počnite s lokalnom jasnoćom
Držite povezani kod konceptualno blizu, čak i kada se nalazi u zasebnim datotekama. Smjestite smislene testove blizu značajke koju opisuju. Koristite nazive koji prenose poslovnu namjeru. Dajte prednost malim sučeljima s eksplicitnim ulazima i izlazima u odnosu na široke pomoćne alate sa skrivenim pretpostavkama.
Kada zatražite od AI agenta da radi na zadatku, usmjerite ga prema relevantnim ulaznim točkama i zatražite da prije uređivanja pregleda slične implementacije. Primjerice, korisna uputa nije samo „dodaj paginaciju”. Ona glasi: „Pronađi postojeće krajnje točke s paginacijom, slijedi njihov ugovor odgovora, dodaj testove za rubne slučajeve i objasni svaku konvenciju koja je u sukobu s ovim zahtjevom.”
Učinite provjeru dijelom zadatka
Generiranje koda bez provjere jest automatsko dovršavanje s više samopouzdanja. Dobar tijek rada s AI-jem uključuje definiran način provjere rada: ciljane testove, provjeru tipova, lintiranje, izgradnju ili pregled generirane migracije.
npm test -- account-service
npm run typecheck
npm run lint
Točne naredbe razlikuju se ovisno o projektu. Važno je da ih je moguće pronaći u repozitoriju i da agent zna kako uspjeh znači više od stvaranja diffa. Ako naredba ne uspije, sljedeći korak treba biti istraga, a ne nasumično ponavljanje pokušaja ili opsežna prepisivanja.
Sačuvajte odluke ondje gdje su potrebne
Neka pravila zaslužuju kratko, trajno objašnjenje jer nisu očita samo iz koda. Primjeri uključuju sigurnosna ograničenja, obveze kompatibilnosti, granice vlasništva i namjerna odstupanja od uobičajenog obrasca.
Smjestite ove smjernice blizu rada koji uređuju: u sažeti dokument modula, vodič za doprinos, naziv testa koji objašnjava regresiju ili komentar koji opisuje neočitu invarijantu. Izbjegavajte velike dokumente koji dupliciraju pojedinosti implementacije i zastarijevaju. Najbolja dokumentacija smanjuje nejasnoću bez natjecanja s izvorom istine.
Koristite promptove za koordinaciju, a ne kao zamjenu
Promptovi su i dalje važni. Oni utvrđuju opseg, ograničenja i željeni ishod. Posebno su korisni za navođenje agentu što ne smije mijenjati, koji rizici zaslužuju pozornost i koje dokaze treba pružiti prije prihvaćanja promjene.
Međutim, promptovi bi trebali koordinirati s bazom koda, a ne pokušavati je zamijeniti. Snažan zahtjev mogao bi zatražiti od agenta da utvrdi zahvaćene module, navede pretpostavke, implementira najmanju sigurnu promjenu, ažurira relevantne testove i izvijesti o rezultatima provjere. To uokviruje rad. Repozitorij pruža lekciju specifičnu za domenu.
Ovdje postoji i važna ljudska odgovornost: pregledajte obrazloženje na granicama. Obratite posebnu pozornost kada promjene dotiču autorizaciju, brisanje podataka, novac, privatnost, konkurentnost, javne API-je i konfiguraciju implementacije. Kontekst poboljšava izlaz AI-ja, ali ne prenosi odgovornost.
Spremnost za AI jest inženjerska spremnost
Najproduktivniji timovi neće biti oni s najrazrađenijim bibliotekama promptova. Bit će to timovi čiji je softver čitljiv: ponašanje je testirano, granice su eksplicitne, konvencije dosljedne, a važne odluke lako je pronaći.
To je dobro inženjerstvo s AI-jem ili bez njega. Dolazak sposobnih asistenata samo povećava njegovu vrijednost. Vaša baza koda nije pasivna pohrana jučerašnjeg rada. Ona je aktivan sustav podučavanja za svakoga tko sljedeći mijenja proizvod, bez obzira na to je li taj suradnik novi član tima, iskusni recenzent ili AI agent.
Poboljšajte učitelja i prompt više ne mora nositi cijelu lekciju.