Jedinica 2 / 12

Skriptiranje i automatsko dovršavanje

Dobici:

  • Mogućnost mapiranja načina ćaskanja za ispravan tip zadatka sa inline dovršavanjem
  • Sposobnost pisanja moćnih uputstava za proizvodnju koja uključuju ulazno/izlazne ugovore, rubne slučajeve i stilska ograničenja
  • Sposobnost provjere generiranog koda i svih novih predloženih ovisnosti prije spajanja

Prva tačka kontakta programera sa AI često je autodovršavanje – funkcija koja predlaže sledeći red dok kucate – ili izgovaranje „unesite tu funkciju“ u prozor za ćaskanje. Obojica koriste isti motor, ali zahtijevaju različite discipline. U ovoj jedinici transformiramo generiranje koda iz nasumičnog "zapisivanja" u inženjerski korak čiji je izlaz predvidljiv i provjerljiv.

Cilj je pretvoriti AI iz alata koji ubrzava vašu mašinu za kucanje u pripravnika koji radi u okviru ograničenja koja ste postavili. Dobro vođeni pripravnik štedi vrijeme; Nevođeni šegrt stvara nered koji kasnije morate počistiti.

Dva načina korištenja: Inline Completion i Chat

Inline dovršavanje dolazi u igru dok kucate u uređivaču; Upisujete potpis funkcije ili red za komentare i on predlaže ostalo. Odličan je za brzinu, ali ima uzak kontekst: vidi samo kod u neposrednoj blizini. Zato je najbolje kada u komentaru jasno napišete svoju namjeru. Na primjer, //provjeri korisničku e-poštu, izbaci ValidationError ako nevažeći komentar značajno poboljšava prijedlog u nastavku.

Način ćaskanja je za veće i strukturirane zadatke: "Dodaj paginaciju ovoj klasi", "Izdvoji sučelje te usluge". Ovdje imate luksuz davanja uloge, konteksta i formata. Opšte pravilo je: završetak za male i tekuće zadatke, razgovor za zadatke koji zahtijevaju razmišljanje i strukturu.

Savjet: Nemojte slijepo prihvatiti prijedlog za dovršetak sa "Tab". Pročitajte predloženi red na sekundu; Odavde najčešće curi netačno ime varijable ili obrnuti uslov.

Koraci za prevođenje namjere u kod

  1. Definišite ugovor. Kakvo je ponašanje funkcije unosa, izlaza i greške? Kao "Dobij e-poštu, normaliziraj ako je važeća, izbaci grešku ako je nevažeća".
  2. Navedite ograničenja. Ne koristite eksternu zavisnost? Specifičan stilski vodič? Postoji li ograničenje performansi?
  3. Navedite primjer. Par ulaz-izlaz (“ali@x.com → validan, ali@ → greška”) pomera razumevanje namere modela od predviđanja do preciznosti.
  4. Zatražite male komade. Jedna funkcija, jedna odgovornost. Zatim pređite na sljedeću.
  5. Pročitajte i pokrenite generirani kod. Kompajliranje + brzi ručni pokušaj je najjeftiniji korak osiguranja.

Tri mini futrole

Slučaj 1 — Proizvodnja vođena komentarima povećava preciznost. Programer je prvo zatražio funkciju raščlanjivanja datuma s praznim tijelom i dobio je tačan rezultat u 3 runde. U drugom pokušaju, kada sam definisao funkciju sa komentarom od 4 reda (prihvaćeni formati, pravilo vremenske zone, stanje greške) i zatražio je, došao je kod koji je radio u prvom krugu. Isti model, isti dan; razlika je bila samo u jasnoći namjere.

Slučaj 2 — Nenavođenje verzije je skupo. Jedan tim se borio sa naslijeđenim API-jem zasnovanim na povratnom pozivu koji je zamijenio fs.promises u kodu proizvedenom za Node.js. Kada je linija "Koristi čvor 20, ESM, async/await" dodata u prompt, proizvodnja je pratila projekat prvi put; Prosjek od 12 minuta utrošenih na korekciju je resetovan.

Slučaj 3 — Stvarni dobitak u standardnom kodu. Mikroservis je zahtijevao 6 novih DTO (Objekat prijenosa podataka — jednostavna klasa podataka koja prenosi podatke između slojeva) i njihova pravila validacije. Ono što je nekada bilo otprilike 90 minuta ručnog rada smanjeno je na 35 minuta kada ga je proizvela i pregledala AI; Budući da je ponavljanje koda veliko i obrazac jasan, AI je ovdje radio u svom najefikasnijem području.

Četiri predloška koji se mogu kopirati

Generiranje funkcija na osnovu ugovora:

Uloga: Vi ste marljiv {{jezik}} programer. Ugovor o funkciji:- Ime: {{name}}- Ulaz: {{vrste i njihovo značenje}}- Izlaz: {{vrsta i značenje}}- Status greške: {{šta se baca/vraća kada}}Ograničenja: {{bez vanjskih ovisnosti / stilova/izvođenja {}}Primjer> {{output_1}}- {{entry_2}} -> {{error_2}}Prvo dajte potpis + kratki plan, a zatim kod. Pisanje testova, samo funkcija.

Da odgovara postojećem stilu (prilagodi bazi koda):

Ispod je primjer funkcije iz našeg projekta; Ovdje naučite imenovanje, rukovanje greškama i stil komentiranja. Napišite funkciju za {{new_task}} sa ISTIM stilom. Primjer: {{current_code}}

Od skeleta do punjenja (stub → implementacija):

Ispunite skelet funkcije ispod prema TODO-ima u komentarima. PROMIJENI potpis i tip povratka. Nemojte praviti pomoćnu funkciju koja ne postoji; ako je potrebno, javite mi "ovaj pomoćnik je potreban". {{skelet_kod}}

Alternativno poređenje aplikacija:

Dajte 2 različite implementacije za {{task}}: (a) davanje prioriteta čitljivosti, (b) davanje prioriteta performansama. Ispod svake napišite po jednu rečenicu "kada je poželjno".

Slaba prompt / Jaka prompt

Slabo: "Napišite mi funkciju potvrde e-pošte."
Jaka: "TypeScript 5, samo standardna biblioteka. Napišite isValidEmail(input: string): boolean. Skratite razmake, učinite ga neosjetljivim na velika i mala slova, a@b.co je važeći, a@, @b.co, prazan niz je nevažeći. Ako ćete koristiti regex, nemojte biti previše složeni; dodajte 2 reda komentara."

Moćna verzija; Vraća jezik, verziju, potpis, rubne slučajeve i stilsko ograničenje. Dakle, generirani kod radi i uklapa se u vaš projekat.

Pristup

Kada koristiti

Pažnja

Inline završetak

Mali umetci u toku

Nemojte prihvatiti prijedlog bez čitanja

Proizvodnja po ugovoru u chatu

Nova funkcija/klasa

Navedite primjer i rubni slučaj

Izrada po uzorku stila

Dodavanje postojećem kodu

Odaberite trenutni uzorak koda

punjenje kostura

Potpis fiksiran, tijelo prazno

Promjena potpisa

Dupliciranje koda i zamka zavisnosti

AI često preporučuje novu biblioteku kako bi olakšala svoj posao. Ponekad je to tačno, ponekad dodaje nepotrebnu zavisnost vašem projektu ili sugeriše paket koji ne postoji (halucinacija). Pravilo: potvrđujete svaku novu zavisnost. Nemojte ga dodavati u projekat bez potvrde da paket zaista postoji, da se održava i da ima odgovarajuću licencu. Većinu vremena je pomoćnik koji je već u projektu bolji od novog paketa.

Oprez: Pregledajte uvozne linije koje je predložila AI. Nepostojeći naziv paketa (koji takođe može da liči na lažne pakete koji se nazivaju "pogreška pri kucanju") i prekida kompilaciju i predstavlja bezbednosni rizik.

Uobičajene greške

  • Imajući potpis određen modelom. Ako ne popravite tipove ulaza/izlaza, različiti potpis dolazi sa svakom proizvodnjom i integracija postaje teška.
  • Da ne spominjemo rubne slučajeve. Prazan unos, null, negativan broj, vrlo velika vrijednost — ako ih ne navedete, model upisuje "sretan put", preskačući rubove.
  • Kombiniranje prijedloga bez testiranja. Kod koji izgleda da radi ne znači da radi.
  • Prihvatanje nepotrebne zavisnosti. Dodavanje cijele biblioteke za jedan redak stvara tehnički dug.
  • Stilska nedosljednost. Različito imenovanje i rukovanje greškama od ostatka projekta čini bazu koda neujednačenom.

Ukratko

Generiranje koda je moćno kada namjeru prevedete u jasan ugovor. Koristite inline dovršavanje za male, in-stream zadatke i za zadatke koji uspostavljaju strukturu u razgovoru. Vi specificirate tipove ulaza/izlaza, rubne slučajeve, verziju i stil; Navedite primjer modela; provjeriti svaku novu ovisnost; i pokrenite i pročitajte svaki proizvedeni komad. AI se najbolje isplati u formulisanom kodu koji se ponavlja - pokrenite ga tamo, u granicama koje postavite.

Zadatak aplikacije

Odaberite stvarnu malu funkciju iz svog projekta koju trebate napisati. Prvo ga odštampajte na AI sa šablonom „generisanje funkcija zasnovano na ugovoru“, dajući tipove ulaza/izlaza, dva rubna slučaja i stilsko ograničenje. Kompajlirajte generirani kod i isprobajte ga s dva različita ulaza. Zatim ponovo pitajte istu funkciju, ovaj put „napišite mi ovo“ bez ikakvog konteksta, i uporedite dva izlaza red po red: koji rubni slučajevi su propušteni, koliko je ispravaka bilo potrebno?

kontrolna lista

  • [ ] Znam gdje da koristim način ćaskanja sa inline dovršavanjem.
  • [ ] Određujem ulaz/izlaz ugovor i rubne slučajeve u generiranju funkcije.
  • [ ] Ušao sam u naviku da dodam informacije o jeziku i verziji u prompt.
  • [ ] Sastavljam i testiram svaki proizvedeni komad prije sklapanja.
  • [ ] Potvrđujem svaku novu zavisnost koju AI predlaže provjeravajući njeno postojanje i neophodnost.
  • [ ] Provjeravam da li generirani kod odgovara stilu projekta.