Enota 2 / 12

Skriptiranje in samodokončanje

Dobički:

  • Zmožnost preslikave načina klepeta za popravljanje vrste opravila z dokončanjem v vrstici
  • Sposobnost pisanja močnih produkcijskih pozivov, ki vključujejo vhodne/izhodne pogodbe, robne primere in slogovne omejitve
  • Možnost potrditve ustvarjene kode in vseh novih predlaganih odvisnosti pred združitvijo

Prva točka razvijalca v stiku z AI je pogosto samodokončanje – funkcija, ki med tipkanjem predlaga naslednjo vrstico – ali beseda »vnesite to funkcijo« v okno za klepet. Oba uporabljata isti motor, vendar zahtevata različne discipline. V tej enoti preoblikujemo generiranje kode iz naključnega "zapisovanja" v inženirski korak, katerega rezultat je predvidljiv in preverljiv.

Cilj je spremeniti umetno inteligenco iz orodja, ki pospeši vaš stroj za tipkanje, v vajenca, ki dela v okviru omejitev, ki ste jih nastavili. Dobro voden vajenec prihrani čas; Nevodeni vajenec ustvari nered, ki ga morate pozneje pospraviti.

Dva načina uporabe: dokončanje v vrstici in klepet

Dokončanje v vrstici pride v poštev, ko tipkate v urejevalniku; Vnesete podpis funkcije ali vrstico komentarja in predlaga ostalo. Odličen je za hitrost, vendar ima ozek kontekst: vidi samo kodo v neposredni bližini. Zato najbolje deluje, če svojo namero jasno zapišete v komentar. Na primer, //validate user email, throw ValidationError if valid comment znatno izboljša spodnji predlog.

Način klepeta je namenjen večjim in strukturiranim opravilom: "Dodaj stran temu razredu", "Izvleči vmesnik te storitve". Tukaj imate razkošje podajanja vloge, konteksta in formata. Splošno pravilo je: dokončanje za majhne in tekoče naloge, pogovor za naloge, ki zahtevajo razmišljanje in strukturo.

Namig: Ne sprejmite na slepo predloga za dokončanje s tipko »Tab«. Za sekundo preberite predlagano vrstico; Od tod najpogosteje uhaja napačno ime spremenljivke ali obrnjeno stanje.

Koraki za pretvorbo namere v kodo

  1. Določite pogodbo. Kakšno je vhodno, izhodno in napaksko obnašanje funkcije? Na primer »Pridobi e-pošto, normaliziraj, če je veljavno, izdaj napako, če je neveljavno«.
  2. Navedite omejitve. Ne uporabljate zunanje odvisnosti? Poseben stilski vodnik? Ali obstaja omejitev zmogljivosti?
  3. Navedite primer. Vhodno-izhodni par (»ali@x.com → veljavno, ali@ → napaka«) premakne modelovo razumevanje namena od predvidevanja k natančnosti.
  4. Prosite za majhne koščke. Ena funkcija, ena odgovornost. Nato nadaljujte z naslednjim.
  5. Preberite in zaženite ustvarjeno kodo. Prevajanje + hiter ročni poskus je najcenejši korak zagotavljanja.

Trije mini kovčki

1. primer – produkcija na podlagi komentarjev poveča natančnost. Razvijalec je najprej zahteval funkcijo razčlenjevanja datuma s praznim telesom in dobil pravilen rezultat v 3 krogih. V drugem poskusu, ko sem definiral funkcijo s 4-vrstičnim komentarjem (sprejemljivi formati, pravilo časovnega pasu, stanje napake) in jo zahteval, je prišla koda, ki je delovala v prvem krogu. Isti model, isti dan; razlika je bila le v jasnosti namena.

2. primer – Če ne navedete različice, je drago. Ena ekipa se je spopadala s podedovanim API-jem, ki temelji na povratnem klicu, ki je nadomestil fs.promises v kodi, izdelani za Node.js. Ko je bila v poziv dodana vrstica »Uporabi vozlišče 20, ESM, async/await«, je proizvodnja prvič sledila projektu; Povprečje 12 minut, porabljenih za popravek, je bilo ponastavljeno.

Primer 3 – Resnični dobiček v standardni kodi. Mikrostoritev je zahtevala 6 novih DTO (predmet prenosa podatkov — preprost podatkovni razred, ki prenaša podatke med plastmi) in njihova pravila preverjanja. Kar je bilo včasih približno 90 minut ročnega dela, se je zmanjšalo na 35 minut, ko ga je izdelal in pregledal AI; Ker je ponavljanje kode veliko in je vzorec jasen, je umetna inteligenca tukaj delovala na svojem najučinkovitejšem področju.

Štiri kopirane predloge

Generiranje funkcij na podlagi pogodbe:

Vloga: Ste prizadeven {{language}} razvijalec. Funkcijska pogodba:- Ime: {{name}}- Vnos: {{vrste in njihov pomen}}- Izhod: {{vrsta in pomen}}- Stanje napake: {{kaj je vrnjeno/vrnjeno kdaj}}Omejitve: {{brez zunanjih odvisnosti / sloga / zmogljivosti}}Primeri:- {{input_1}} -> {{output_1}}- {{entry_2}} -> {{error_2}}Najprej dajte podpis + kratek načrt, nato kodo. Pisanje testov, samo funkcija.

Za ujemanje z obstoječim slogom (prilagoditev osnovi kode):

Spodaj je primer funkcije iz našega projekta; Tukaj se naučite poimenovanja, obravnavanja napak in sloga komentiranja. Napišite funkcijo za {{new_task}} z ISTIM slogom. Primer: {{current_code}}

Od skeleta do polnila (škrbina → izvedba):

Izpolnite spodnji skelet funkcij glede na TODO-je v komentarjih. SPREMENI podpis in vrnitev. Ne ustvarjajte pomožne funkcije, ki ne obstaja; če je treba, mi sporočite "ta pomočnik je potreben". {{skelet_kod}}

Primerjava alternativnih aplikacij:

Podajte 2 različni izvedbi za {{task}}: (a) dajanje prednosti berljivosti, (b) dajanje prednosti zmogljivosti. Pod vsako zapišite 1 stavek "kdaj je bolje".

Šibek poziv/močan poziv

Slab: "Napišite mi funkcijo preverjanja e-pošte."
Strong: "TypeScript 5, samo standardna knjižnica. Napišite isValidEmail(input: string): boolean. Odrežite presledke, ne razlikuje med velikimi in malimi črkami, a@b.co je veljaven, a@, @b.co, prazen niz je neveljaven. Če boste uporabljali regularni izraz, ne bodite preveč zapleteni; dodajte 2 vrstici komentarjev."

Zmogljiva različica; Vrne jezik, različico, podpis, robne primere in slogovno omejitev. Tako ustvarjena koda deluje in se prilega vašemu projektu.

Pristop

Kdaj uporabiti

Pozor

Inline dokončanje

Majhni vstavki v toku

Ne sprejmite predloga, ne da bi ga prebrali

Pogodbena proizvodnja v klepetu

Nova funkcija/razred

Navedite primer in robni primer

Izdelava po slogovnem vzorcu

Dodajanje obstoječi kodi

Izberite trenutno vzorčno kodo

skeletni nadev

Podpis popravljen, telo prazno

Spreminjanje podpisa

Podvajanje kode in past odvisnosti

AI pogosto priporoči novo knjižnico, da si olajša delo. Včasih je to točno, včasih vašemu projektu doda nepotrebno odvisnost ali predlaga paket, ki ne obstaja (halucinacija). Pravilo: vsako novo odvisnost potrdite. Ne dodajte ga v projekt, ne da bi preverili, ali paket dejansko obstaja, se vzdržuje in ima ustrezno licenco. Večino časa je pomočnik, ki je že v projektu, boljši od novega paketa.

Pozor: preglejte uvozne linije, ki jih predlaga AI. Neobstoječe ime paketa (ki je lahko podobno tudi lažnim paketom, imenovanim "typo-squatting") prekine prevajanje in predstavlja varnostno tveganje.

Pogoste napake

  • Imeti podpis, določen z modelom. Če ne popravite vrst vhoda/izhoda, pride z vsako produkcijo drugačen podpis in integracija postane težavna.
  • Da ne govorim o robnih primerih. Prazen vnos, nič, negativno število, zelo velika vrednost — če tega ne podate, model zapiše "srečno pot" in preskoči robove.
  • Združevanje predloga brez testiranja. Koda, ki se zdi, da deluje, še ne pomeni, da deluje.
  • Sprejemanje nepotrebne odvisnosti. Dodajanje celotne knjižnice za enovrstičnico ustvari tehnični dolg.
  • Stilska nedoslednost. Zaradi drugačnega poimenovanja in obravnavanja napak od preostalega projekta je osnova kode neenakomerna.

Če povzamem

Generiranje kode je močno, ko namero prevedete v jasno pogodbo. Uporabite dokončanje v vrstici za majhna opravila v toku in za opravila, ki vzpostavijo strukturo v pogovoru. Določite vrste vhoda/izhoda, robne primere, različico in slog; Navedite primer modela; preveri vsako novo odvisnost; ter zaženite in preberite vsak izdelan kos. Umetna inteligenca se najbolje izplača v formulirani, ponavljajoči se kodi – zaženite jo kar tam, znotraj omejitev, ki ste jih nastavili.

Aplikacijska naloga

Iz svojega projekta izberite dejansko majhno funkcijo, ki jo morate napisati. Najprej ga natisnite v AI s predlogo »pogodbeno generiranje funkcij«, ki daje vhodne/izhodne vrste, dva robna primera in slogovno omejitev. Prevedite ustvarjeno kodo in jo preizkusite z dvema različnima vnosoma. Nato znova vprašajte isto funkcijo, tokrat »napišite mi to« brez konteksta, in primerjajte dva izhoda vrstico za vrstico: kateri robni primeri so bili zgrešeni, koliko popravkov je bilo potrebnih?

kontrolni seznam

  • [ ] Vem, kje uporabiti način klepeta z dokončanjem v vrstici.
  • [ ] Določim vhodno/izhodno pogodbo in robne primere pri generiranju funkcij.
  • [ ] V navado sem dodal informacije o jeziku in različici v poziv.
  • [ ] Vsak proizveden kos sestavim in testiram, preden ga sestavim.
  • [ ] Potrjujem vsako novo odvisnost, ki jo predlaga umetna inteligenca, tako da preverim njen obstoj in potrebo.
  • [ ] Preverjam, ali se ustvarjena koda ujema s slogom projekta.