Jednotka 2 / 12

Skriptování a automatické dokončování

zisky:

  • Schopnost mapovat režim chatu pro správný typ úkolu s inline dokončením
  • Schopnost psát výkonné produkční výzvy, které zahrnují vstupní/výstupní smlouvy, okrajové případy a omezení stylu
  • Schopnost ověřit vygenerovaný kód a jakékoli nové navrhované závislosti před sloučením

Prvním bodem kontaktu vývojáře s umělou inteligencí je často automatické doplňování – funkce, která během psaní navrhuje další řádek – nebo říká „zadej tu funkci“ do okna chatu. Oba používají stejný motor, ale vyžadují různé disciplíny. V této jednotce transformujeme generování kódu z náhodného „zapsání“ do inženýrského kroku, jehož výstup je předvídatelný a ověřitelný.

Cílem je proměnit AI z nástroje, který zrychlí váš psací stroj, na učedníka, který pracuje v rámci omezení, která nastavíte. Dobře vedený učeň šetří čas; Neřízený učeň produkuje nepořádek, který musíte později uklidit.

Dva režimy použití: Inline Completion a Chat

Vložené dokončování přichází do hry, když píšete v editoru; Zadáte podpis funkce nebo řádek komentáře a ostatní navrhne. Je to skvělé pro rychlost, ale má úzký kontext: vidí kód pouze v bezprostřední blízkosti. Nejlépe proto funguje, když svůj záměr napíšete jasně do komentáře. Například //ověřte e-mail uživatele, vyvolá chybu ValidationError, pokud neplatný komentář výrazně vylepší níže uvedený návrh.

Režim chatu je určen pro větší a strukturované úkoly: "Přidat stránkování do této třídy", "Extrahovat rozhraní této služby". Zde máte ten luxus dát roli, kontext a formát. Obecným pravidlem je: dokončení u malých a plynulých úkolů, konverzace u úkolů, které vyžadují myšlení a strukturu.

Tip: Nepřijímejte slepě návrh dokončení pomocí „Tab“. Přečtěte si navrhovaný řádek na sekundu; Nejčastěji odtud uniká nesprávný název proměnné nebo obrácený stav.

Kroky k převodu záměru do kódu

  1. Definujte smlouvu. Jaký je vstup, výstup a chybové chování funkce? Jako "Získat e-mail, normalizovat, pokud je platný, vyvolat chybu, pokud je neplatný".
  2. Uveďte omezení. Nepoužíváte externí závislost? Konkrétní stylový průvodce? Je nějaký výkonový limit?
  3. Uveďte příklad. Dvojice vstup-výstup (“ali@x.com → platné, ali@ → chyba”) posouvá chápání záměru modelu od predikce k přesnosti.
  4. Požádejte o malé kousky. Jedna funkce, jedna odpovědnost. Poté přejděte na další.
  5. Přečtěte si a spusťte vygenerovaný kód. Kompilace + rychlý ruční pokus je nejlevnějším zaručeným krokem.

Tři mini pouzdra

Případ 1 – Výroba řízená komentáři zvyšuje přesnost. Vývojář nejprve požádal o funkci analýzy data s prázdným tělem a získal správný výsledek ve 3 kolech. Při druhém pokusu, kdy jsem funkci definoval se 4řádkovým komentářem (akceptované formáty, pravidlo časové zóny, chybová podmínka) a vyžádal si ji, přišel kód, který fungoval v prvním kole. Stejný model, stejný den; rozdíl byl pouze v jasnosti záměru.

Případ 2 — Neuvedení verze je drahé. Jeden tým se potýkal se starším API založeným na zpětném volání, které nahradilo fs.promises v kódu vytvořeném pro Node.js. Když byl do výzvy přidán řádek „Použít uzel 20, ESM, async/await“, produkce se poprvé řídila projektem; Průměr 12 minut strávených opravou byl vynulován.

Případ 3 — Skutečný zisk v běžném kódu. Mikroslužba vyžadovala 6 nových DTO (Data Transfer Object – jednoduchá datová třída, která přenáší data mezi vrstvami) a jejich ověřovací pravidla. To, co bývalo přibližně 90 minut manuální práce, bylo při výrobě a kontrole AI zkráceno na 35 minut; Protože opakování kódu je vysoké a vzor je jasný, umělá inteligence zde pracovala ve své nejúčinnější oblasti.

Čtyři kopírovatelné šablony

Generování funkcí na základě smlouvy:

Role: Jste pilný {{language}} vývojář. Smlouva o funkci:- Jméno: {{jméno}}- Vstup: {{typy a jejich význam}}- Výstup: {{typ a význam}}- Stav chyby: {{co je házeno/vráceno, když}}Omezení: {{žádné externí závislosti / styl / výkon {-{}}_1}}Příklady:}} {{entry_2}} -> {{error_2}}Dejte nejprve podpis + krátký plán a poté kód. Psaní testů, prostě funkce.

Chcete-li odpovídat existujícímu stylu (přizpůsobit základně kódu):

Níže je uveden příklad funkce z našeho projektu; Zde se dozvíte pojmenování, zpracování chyb a styl komentářů. Napište funkci pro {{new_task}} se STEJNÝM stylem. Příklad: {{current_code}}

Od kostry k výplni (pahýl → realizace):

Níže vyplňte kostru funkce podle TODO v komentářích. ZMĚŇTE podpis a návratový typ. Nevytvářejte pomocnou funkci, která neexistuje; případně mi dejte vědět "tento pomocník je potřeba". {{skelet_kod}}

Alternativní srovnání aplikací:

Uveďte 2 různé implementace pro {{task}}: (a) upřednostnění čitelnosti, (b) upřednostnění výkonu. Pod každou zapište 1 větu „kdy je lepší“.

Slabá výzva / Silná výzva

Slabé: "Napište mi funkci ověření e-mailu."
Strong: "TypeScript 5, pouze standardní knihovna. Napište isValidEmail(input: string): boolean. Ořízněte mezery, nerozlišujte malá a velká písmena, a@b.co je platné, a@, @b.co, prázdný řetězec je neplatný. Pokud budete používat regulární výraz, nebuďte příliš složití; přidejte 2 řádky komentářů."

Výkonná verze; Vrátí jazyk, verzi, podpis, okrajové případy a omezení stylu. Vygenerovaný kód tedy funguje a zapadá do vašeho projektu.

Přístup

Kdy použít

Pozor

Inline dokončení

Malé vložky v průtoku

Bez přečtení návrh nepřijměte

Smluvní výroba v chatu

Nová funkce/třída

Uveďte příklad a okrajový případ

Výroba podle vzoru stylu

Přidávání ke stávajícímu kódu

Vyberte aktuální ukázkový kód

výplň kostry

Podpis opraven, tělo prázdné

Změna podpisu

Duplikace kódu a past závislostí

AI často doporučuje novou knihovnu, aby si usnadnila práci. Někdy je to přesné, někdy to do vašeho projektu přidává zbytečnou závislost nebo navrhuje balíček, který neexistuje (halucinace). Pravidlo: potvrzujete každou novou závislost. Nepřidávejte jej do projektu, aniž byste si ověřili, že balíček skutečně existuje, je udržován a má příslušnou licenci. Pomocník již v projektu je většinou lepší než nový balíček.

Upozornění: Zkontrolujte importní řádky navržené AI. Neexistující název balíčku (který může také připomínat falešné balíčky zvané „překlepávání“) narušuje kompilaci a představuje bezpečnostní riziko.

Časté chyby

  • Mít podpis určený modelem. Pokud neopravíte vstupní/výstupní typy, s každou výrobou přijde jiný podpis a integrace bude obtížná.
  • O okrajových pouzdrech ani nemluvě. Prázdný vstup, null, záporné číslo, velmi velká hodnota — pokud je nezadáte, model zapíše "šťastnou cestu" a přeskakuje okraje.
  • Kombinace návrhu bez testování. Kód, který vypadá, že funguje, neznamená, že funguje.
  • Přijetí zbytečné závislosti. Přidání celé knihovny pro jeden řádek vytváří technický dluh.
  • Nejednotnost stylu. Odlišné pojmenování a zpracování chyb od zbytku projektu činí základ kódu nejednotný.

V souhrnu

Generování kódu je výkonné, když převedete záměr do jasné smlouvy. Používejte vložené dokončování pro malé úkoly v proudu a pro úkoly, které vytvářejí strukturu v konverzaci. Určujete vstupní/výstupní typy, případy hran, verzi a styl; Uveďte příklad modelu; ověřit každou novou závislost; a spustit a přečíst každý vyrobený kus. Umělá inteligence se nejlépe vyplatí ve vzorovém, opakujícím se kódu – spusťte jej přímo tam, v rámci limitů, které si nastavíte.

Aplikační úkol

Vyberte si skutečnou malou funkci z vašeho projektu, kterou potřebujete napsat. Nejprve jej vytiskněte do AI se šablonou „generování funkcí na základě smlouvy“ s uvedením typů vstupu/výstupu, dvou okrajových případů a omezení stylu. Zkompilujte vygenerovaný kód a vyzkoušejte jej se dvěma různými vstupy. Pak se zeptejte stejné funkce znovu, tentokrát „napiš mi to“ bez jakéhokoli kontextu, a porovnejte dva výstupy řádek po řádku: které případy hran byly vynechány, kolik oprav bylo potřeba?

kontrolní seznam

  • [ ] Vím, kde použít režim chatu s doplňováním v řádku.
  • [ ] Určuji vstupně/výstupní kontrakt a případy hran při generování funkcí.
  • [ ] Zvyknul jsem si do výzvy přidávat informace o jazyce a verzi.
  • [ ] Každý vyrobený kus před sestavením sestavuji a testuji.
  • [ ] Každou novou závislost, kterou AI navrhuje, potvrzuji ověřením její existence a nutnosti.
  • [ ] Kontroluji, že vygenerovaný kód odpovídá stylu projektu.