Jednotka 2 / 12

Skriptovanie a automatické dokončovanie

zisky:

  • Schopnosť mapovať režim chatu na opravu typu úlohy s inline dokončením
  • Schopnosť písať výkonné produkčné výzvy, ktoré zahŕňajú vstupné/výstupné zmluvy, okrajové prípady a obmedzenia štýlu
  • Schopnosť overiť vygenerovaný kód a akékoľvek nové navrhované závislosti pred zlúčením

Prvým bodom kontaktu vývojára s AI je často automatické dopĺňanie – funkcia, ktorá pri písaní navrhuje ďalší riadok – alebo vyslovenie „zadajte túto funkciu“ do okna rozhovoru. Obaja používajú rovnaký motor, ale vyžadujú odlišné disciplíny. V tejto jednotke transformujeme generovanie kódu z náhodného „zapisovania“ na inžiniersky krok, ktorého výstup je predvídateľný a overiteľný.

Cieľom je zmeniť AI z nástroja, ktorý zrýchľuje váš písací stroj, na učňa, ktorý pracuje v rámci vami nastavených obmedzení. Dobre vedený učeň šetrí čas; Neriadený učeň vyrába neporiadok, ktorý musíte neskôr upratať.

Dva režimy použitia: Inline Completion a Chat

Dokončenie v riadku prichádza do hry pri písaní v editore; Zadáte podpis funkcie alebo riadok s komentárom a navrhne zvyšok. Je to skvelé pre rýchlosť, ale má úzky kontext: vidí kód iba v bezprostrednej blízkosti. Preto najlepšie funguje, keď svoj zámer jasne napíšete do komentára. Napríklad //overiť e-mail používateľa, vyhodiť ValidationError, ak neplatný komentár výrazne zlepší nižšie uvedený návrh.

Režim rozhovoru je určený pre rozsiahlejšie a štruktúrované úlohy: "Pridať stránkovanie do tejto triedy", "Extrahovať rozhranie danej služby". Tu máte luxus dať rolu, kontext a formát. Všeobecné pravidlo znie: dokončenie pri malých a plynulých úlohách, konverzácia pri úlohách, ktoré si vyžadujú myslenie a štruktúru.

Tip: Neprijímajte slepo návrh na dokončenie pomocou „Tab“. Prečítajte si navrhovaný riadok na sekundu; Najčastejšie odtiaľ uniká nesprávny názov premennej alebo invertovaný stav.

Kroky na preloženie zámeru do kódu

  1. Definujte zmluvu. Aký je vstup, výstup a chybové správanie funkcie? Napríklad „Získať e-mail, normalizovať, ak je platný, vyhodiť chybu, ak je neplatný“.
  2. Uveďte obmedzenia. Nepoužívať externú závislosť? Konkrétny sprievodca štýlom? Je nejaký výkonový limit?
  3. Uveďte príklad. Vstupno-výstupný pár (“ali@x.com → platné, ali@ → chyba”) posúva chápanie zámeru modelu od predpovede k presnosti.
  4. Požiadajte o malé kúsky. Jedna funkcia, jedna zodpovednosť. Potom prejdite na ďalšiu.
  5. Prečítajte si a spustite vygenerovaný kód. Kompilácia + rýchly manuálny pokus je najlacnejším uisťovacím krokom.

Tri mini puzdrá

Prípad 1 – Výroba riadená komentármi zvyšuje presnosť. Vývojár najprv požiadal o funkciu analýzy dátumu s prázdnym telom a v 3 kolách dostal správny výsledok. Pri druhom pokuse, keď som funkciu definoval so 4-riadkovým komentárom (akceptované formáty, pravidlo časového pásma, chybová podmienka) a vyžiadal si ju, prišiel kód, ktorý fungoval v prvom kole. Rovnaký model, rovnaký deň; rozdiel bol len v jasnosti zámeru.

Prípad 2 – Nešpecifikovanie verzie je drahé. Jeden tím mal problémy so starým API založeným na spätnom volaní, ktoré nahradilo fs.promises v kóde vytvorenom pre Node.js. Keď bol do výzvy pridaný riadok „Použiť uzol 20, ESM, async/wait“, produkcia po prvýkrát nasledovala projekt; Priemer 12 minút strávených korekciou bol vynulovaný.

Prípad 3 – Skutočný zisk v štandardnom kóde. Mikroslužba vyžadovala 6 nových DTO (Data Transfer Object – jednoduchá dátová trieda, ktorá prenáša dáta medzi vrstvami) a ich overovacie pravidlá. To, čo bývalo približne 90 minút ručnej práce, sa pri výrobe a kontrole AI skrátilo na 35 minút; Keďže opakovanie kódu je vysoké a vzor je jasný, AI tu pracovala vo svojej najefektívnejšej oblasti.

Štyri kopírovateľné šablóny

Generovanie funkcií na základe zmluvy:

Úloha: Ste usilovný vývojár v jazyku {{language}}. Zmluva o funkcii:- Meno: {{name}}- Vstup: {{typy a ich význam}}- Výstup: {{typ a význam}}- Stav chyby: {{čo je vyhodené/vrátené, keď}}Obmedzenia: {{žiadne externé závislosti / štýl / výkon {-}{}}_Príklady 1}}}} {{entry_2}} -> {{error_2}}Dajte najskôr podpis + krátky plán, potom kód. Písanie testov, len funkcia.

Ak chcete zodpovedať existujúcemu štýlu (prispôsobiť základňu kódu):

Nižšie je uvedený príklad funkcie z nášho projektu; Naučte sa tu pomenovanie, spracovanie chýb a štýl komentárov. Napíšte funkciu pre {{new_task}} s ROVNAKÝM štýlom. Príklad: {{current_code}}

Od kostry k výplni (pahýľ → realizácia):

Nižšie vyplňte kostru funkcie podľa TODO v komentároch. ZMENIŤ podpis a návratový typ. Nevytvárajte pomocnú funkciu, ktorá neexistuje; v prípade potreby mi dajte vedieť "tento pomocník je potrebný". {{skelet_kod}}

Alternatívne porovnanie aplikácií:

Uveďte 2 rôzne implementácie pre {{task}}: (a) uprednostnenie čitateľnosti, (b) uprednostnenie výkonu. Pod každú napíšte 1 vetu „kedy je to lepšie“.

Slabá výzva / Silná výzva

Slabé: "Napíšte mi funkciu overenia e-mailu."
Strong: "TypeScript 5, iba štandardná knižnica. Napíšte isValidEmail(input: string): boolean. Orezajte medzery, nerozlišujte malé a veľké písmená, a@b.co je platné, a@, @b.co, prázdny reťazec je neplatný. Ak sa chystáte použiť regulárny výraz, nebuďte príliš zložitý; pridajte 2 riadky komentárov."

Výkonná verzia; Vráti jazyk, verziu, podpis, okrajové prípady a obmedzenie štýlu. Takto vygenerovaný kód funguje a zapadá do vášho projektu.

Prístup

Kedy použiť

Pozornosť

Inline dokončenie

Malé vložky v prietoku

Neprijímajte návrh bez toho, aby ste si ho prečítali

Zmluvná výroba v chate

Nová funkcia/trieda

Uveďte príklad a okrajový prípad

Výroba podľa vzorky štýlu

Pridáva sa do existujúceho kódu

Vyberte aktuálny vzorový kód

výplň kostry

Podpis opravený, telo prázdne

Zmena podpisu

Duplikácia kódu a pasca závislosti

AI často odporúča novú knižnicu, aby si uľahčila prácu. Niekedy je to presné, niekedy to pridáva vášmu projektu zbytočnú závislosť alebo navrhuje balík, ktorý neexistuje (halucinácia). Pravidlo: potvrdíte každú novú závislosť. Nepridávajte ho do projektu bez overenia, či balík skutočne existuje, je udržiavaný a má príslušnú licenciu. Väčšinu času je pomocník už v projekte lepší ako nový balík.

Upozornenie: Skontrolujte riadky importu navrhnuté AI. Neexistujúci názov balíka (ktorý môže tiež pripomínať falošné balíky nazývané „preklepávanie“) narúša kompiláciu a predstavuje bezpečnostné riziko.

Časté chyby

  • S podpisom určeným podľa modelu. Ak neopravíte typy vstupu/výstupu, s každou produkciou príde iný podpis a integrácia bude ťažká.
  • O okrajových prípadoch ani nehovoriac. Prázdny vstup, null, záporné číslo, veľmi veľká hodnota — ak ich nešpecifikujete, model zapíše „šťastnú cestu“ a preskočí okraje.
  • Skombinujte návrh bez toho, aby ste ho otestovali. Kód, ktorý vyzerá, že funguje, ešte neznamená, že funguje.
  • Akceptovanie zbytočnej závislosti. Pridanie celej knižnice pre jeden riadok vytvára technický dlh.
  • Štýlová nejednotnosť. Odlišné pomenovanie a spracovanie chýb od zvyšku projektu spôsobuje, že základňa kódu je nejednotná.

V súhrne

Generovanie kódu je výkonné, keď preložíte zámer do jasnej zmluvy. Vložené dokončovanie používajte pre malé úlohy v prúde a pre úlohy, ktoré vytvárajú štruktúru v konverzácii. Môžete určiť typy vstupu/výstupu, okrajové prípady, verziu a štýl; Uveďte príklad modelu; overiť každú novú závislosť; a spustiť a prečítať každý vyrobený kus. Umelá inteligencia sa najlepšie oplatí vo vzorcovom, opakujúcom sa kóde – spustite ju priamo tam, v rámci limitov, ktoré nastavíte.

Aplikačná úloha

Vyberte si skutočnú malú funkciu z vášho projektu, ktorú potrebujete napísať. Najprv ho vytlačte do AI so šablónou „generovania funkcií na základe zmluvy“, ktorá poskytne typy vstupu/výstupu, dva okrajové prípady a obmedzenie štýlu. Zostavte vygenerovaný kód a vyskúšajte ho s dvoma rôznymi vstupmi. Potom sa znova opýtajte tej istej funkcie, tentoraz „napíšte mi to“ bez akéhokoľvek kontextu a porovnajte dva výstupy riadok po riadku: ktoré prípady okrajov boli vynechané, koľko opráv bolo potrebných?

kontrolný zoznam

  • [ ] Viem, kde použiť režim rozhovoru s dopĺňaním textu.
  • [ ] Určujem vstupno-výstupnú zmluvu a prípady okrajov pri generovaní funkcií.
  • [ ] Zvykol som si pridávať do výzvy informácie o jazyku a verzii.
  • [ ] Každý vyrobený kus pred zložením zostavujem a testujem.
  • [ ] Každú novú závislosť, ktorú AI navrhuje, potvrdzujem overením jej existencie a nevyhnutnosti.
  • [ ] Skontrolujem, či vygenerovaný kód zodpovedá štýlu projektu.