Pelnas:
- Galimybė susieti pokalbio režimą pagal teisingą užduoties tipą su tiesioginiu užbaigimu
- Galimybė rašyti galingus gamybos raginimus, apimančius įvesties / išvesties sutartis, kraštutinius atvejus ir stiliaus apribojimus
- Galimybė patvirtinti sugeneruotą kodą ir visas naujas siūlomas priklausomybes prieš sujungimą
Pirmasis kūrėjo susisiekimo su AI taškas dažnai yra automatinis užbaigimas – funkcija, kuri siūlo kitą eilutę, kai vedate tekstą, arba sakoma „įveskite tą funkciją“ pokalbio lange. Jie abu naudoja tą patį variklį, bet reikalauja skirtingų disciplinų. Šiame bloke mes transformuojame kodo generavimą iš atsitiktinio „užrašymo“ į inžinerinį žingsnį, kurio išvestis yra nuspėjama ir patikrinama.
Tikslas yra paversti AI iš įrankio, kuris pagreitina jūsų spausdinimo mašiną, į mokinį, kuris veiktų pagal jūsų nustatytus apribojimus. Gerai vadovaujamas mokinys taupo laiką; Nevaldomas mokinys sukuria netvarką, kurią vėliau turėsite išvalyti.
Du naudojimo režimai: tiesioginis užbaigimas ir pokalbis
Eilutinis užbaigimas pradedamas naudoti, kai vedate tekstą redaktoriuje; Įvedate funkcijos parašą arba komentaro eilutę ir ji siūlo likusią dalį. Jis puikiai tinka greičiui, tačiau turi siaurą kontekstą: mato tik kodą artimiausioje srityje. Štai kodėl geriausiai pasiteisina, kai komentare aiškiai parašote savo ketinimą. Pavyzdžiui, //validate vartotojo el. pašto adresas, pateikite ValidationError, jei netinkamas komentaras žymiai pagerina toliau pateiktą pasiūlymą.
Pokalbių režimas skirtas didesnėms ir struktūrizuotoms užduotims: „Pridėti puslapius prie šios klasės“, „Išskleisti tos paslaugos sąsają“. Čia jūs turite prabangą suteikti vaidmenį, kontekstą ir formatą. Bendra taisyklė yra tokia: mažų ir sklandžių užduočių atlikimas, mąstymo ir struktūros reikalaujančių užduočių pokalbis.
Patarimas: aklai nepriimkite užbaigimo pasiūlymo naudodami „Tab“. Sekundę perskaitykite siūlomą eilutę; Iš čia dažniausiai nuteka neteisingas kintamojo pavadinimas arba atvirkštinė sąlyga.
Veiksmai, kaip ketinimą paversti kodu
- Apibrėžkite sutartį. Kokia yra funkcijos įvestis, išvestis ir klaida? Pavyzdžiui, „Gauti el. laišką, normalizuoti, jei galioja, įvesti klaidą, jei negalioja“.
- Nurodykite apribojimus. Nenaudojate išorinės priklausomybės? Konkretus stiliaus vadovas? Ar yra našumo riba?
- Pateikite pavyzdį. Įvesties ir išvesties pora („ali@x.com → galiojantis, ali@ → klaida“) perkelia modelio ketinimų supratimą iš numatymo į tikslumą.
- Paprašykite mažų gabalėlių. Viena funkcija, viena atsakomybė. Tada pereikite prie kito.
- Perskaitykite ir paleiskite sugeneruotą kodą. Kompiliavimas + greitas bandymas rankiniu būdu yra pigiausias užtikrinimo žingsnis.
Trys mini dėklai
1 atvejis – komentarais pagrįsta gamyba padidina tikslumą. Kūrėjas pirmiausia paprašė datos analizės funkcijos su tuščiu turiniu ir gavo teisingą rezultatą per 3 raundus. Antru bandymu, kai apibrėžiau funkciją su 4 eilučių komentaru (priimtini formatai, laiko juostos taisyklė, klaidos sąlyga) ir paprašiau, atėjo kodas, kuris veikė pirmame rate. Tas pats modelis, ta pati diena; skirtumas buvo tik ketinimų aiškumas.
2 atvejis – nenurodyti versijos yra brangu. Viena komanda kovojo su senąja atgalinio skambinimo API, pakeičiančia fs.promises kode, sukurtame Node.js. Kai prie raginimo buvo pridėta eilutė „Naudoti 20 mazgą, ESM, async/laukti“, gamyba pirmą kartą buvo vykdoma pagal projektą; Vidutinis 12 minučių, praleistų korekcijai, buvo nustatytas iš naujo.
3 atvejis – tikrasis generatoriaus kodo padidėjimas. Mikropaslaugoms reikėjo 6 naujų DTO (duomenų perdavimo objekto – paprastos duomenų klasės, kuri perduoda duomenis tarp sluoksnių) ir jų patvirtinimo taisyklių. Tai, kas anksčiau buvo maždaug 90 minučių rankinio darbo, buvo sumažinta iki 35 minučių, kai ją sukūrė ir peržiūrėjo AI; Kadangi kodo kartojimas yra didelis, o modelis yra aiškus, AI čia dirbo efektyviausioje srityje.
Keturi kopijuojami šablonai
Sutartimi pagrįstų funkcijų generavimas:
Vaidmuo: esate kruopštus {{kalbos}} kūrėjas. Funkcijos sutartis:- Vardas: {{vardas}}- Įvestis: {{tipai ir jų reikšmė}}- Išvestis: {{tipas ir reikšmė}}- Klaidos būsena: {{kas išmetama / grąžinama, kai}}Apribojimai: {{jokių išorinių priklausomybių / stilius / našumas}} {{output_1}}- {{entry_2}} -> {{error_2}}Pirmiausia duokite parašą + trumpą planą, tada kodą. Rašymo testai, tik funkcija.
Kad atitiktų esamą stilių (pritaikykite prie kodo bazės):
Žemiau yra mūsų projekto funkcijos pavyzdys; Sužinokite apie įvardijimą, klaidų apdorojimą ir komentavimo stilių čia. Parašykite funkciją, skirtą {{new_task}} TOPAČIU stiliumi. Pavyzdys: {{current_code}}
Nuo skeleto iki užpildymo (stuburo → įgyvendinimas):
Užpildykite žemiau pateiktą funkcijos skeletą pagal komentaruose pateiktus UŽDUOTUS. PAKEISTI parašą ir grąžinimo tipą. Nedarykite pagalbinės funkcijos, kurios nėra; jei reikia, pranešk „reikia šio pagalbininko“. {{skelet_kod}}
Alternatyvių programų palyginimas:
Pateikite 2 skirtingus {{užduoties}} diegimus: (a) prioritetų skaitomumą, (b) našumo prioritetą. Po kiekvienu užrašykite po 1 sakinį „kada geriau“.
Silpnas raginimas / Stiprus raginimas
Silpna: „Parašykite man el. pašto patvirtinimo funkciją“.
Strong: "TypeScript 5, tik standartinė biblioteka. Rašykite isValidEmail(input: string): loginis. Apkarpykite tarpus, kad jame nebūtų didžiųjų ir mažųjų raidžių, a@b.co yra tinkamas, a@, @b.co, tuščia eilutė netinkama. Jei ketinate naudoti reguliarųjį reiškinį, nebūkite pernelyg sudėtingi; pridėkite 2 komentarų eilutes."
Galinga versija; Grąžina kalbą, versiją, parašą, krašto raides ir stiliaus apribojimą. Taigi, sugeneruotas kodas veikia ir tinka jūsų projektui.
Prieiga
Kada naudoti
Dėmesio
Eilutinis užbaigimas
Maži įdėklai sraute
Nepriimkite pasiūlymo jo neperskaitę
Sutartinė gamyba pokalbyje
Nauja funkcija/klasė
Pateikite pavyzdį ir kraštinį atvejį
Gamyba pagal stiliaus pavyzdį
Papildymas prie esamo kodo
Pasirinkite dabartinį pavyzdinį kodą
skeleto iškamša
Parašas ištaisytas, korpusas tuščias
Parašo keitimas
Kodo dubliavimas ir priklausomybės spąstai
AI dažnai rekomenduoja naują biblioteką, kad palengvintų darbą. Kartais tai yra tiksli, kartais tai prideda nereikalingą priklausomybę jūsų projektui arba siūlo paketą, kurio nėra (haliucinacija). Taisyklė: patvirtinate kiekvieną naują priklausomybę. Nepridėkite jo prie projekto nepatikrinę, kad paketas iš tikrųjų egzistuoja, yra prižiūrimas ir turi atitinkamą licenciją. Dažniausiai projekte jau dalyvaujantis pagalbininkas yra geriau nei naujas paketas.
Atsargiai: peržiūrėkite AI siūlomas importavimo eilutes. Neegzistuojantis paketo pavadinimas (kuris taip pat gali būti panašus į netikrus paketus, vadinamus „typo-squatting“) nutraukia kompiliavimą ir kelia pavojų saugumui.
Dažnos klaidos
- Turint modelio nustatytą parašą. Jei nepataisysite įvesties / išvesties tipų, su kiekviena gamyba ateina skirtingas parašas ir integravimas tampa sudėtingas.
- Jau nekalbant apie kraštutinius atvejus. Tuščia įvestis, nulis, neigiamas skaičius, labai didelė reikšmė – jei jų nenurodysite, modelis rašo „laimingą kelią“, praleisdamas kraštus.
- Pasiūlymo derinimas jo neišbandžius. Kodas, kuris atrodo veikiantis, nereiškia, kad jis veikia.
- Priimti nereikalingą priklausomybę. Pridėjus visą biblioteką prie vieno eilutės susidaro techninė skola.
- Stiliaus nenuoseklumas. Skirtingas pavadinimų suteikimas ir klaidų tvarkymas, palyginti su likusiu projektu, daro kodo bazę nevienodą.
Apibendrinant
Kodo generavimas yra galingas, kai ketinimą paverčiate aiškia sutartimi. Naudokite tiesioginį užbaigimą mažoms, sraute pateikiamoms užduotims ir užduotims, kurios nustato pokalbio struktūrą. Nurodote įvesties/išvesties tipus, krašto atvejus, versiją ir stilių; Pateikite modelio pavyzdį; patikrinti kiekvieną naują priklausomybę; ir paleiskite bei perskaitykite kiekvieną pagamintą kūrinį. AI geriausiai pasiteisina naudojant formulinį, pasikartojantį kodą – paleiskite jį ten pat, laikantis nustatytų ribų.
Taikymo užduotis
Iš savo projekto pasirinkite tikrą nedidelę funkciją, kurią turite parašyti. Pirmiausia išspausdinkite jį AI naudodami „sutartimi pagrįstų funkcijų generavimo“ šabloną, nurodydami įvesties / išvesties tipus, du kraštutinius atvejus ir stiliaus apribojimą. Sukompiliuokite sugeneruotą kodą ir išbandykite jį naudodami du skirtingus įvestis. Tada dar kartą paklauskite tos pačios funkcijos, šį kartą „parašyk man tai“ be jokio konteksto ir palyginkite dvi išvestis eilutė po eilutės: kurios kraštinės atvejai buvo praleisti, kiek pataisymų reikėjo?
kontrolinis sąrašas
- [ ] Žinau, kur naudoti pokalbių režimą su eilutiniu užbaigimu.
- [ ] Nustatau įvesties/išvesties kontraktą ir kraštinius atvejus generuojant funkciją.
- [ ] Įpratau į raginimą įtraukti kalbos ir versijos informaciją.
- [ ] Prieš surinkdamas kiekvieną pagamintą gabalą sukompiliuoju ir išbandau.
- [ ] Patvirtinu kiekvieną naują AI siūlomą priklausomybę, patikrindamas jos egzistavimą ir būtinumą.
- [ ] Patikrinau, ar sugeneruotas kodas atitinka projekto stilių.