Dobici:
- Mogućnost mapiranja načina chata za ispravljanje vrste zadatka s umetnutim dovršavanjem
- Sposobnost pisanja snažnih produkcijskih upita koji uključuju ulazno/izlazne ugovore, rubne slučajeve i stilska ograničenja
- Mogućnost provjere generiranog koda i svih novih predloženih ovisnosti prije spajanja
Prva točka kontakta programera s umjetnom inteligencijom često je automatsko dovršavanje — značajka koja predlaže sljedeći redak dok upisujete — ili izgovaranje "upišite tu funkciju" u prozor za chat. Obojica koriste isti motor, ali zahtijevaju različite discipline. U ovoj jedinici pretvaramo generiranje koda iz nasumičnog "zapisivanja" u inženjerski korak čiji je rezultat predvidljiv i provjerljiv.
Cilj je AI pretvoriti iz alata koji ubrzava vaš stroj za tipkanje u pripravnika koji radi unutar ograničenja koja ste postavili. Dobro vođen pripravnik štedi vrijeme; Nevođeni pripravnik stvara nered koji kasnije morate počistiti.
Dva načina korištenja: Inline Completion i Chat
Inline dovršavanje dolazi u obzir dok upisujete u uređivač; Vi upišete potpis funkcije ili redak komentara i on predlaže ostalo. Izvrstan je za brzinu, ali ima uzak kontekst: vidi samo kod u neposrednom području. Zato je najbolje kada svoju namjeru jasno napišete u komentaru. Na primjer, //potvrdi e-poštu korisnika, izbaci ValidationError ako je nevažeći komentar značajno poboljšava prijedlog u nastavku.
Način chata je za veće i strukturirane zadatke: "Dodaj paginaciju ovoj klasi", "Izdvoj sučelje te usluge". Ovdje imate luksuz davanja uloge, konteksta i formata. Opće pravilo je: završetak za male i tekuće zadatke, razgovor za zadatke koji zahtijevaju razmišljanje i strukturu.
Savjet: nemojte slijepo prihvatiti prijedlog dovršetka s "Tab". Pročitajte predloženi redak na sekundu; Odavde najčešće curi netočan naziv varijable ili obrnuti uvjet.
Koraci za prevođenje namjere u kod
- Definirajte ugovor. Kakvo je ponašanje ulaza, izlaza i pogreške funkcije? Kao "Primi e-poštu, normaliziraj ako je važeća, izbaci pogrešku ako je nevažeća".
- Navedite ograničenja. Ne koristite vanjsku ovisnost? Poseban stilski vodič? Postoji li ograničenje izvedbe?
- Navedite primjer. Ulazno-izlazni par ("ali@x.com → valjano, ali@ → pogreška") pomiče modelovo razumijevanje namjere s predviđanja na preciznost.
- Tražite male komadiće. Jedna funkcija, jedna odgovornost. Zatim prijeđite na sljedeći.
- Pročitajte i pokrenite generirani kod. Sastavljanje + brzi ručni pokušaj najjeftiniji je korak osiguranja.
Tri mini kućišta
Slučaj 1 — Proizvodnja na temelju komentara povećava točnost. Programer je prvo zatražio funkciju parsiranja datuma s praznim tijelom i dobio točan rezultat u 3 kruga. U drugom pokušaju, kada sam definirao funkciju s komentarom od 4 retka (prihvaćeni formati, pravilo vremenske zone, stanje pogreš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 — Neodređivanje verzije je skupo. Jedan se tim borio s naslijeđenim API-jem temeljenim na povratnom pozivu koji je zamijenio fs.promises u kodu proizvedenom za Node.js. Kada je redak "Use Node 20, ESM, async/await" dodan upitu, proizvodnja je prvi put slijedila projekt; Poništen je prosjek od 12 minuta utrošenih na ispravljanje.
Slučaj 3 — Stvarni dobitak u osnovnom kodu. Mikroservis je zahtijevao 6 novih DTO (Data Transfer Object — jednostavna klasa podataka koja prenosi podatke između slojeva) i njihova pravila provjere valjanosti. Ono što je nekad bilo približno 90 minuta ručnog rada smanjeno je na 35 minuta kada je proizvedeno i pregledano od strane AI; Budući da je ponavljanje koda visoko i uzorak jasan, AI je ovdje radio u svom najučinkovitijem području.
Četiri predloška za kopiranje
Generiranje funkcije na temelju ugovora:
Uloga: Vi ste vrijedan {{language}} programer. Ugovor o funkciji:- Ime: {{name}}- Ulaz: {{vrste i njihovo značenje}}- Izlaz: {{vrsta i značenje}}- Status pogreške: {{što se izbacuje/vraća kada}}Ograničenja: {{nema vanjskih ovisnosti / stila / izvedbe}}Primjeri:- {{input_1}} -> {{output_1}}- {{entry_2}} -> {{error_2}}Prvo dajte potpis + kratki plan, a zatim kôd. Pisanje testova, samo funkcija.
Za usklađivanje s postojećim stilom (prilagodba bazi koda):
Ispod je primjer funkcije iz našeg projekta; Ovdje naučite imenovanje, rukovanje pogreškama i stil komentiranja. Napišite funkciju za {{new_task}} ISTIM stilom. Primjer: {{current_code}}
Od kostura do ispune (stub → implementacija):
Ispunite kostur funkcije u nastavku prema TODO-ima u komentarima. PROMIJENITE potpis i vrstu povrata. Ne stvarajte pomoćnu funkciju koja ne postoji; ako treba, javite mi "potreban je ovaj pomoćnik". {{skelet_kod}}
Alternativna usporedba aplikacija:
Dajte 2 različite implementacije za {{zadatak}}: (a) davanje prioriteta čitljivosti, (b) davanje prioriteta performansama. Zapišite 1 rečenicu "kada je poželjno" ispod svake.
Slab upit / Jak upit
Slab: "Napišite mi funkciju provjere e-pošte."
Strong: "TypeScript 5, samo standardna biblioteka. Napišite isValidEmail(input: string): boolean. Smanjite razmake, neka ne razlikuje velika i mala slova, a@b.co je valjan, a@, @b.co, prazan niz je nevažeći. Ako ćete koristiti regularni izraz, nemojte biti previše složeni; dodajte 2 retka komentara."
Snažna verzija; Vraća jezik, verziju, potpis, rubna kućišta i stilsko ograničenje. Dakle, generirani kod radi i uklapa se u vaš projekt.
pristup
Kada koristiti
Pažnja
Inline dovršetak
Mali umetci u toku
Nemojte prihvatiti prijedlog bez da ga pročitate
Proizvodnja temeljena na ugovoru u chatu
Nova funkcija/klasa
Navedite primjer i rubni slučaj
Proizvodnja po uzorku stila
Dodavanje postojećem kodu
Odaberite trenutni uzorak koda
nadjev kostura
Potpis ispravljen, tijelo prazno
Promjena potpisa
Umnožavanje koda i zamka ovisnosti
AI često preporučuje novu knjižnicu kako bi si olakšala posao. Ponekad je to točno, ponekad dodaje nepotrebnu ovisnost vašem projektu ili predlaže paket koji ne postoji (halucinacija). Pravilo: svaku novu ovisnost potvrđujete. Nemojte ga dodavati u projekt bez provjere da paket stvarno postoji, da se održava i da ima odgovarajuću licencu. U većini slučajeva pomoćnik koji je već u projektu bolji je od novog paketa.
Oprez: pregledajte uvozne linije koje predlaže AI. Nepostojeći naziv paketa (koji također može nalikovati lažnim paketima pod nazivom "typo-squatting") prekida kompilaciju i predstavlja sigurnosni rizik.
Uobičajene greške
- Imajući potpis određen modelom. Ako ne popravite vrste ulaza/izlaza, sa svakom produkcijom dolazi drugačiji potpis i integracija postaje teška.
- Da ne spominjem rubna kućišta. Prazan unos, nula, negativan broj, vrlo velika vrijednost — ako to ne navedete, model piše "sretnu stazu", preskačući rubove.
- Kombiniranje prijedloga bez testiranja. Kod koji se čini da radi ne znači da radi.
- Prihvaćanje nepotrebne ovisnosti. Dodavanje cijele biblioteke za jednolinijski stvara tehnički dug.
- Stilska nedosljednost. Različito imenovanje i rukovanje pogreškama od ostatka projekta čini bazu koda nerazgovjetnom.
Ukratko
Generiranje koda je moćno kada namjeru pretvorite u jasan ugovor. Koristite umetnuto dovršavanje za male zadatke u streamu i za zadatke koji uspostavljaju strukturu u razgovoru. Vi određujete vrste ulaza/izlaza, rubne slučajeve, verziju i stil; Navedite primjer modela; provjerite svaku novu ovisnost; te pokrenuti i pročitati svaki proizvedeni komad. AI se najbolje isplati u standardnom, ponavljajućem kodu — pokrenite ga odmah tamo, unutar ograničenja koja postavite.
Zadatak aplikacije
Odaberite stvarnu malu funkciju iz svog projekta koju trebate napisati. Najprije ga ispišite u AI s predloškom "generiranje funkcije temeljeno na ugovoru", dajući tipove ulaza/izlaza, dva rubna slučaja i ograničenje stila. Sastavite generirani kod i isprobajte ga s dva različita unosa. Zatim ponovo pitajte istu funkciju, ovaj put "napišite mi ovo" bez ikakvog konteksta, i usporedite dva izlaza redak po redak: koji su rubni slučajevi propušteni, koliko ispravaka je bilo potrebno?
popis za provjeru
- [ ] Znam gdje koristiti način razgovora s umetnutim dovršavanjem.
- [ ] Određujem input/output ugovor i rubne slučajeve u generiranju funkcija.
- [ ] Prešlo mi je u naviku dodavanje informacija o jeziku i verziji u upit.
- [ ] Sastavljam i testiram svaki proizvedeni komad prije sastavljanja.
- [ ] Potvrđujem svaku novu ovisnost koju AI predlaže provjerom njenog postojanja i potrebe.
- [ ] Provjeravam odgovara li generirani kod stilu projekta.