Jednotka 1 / 12

Umelá inteligencia pre softvérové tímy: Pracovný model a limity

zisky:

  • Schopnosť vysvetliť, ako kódovací asistent funguje ako jazykový model a pojmy token, kontextové okno, halucinácia
  • Schopnosť rozlíšiť softvérové úlohy, kde je AI silná a slabá, pomocou mentálnej mapy
  • Schopnosť aplikovať základný pracovný cyklus navrhnúť-vyrobiť-overiť na vlastné úlohy

Deň vývojára softvéru málokedy strávi „písaním kódu od začiatku“. V reálnom čase; Čítanie kódu napísaného niekým iným, pokus o reprodukovanie chyby, skenovanie logu (riadky denníka vytvorené aplikáciou počas behu), písanie testov, písanie PR (pull request – žiadosť o zlúčenie, kde sa zmena kódu odošle na kontrolu tímu) vysvetlenie a aktualizácia dokumentácie. Umelá inteligencia (AI) je multiplikátor rýchlosti, ktorý sa môže dotknúť takmer všetkých týchto neviditeľných úloh. Ale prvou podmienkou bezpečného používania je správne pochopiť, čo to je a čo nie.

V tejto časti najprv vysvetlíme základnú technológiu asistenta kódovania v jednoduchom jazyku; potom vytvoríme mentálnu mapu silných a slabých stránok modelu; Nakoniec si stanovíme základnú pracovnú disciplínu, ktorú budeme používať počas celého modulu: navrhnúť, vyrobiť, overiť. Tieto tri kroky sú chrbticou nasledujúcich jedenástich jednotiek.

Poznámka: Tento modul je všeobecným školením. V softvéri kritickom z hľadiska bezpečnosti (spracovanie platieb, zdravotná starostlivosť, autentifikácia, kritická infraštruktúra) výstup AI nenahrádza kontrolu a schválenie kvalifikovaným inžinierom. AI je asistent; Signatár je inžinier.

Čo vlastne robí asistent kódovania?

Väčšina asistentov kódovania je postavená na veľkom jazykovom modeli (LLM – AI vyškolená na obrovské množstvo textu a kódu, ktorá predpovedá ďalší najpravdepodobnejší „kus“). Model „nerozumie“ kódu ako človek; Vygeneruje najpravdepodobnejšie pokračovanie kontextu, ktorý mu zadáte, na základe vzorov, ktoré sa naučí z veľkého množstva príkladov. Tento zdanlivo jednoduchý mechanizmus prináša v praxi prekvapivo zdatné výsledky – pretože väčšina softvéru pozostáva z opakujúcich sa vzorov: požiadavka HTTP, slučka, kontrola nuly, testovací vzor.

Tri termíny sú tu kritické. Token je najmenšia jednotka, ktorú model spracováva delením textu; Je to zhruba niekoľko písmen alebo časť slova. Kontextové okno predstavuje množstvo tokenov, ktoré môže model „vidieť“ naraz; Váš kód, chybové hlásenie a inštrukcie sa musia zmestiť do tohto okna. Výzvou sú všetky pokyny a kontext, ktoré modelu dáte. Kvalita výstupu, ktorý získate, závisí priamo od týchto dvoch: čím lepší kontext a jasnejšie pokyny modelu dáte, tým lepší výsledok získate. Zlý vstup vytvára zlý výstup, aj keď ide o inteligentný model – klasické softvérové ​​pravidlo „odpadky dovnútra, odpadky“ sa vzťahuje aj na AI.

Mapa silných a slabých stránok

Na nasmerovanie AI na tie správne úlohy je potrebné vedieť, kde svieti a kde sa potáca. Zapamätanie si tejto mapy vás pri každej ďalšej misii prinúti premýšľať: "Mám túto prácu zadať AI alebo to urobiť sám?" Umožňuje vám odpovedať na otázku v priebehu niekoľkých sekúnd.

Jeho silné stránky sú: Generovanie štandardného kódu, preklad z jedného jazyka do druhého, písanie regulárneho výrazu (regex), popis funkcie, vytvorenie testovacej kostry, interpretácia chybového hlásenia, vypracovanie dokumentácie, navrhovanie názvov premenných/funkcií a drobné refaktoringy (zlepšenie štruktúry kódu bez zmeny jeho správania).

Slabé stránky: Znalosť podnikových pravidiel špecifických pre vašu spoločnosť, zapamätanie si celej kódovej základne, skutočné spustenie a overenie kódu, s istotou poznať najnovšie verzie knižníc, so stopercentnou zárukou odhaľovať bezpečnostné slabiny. Najnebezpečnejšia je halucinácia: model vymyslí neexistujúcu funkciu, knižnicu alebo API (rozhranie, ktoré umožňuje výmenu dát medzi aplikáciami) vo veľmi presvedčivom jazyku. Toto riziko sa dá v skutočnosti premeniť vo váš prospech, pretože kód, na rozdiel od obyčajného textu, možno otestovať, aby ste zistili, či „funguje“ – jednoducho nepreskočte krok overenia.

Typ misie

Úloha AI

mužská rola

Vyrobte kotol/kostru

vytvára prievan

Prispôsobuje sa, recenzie

Popis kódu

Poskytuje rýchle zhrnutie

Overí kritickú časť v kóde

písanie testov

Prípad naznačuje

Potvrdzuje pokrytie a presnosť

Logika kritická z hľadiska bezpečnosti

užitočný nápad

Rozhodnutie a zodpovednosť spočíva výlučne na ľuďoch.

Použitie API/knižnice

Generuje vzorku

Overuje existenciu a verziu

architektonické rozhodnutie

Druhy možností

Vyberá a obhajuje poznajúc kontext

Krok za krokom: Základný pracovný cyklus

  1. Ujasnite si úlohu. Ak neviete napísať čo chcete jednou vetou, nedokáže to ani modelka. Čím skôr neistota prenikne do vstupu, tým viac rastie na výstupe.
  2. Dajte kontext. Do výzvy pridajte príslušný kód, úplné chybové hlásenie, verziu jazyka/rámca a obmedzenia. Nehovorte „opravte to“, povedzte „Python 3.11, FastAPI 0.110; táto funkcia dáva chybu 500, exploduje, keď je telo požiadavky prázdne“.
  3. Úloha a formát uloženia. Rámec ako „Ste senior vývojár Go; stačí zadať kód a zdôvodniť dve vety“ zameriava výstup.
  4. Požiadajte o malé. Rozdeľte to na kroky a nie na jednu obrovskú požiadavku; Overte každý krok samostatne. Veľké zmeny sú riskantné, pretože sa ťažko overujú a sú náchylné na skrývanie chýb.
  5. Overiť. Spustite to, otestujte to, prečítajte si to vizuálne. Neoverený kód AI je „náčrt“, nie „riešenie“. Toto je najnevyjednávateľný krok cyklu.

Tri mini puzdrá

Prípad 1 – Úspora času je skutočná, ale skromná. Keď tím vytvoril kostru nových koncových bodov CRUD (Create-Read-Update-Delete) pomocou AI, čas prvého návrhu klesol z približne 40 minút na 8 minút. Po preskúmaní a testovaní bol však celkový čas 25 minút; takže skutočný zisk je od 40 do 25, asi 38%. Táto miera, meraná namiesto očakávania „zrýchlili sme 10-krát“, predstavuje udržateľný zisk.

Prípad 2 – Halucinácie sú nákladné. Vývojár použil volanie request.get_json() navrhnuté AI bez overenia; Takáto metóda neexistovala (presne response.json()). Keď sa kód neskompiloval, stratilo sa 20 minút. Jednoduché "existuje táto metóda naozaj?" overenie by vynulovalo stratu.

Prípad 3 – Dobrý kontext zdvojnásobuje výstup. Pre tú istú chybu jeden vývojár jednoducho napísal „dostávam chybu“ a druhý pridal úplnú stopu zásobníka, verziu a vzorku vstupu. Ten dostal správne riešenie na prvý pokus; Prvý strávil tri otáčky. Rozdiel nebol v modeli, ale vo vstupe.

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

Všeobecná a výkonná výzva na spustenie:

Úloha: Ste skúsený vývojár v jazyku {{language}}. Úloha: {{what_want}}Kontext:- Rámec/verzia: {{framework_and_version}}- Obmedzenia: {{výkon, štýl, pravidlá závislosti}}Pravidlá:- Nepoužívajte neexistujúcu knižnicu/funkciu; Ak si nie ste istý, označte ho ako „overiť“. - Najprv uveďte krátky plán, potom kód a potom 2 vety odôvodnenia. - Vytvorte testovateľný, funkčný kód.

Ak chcete filtrovať neistotu späť do modelu:

Pred vyriešením úlohy nižšie uveďte aspoň 3 body, ktoré vám chýbajú alebo sú nejasné ako otázky. NEPÍŠTE kód skôr, ako odpoviem. Úloha: {{úloha}}

Ak chcete nechať výstup samokontrolovať:

Vytvorili ste nasledujúci kód. Teraz zmeňte svoju rolu a kritizujte tento kód:- Uveďte 3 prípady (okrajové prípady), ktoré nemusia fungovať.- Existujú nejaké API/funkcie, ktoré by ste mohli vymyslieť? Mark.- Uveďte opravenú verziu. Kód:{{code}}

Rozdelenie rozhodnutia na možnosti:

Navrhnite 2-3 prístupy k riešeniu {{problem}}. Ku každému: krátky popis, plus/mínus, kedy si vybrať. Uveďte v tabuľkovej forme. NEVYBERAJTE za mňa; len si ujasnite možnosť.

Slabá výzva / Silná výzva

Slabé: "Opravte chybu v tomto kóde." (Ktorá chyba? Ktorý jazyk? Aké je očakávané správanie?)
Strong: "Python 3.11 / FastAPI 0.110. Nasledujúci koncový bod vráti 500 s KeyError, keď je telo požiadavky prázdne; chcem, aby vrátilo 400 a zmysluplnú správu na prázdne telo. Najprv vysvetlite dôvod, potom uveďte opravenú funkciu a potom napíšte test pre tento scenár. [kód]"

Výkonná verzia; Poskytuje jazyk, verziu, skutočnú chybu, očakávané správanie a výstupný formát. Model už nemusí predvídať.

Časté chyby

  • Dôverovať bez overovania. Najčastejšia a najdrahšia chyba. Nehovorte „vyriešené“, kým nie je kód skompilovaný a otestovaný.
  • Kladenie otázok bez kontextu. Odpoveď bez verzie, textu chyby a obmedzení je všeobecná a často nesprávna.
  • Jedna obrovská prosba. Neschopnosť vyžiadať si a skontrolovať 300-linkovú produkciu naraz robí chyby neviditeľnými.
  • Pomýliť si sebavedomie modelky ako dôkaz. AI môže s istotou povedať niečo nesprávne; Tón nie je indikátorom presnosti.
  • Náhodné prilepenie firemného tajomstva. Súkromné ​​kľúče, údaje o zákazníkoch alebo súkromný zdrojový kód by sa nemali zadávať do neschválených nástrojov (tejto téme sa budeme venovať v časti 10).
Tip: S každým výstupom AI zaobchádzajte ako s „toto je koncept“. Tento jediný mentálny návyk uhasí väčšinu rizík, ktoré uvidíte v celom module.

V súhrne

Asistent kódovania je jazykový model, ktorý predpovedá ďalší najpravdepodobnejší fragment; Nerozumie kódu, vytvára vzory. Preto je silný v opakujúcich sa, vzorových úlohách; Mal by sa používať opatrne pri práci, ktorá vyžaduje overenie špecifické pre váš kontext. Najväčším rizikom sú halucinácie a jediným protijedom je overenie. Disciplína, ktorú budeme dodržiavať počas celého modulu, je jasná: objasniť úlohu, poskytnúť kontext, požiadať o malé, overiť každý výstup.

Aplikačná úloha

Zapíšte si tri softvérové úlohy, ktoré ste vykonali za posledný týždeň (napr. oprava chyby, test, aktualizácia README). Prezrite si „mapu silných a slabých stránok“ každého z nich a opíšte jednou vetou, aká by bola vaša a AI úloha, keby ste to AI nechali urobiť. Potom zadajte jednu z týchto úloh AI pomocou šablóny „výzva na spustenie“ uvedenej vyššie a spustite a overte výstup; Všimnite si, koľko minút ste ušetrili a koľko chýb ste museli opraviť.

kontrolný zoznam

  • [ ] Uvedomil som si, že LLM vytvára vzory, nie „rozumie“ kódu.
  • [ ] Dokážem vysvetliť pojmy token, kontextové okno a výzva jednou vetou.
  • [ ] Dokážem rozlíšiť typy úloh, kde je AI silná a slabá.
  • [ ] Viem, čo je to halucinácia a jediný protijed je overenie.
  • [ ] Cyklus „navrhni, vyrob, over“ som prispôsobil vlastnej úlohe.
  • [ ] Dokážem ukázať rozdiel medzi silnou a slabou výzvou na konkrétnom príklade.