Vienība 2 / 12

Skriptēšana un automātiskā pabeigšana

Ieguvumi:

  • Iespēja kartēt tērzēšanas režīmu atbilstoši uzdevuma veidam ar iekļautu pabeigšanu
  • Spēja rakstīt spēcīgas ražošanas uzvednes, kas ietver ievades/izvades līgumus, malas gadījumus un stila ierobežojumus
  • Iespēja pirms apvienošanas pārbaudīt ģenerēto kodu un visas jaunās ierosinātās atkarības

Izstrādātāja pirmais kontaktpunkts ar AI bieži vien ir automātiskā pabeigšana — funkcija, kas rakstīšanas laikā iesaka nākamo rindiņu — vai tērzēšanas logā izrunājot “ierakstiet šo funkciju”. Viņi abi izmanto vienu un to pašu dzinēju, bet prasa dažādas disciplīnas. Šajā vienībā mēs pārveidojam koda ģenerēšanu no nejaušas "pierakstīšanas" par inženierijas soli, kura izvade ir paredzama un pārbaudāma.

Mērķis ir pārvērst AI no rīka, kas paātrina jūsu mašīnrakstīšanas iekārtu, par mācekli, kas darbojas jūsu iestatīto ierobežojumu ietvaros. Labi vadīts māceklis ietaupa laiku; Nevadīts māceklis rada nekārtību, kas jums vēlāk ir jāiztīra.

Divi lietošanas režīmi: iekļauta pabeigšana un tērzēšana

Iekļautā pabeigšana tiek izmantota, kad rakstāt redaktorā; Jūs ierakstāt funkcijas parakstu vai komentāra rindiņu, un tā iesaka pārējo. Tas ir lieliski piemērots ātrumam, taču tam ir šaurs konteksts: tas redz kodu tikai tuvākajā apkārtnē. Tāpēc vislabāk ir, ja komentārā skaidri ierakstāt savu nodomu. Piemēram, //validate lietotāja e-pasta adrese, ievadiet ValidationError, ja nederīgs komentārs ievērojami uzlabo tālāk sniegto ieteikumu.

Tērzēšanas režīms ir paredzēts lielākiem un strukturētiem uzdevumiem: "Pievienot lappušu skaitu šai klasei", "Izvilkt šī pakalpojuma saskarni". Šeit jums ir greznība piešķirt lomu, kontekstu un formātu. Vispārējais noteikums ir: maziem un plūstošiem uzdevumiem izpilde, saruna par uzdevumiem, kas prasa domāšanu un struktūru.

Padoms: akli nepieņemiet pabeigšanas ieteikumu, izmantojot taustiņu "Tab". Uz sekundi izlasiet ieteikto rindiņu; No šejienes visbiežāk noplūst nepareizs mainīgā nosaukums vai apgriezts nosacījums.

Darbības, lai nodomu pārvērstu kodā

  1. Definējiet līgumu. Kāda ir funkcijas ievade, izvade un kļūdu darbība? Piemēram, "Saņemt e-pastu, normalizēt, ja derīgs, izmest kļūdu, ja nederīgs".
  2. Nosakiet ierobežojumus. Vai neizmantojat ārēju atkarību? Konkrēts stila ceļvedis? Vai ir veiktspējas ierobežojums?
  3. Sniedziet piemēru. Ievades-izejas pāris (“ali@x.com → derīgs, ali@ → kļūda”) pārvieto modeļa izpratni par nodomu no paredzēšanas uz precizitāti.
  4. Jautājiet par maziem gabaliņiem. Viena funkcija, viena atbildība. Pēc tam pārejiet uz nākamo.
  5. Izlasiet un palaidiet ģenerēto kodu. Kompilēšana + ātrs manuāls mēģinājums ir lētākais garantijas solis.

Trīs mini futrāļi

1. gadījums — uz komentāriem balstīta produkcija palielina precizitāti. Izstrādātājs vispirms pieprasīja datuma parsēšanas funkciju ar tukšu pamattekstu un ieguva pareizo rezultātu 3 kārtās. Otrajā mēģinājumā, kad definēju funkciju ar 4 rindiņu komentāru (pieņemtie formāti, laika joslas noteikums, kļūdas nosacījums) un pieprasīju to, atnāca kods, kas darbojās pirmajā kārtā. Tas pats modelis, tajā pašā dienā; atšķirība bija tikai nodomu skaidrībā.

2. gadījums — versijas nenorādīšana ir dārga. Viena komanda cīnījās ar mantoto, uz atzvanīšanu balstīto API, kas aizstāja fs.promises kodā, kas tika izveidots Node.js. Kad uzvednei tika pievienota rinda “Izmantot 20. mezglu, ESM, async/wait”, ražošana sekoja projektam pirmo reizi; Vidēji korekcijai pavadītās 12 minūtes tika atiestatītas.

3. gadījums — reāls pieaugums standarta kodā. Mikropakalpojumam bija nepieciešami 6 jauni DTO (Data Transfer Object — vienkārša datu klase, kas pārnēsā datus starp slāņiem) un to validācijas noteikumi. Tas, kas agrāk bija aptuveni 90 minūšu manuāla darba, tika samazināts līdz 35 minūtēm, kad to izstrādāja un pārskatīja AI; Tā kā koda atkārtošanās ir liela un modelis ir skaidrs, AI šeit strādāja savā visefektīvākajā jomā.

Četras kopējamas veidnes

Uz līgumu balstīta funkciju ģenerēšana:

Loma: Jūs esat rūpīgs valodas {{valoda}} izstrādātājs.Funkciju līgums:- Vārds: {{vārds}}- Ievade: {{veidi un to nozīme}}- Izvade: {{veids un nozīme}}- Kļūdas statuss: {{kas tiek izmests/atgriezts, kad}}Ierobežojumi: {{nav ārēju atkarību / stila_/veiktspējas}} {{output_1}}- {{entry_2}} -> {{error_2}}Vispirms dodiet parakstu + īso plānu, pēc tam kodu. Pārbaudījumu rakstīšana, tikai funkcija.

Lai atbilstu esošajam stilam (pielāgot koda bāzei):

Zemāk ir mūsu projekta funkcijas piemērs; Šeit uzziniet par nosaukumu piešķiršanu, kļūdu apstrādi un komentēšanas stilu. Uzrakstiet funkciju {{new_task}} ar TĀPĀDU stilu. Piemērs: {{pašreizējais_kods}}

No skeleta līdz aizpildīšanai (stub → ieviešana):

Aizpildiet zemāk esošo funkciju skeletu atbilstoši komentāros norādītajiem UZDEVUMIEM. MAINĪT parakstu un atgriešanas veidu. Neveidojiet palīgfunkciju, kas neeksistē; ja nepieciešams, dodiet ziņu "ir vajadzīgs šis palīgs". {{skelet_kod}}

Alternatīvu lietotņu salīdzinājums:

Sniedziet 2 dažādas {{uzdevuma}} ieviešanas iespējas: (a) prioritāšu noteikšana lasāmībai, (b) prioritātes noteikšana veiktspējai. Zem katra ierakstiet 1 teikumu "kad ir vēlams".

Vāja uzvedne / spēcīga uzvedne

Vāji: "Uzrakstiet man e-pasta verifikācijas funkciju."
Strong: "TypeScript 5, tikai standarta bibliotēka. Rakstiet isValidEmail(input: string): Būla. Apgrieziet atstarpes, padariet to nejutīgu, a@b.co ir derīgs, a@, @b.co, tukša virkne nav derīga. Ja plānojat izmantot regulāro izteiksmi, neesiet pārāk sarežģīti; pievienojiet 2 komentāru rindiņas."

Jaudīga versija; Atgriež valodu, versiju, parakstu, malas gadījumus un stila ierobežojumu. Tādējādi ģenerētais kods darbojas un iekļaujas jūsu projektā.

Pieeja

Kad lietot

Uzmanību

Iekļauts pabeigšana

Mazi ieliktņi plūsmā

Nepieņemiet ieteikumu, to neizlasot

Uz līgumu balstīta ražošana tērzēšanā

Jauna funkcija/klase

Sniedziet piemēru un malas gadījumu

Ražošana pēc stila parauga

Pievienošana esošajam kodam

Atlasiet pašreizējo parauga kodu

skeleta pildījums

Paraksts fiksēts, pamatteksts tukšs

Paraksta maiņa

Kodu dublēšanās un atkarības slazds

AI bieži iesaka jaunu bibliotēku, lai atvieglotu darbu. Dažreiz tas ir precīzs, dažreiz tas rada nevajadzīgu atkarību jūsu projektam vai ierosina paketi, kas neeksistē (halucinācijas). Noteikums: jūs apstiprināt katru jaunu atkarību. Nepievienojiet to projektam, nepārbaudot, vai pakotne patiešām pastāv, tiek uzturēta un tai ir atbilstoša licence. Lielāko daļu laika palīgs, kas jau ir projektā, ir labāks nekā jauna pakete.

Uzmanību! Pārskatiet AI ieteiktās importēšanas rindas. Neesošs pakotnes nosaukums (kas var līdzināties arī viltotām pakotnēm, ko sauc par "typo-squatting") gan izjauc kompilāciju, gan rada drošības risku.

Biežas kļūdas

  • Ar modeļa noteiktu parakstu. Ja nelabojat ievades/izvades veidus, katrai produkcijai tiek pievienots cits paraksts, un integrācija kļūst sarežģīta.
  • Nemaz nerunājot par malām. Tukša ievade, nulle, negatīvs skaitlis, ļoti liela vērtība — ja tās nenorādīsit, modelis raksta "laimīgo ceļu", izlaižot malas.
  • Ieteikuma apvienošana, nepārbaudot to. Kods, kas, šķiet, darbojas, nenozīmē, ka tas darbojas.
  • Nevajadzīgas atkarības pieņemšana. Pievienojot veselu bibliotēku vienrindniekam, rodas tehniskais parāds.
  • Stila nekonsekvence. Atšķirīga nosaukumu piešķiršana un kļūdu apstrāde no pārējā projekta padara koda bāzi nevienmērīgu.

Rezumējot

Koda ģenerēšana ir spēcīga, ja nodomu pārvēršat skaidrā līgumā. Izmantojiet iekļauto pabeigšanu maziem, plūsmā ietvertiem uzdevumiem un uzdevumiem, kas veido sarunas struktūru. Jūs norādāt ievades/izvades veidus, malas gadījumus, versiju un stilu; Sniedziet modeļa piemēru; pārbaudīt katru jaunu atkarību; un palaist un lasīt katru saražoto gabalu. AI vislabāk atmaksājas formulas, atkārtotā kodā — palaidiet to tieši tur, jūsu iestatītajās robežās.

Lietojumprogrammas uzdevums

Izvēlieties nelielu funkciju no sava projekta, kas jums jāraksta. Vispirms izdrukājiet to AI, izmantojot veidni “uz līgumu balstīta funkciju ģenerēšana”, norādot ievades/izvades veidus, divus malas gadījumus un stila ierobežojumu. Apkopojiet ģenerēto kodu un izmēģiniet to ar divām dažādām ievadēm. Pēc tam vēlreiz uzdodiet to pašu funkciju, šoreiz “rakstiet man šo” bez konteksta un salīdziniet abus izvadus rindu pa rindiņai: kuri malas gadījumi tika izlaisti, cik labojumu bija nepieciešams?

kontrolsaraksts

  • [ ] Es zinu, kur izmantot tērzēšanas režīmu ar iekļauto pabeigšanu.
  • [ ] Nosaku ievades/izejas līgumu un malu gadījumus funkciju ģenerēšanā.
  • [ ] Esmu izveidojis ieradumu uzvednei pievienot informāciju par valodu un versiju.
  • [ ] Es apkopoju un pārbaudu katru saražoto gabalu pirms salikšanas.
  • [ ] Es apstiprinu katru jaunu AI piedāvāto atkarību, pārbaudot tās esamību un nepieciešamību.
  • [ ] Pārbaudu, vai ģenerētais kods atbilst projekta stilam.