Jedinica 2 / 12

Skriptiranje i automatsko dovršavanje

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

  1. 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".
  2. Navedite ograničenja. Ne koristite vanjsku ovisnost? Poseban stilski vodič? Postoji li ograničenje izvedbe?
  3. Navedite primjer. Ulazno-izlazni par ("ali@x.com → valjano, ali@ → pogreška") pomiče modelovo razumijevanje namjere s predviđanja na preciznost.
  4. Tražite male komadiće. Jedna funkcija, jedna odgovornost. Zatim prijeđite na sljedeći.
  5. 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.