Enota 1 / 12

Umetna inteligenca za programske skupine: delovni model in omejitve

Dobički:

  • Sposobnost razložiti, kako pomočnik za kodiranje deluje kot jezikovni model in koncepte žetona, kontekstnega okna, halucinacije
  • Sposobnost razlikovanja programskih nalog, pri katerih je AI močna in šibka, z mentalnim zemljevidom
  • Sposobnost uporabe osnovnega delovnega cikla predlagaj-izdelaj-preveri za svoje naloge

Dan razvijalca programske opreme le redkokdaj preživijo v "pisanju kode iz nič". Realni čas; Branje kode, ki jo je napisal nekdo drug, poskus reproduciranja hrošča, skeniranje dnevnika (vrstice dnevnika, ki jih ustvari aplikacija med delovanjem), pisanje testov, pisanje PR (povlečna zahteva - zahteva za združitev, kjer je sprememba kode predložena v skupinski pregled) razlaga in posodabljanje dokumentacije. Umetna inteligenca (AI) je multiplikator hitrosti, ki se lahko dotakne skoraj vseh teh nevidnih delovnih mest. Toda prvi pogoj za varno uporabo je, da pravilno razumemo, kaj je in kaj ni.

V tej enoti najprej razložimo osnovno tehnologijo pomočnika za kodiranje v preprostem jeziku; nato izdelamo miselni zemljevid prednosti in slabosti modela; Na koncu vzpostavimo osnovno delovno disciplino, ki jo bomo uporabljali skozi celoten modul: predlagaj, izdelaj, preveri. Ti trije koraki so hrbtenica naslednjih enajstih enot.

Opomba: Ta modul je splošno usposabljanje. V varnostno kritični programski opremi (obdelava plačil, zdravstvena oskrba, avtentikacija, kritična infrastruktura) izhodni podatki AI niso nadomestilo za pregled in odobritev s strani kvalificiranega inženirja. AI je pomočnik; Podpisnik je inženir.

Kaj pravzaprav počne pomočnik za kodiranje?

Večina pomočnikov za kodiranje je zgrajenih na velikem jezikovnem modelu (LLM – umetna inteligenca, usposobljena za ogromne količine besedila in kode, ki predvideva naslednji najverjetnejši »kos«). Model ne "razume" kode kot človek; Ustvari najverjetnejše nadaljevanje konteksta, ki mu ga podate, na podlagi vzorcev, ki se jih nauči iz velikega števila primerov. Ta navidezno preprost mehanizem daje v praksi presenetljivo uspešne rezultate — ker je večina programske opreme sestavljena iz ponavljajočih se vzorcev: zahteve HTTP, zanke, ničelnega preverjanja, testnega vzorca.

Tukaj so ključni trije izrazi. Žeton je najmanjša enota, ki jo model obdela z delitvijo besedila; To je približno nekaj črk ali del besede. Kontekstno okno je količina žetonov, ki jih lahko model "vidi" hkrati; Vaša koda, sporočilo o napaki in navodila se morajo prilegati temu oknu. Poziv so vsa navodila in kontekst, ki jih podate modelu. Kakovost rezultatov, ki jih dobite, je neposredno odvisna od teh dveh: boljši kontekst in jasnejša navodila kot daste modelu, boljši rezultat boste dobili. Slab vnos povzroči slab rezultat, tudi če gre za pameten model - klasično pravilo programske opreme "smeti notri, smeti ven" velja tudi za AI.

Zemljevid prednosti in slabosti

Da bi umetno inteligenco usmerili na prava delovna mesta, je treba vedeti, kje blesti in kje se spotika. Če si boste ta zemljevid zapomnili, se boste ob vsaki naslednji misiji spraševali: "Naj to delo oddam AI ali naj ga opravim sam?" Omogoča vam, da na vprašanje odgovorite v nekaj sekundah.

Njegove prednosti so: generiranje okvirne kode, prevajanje iz enega jezika v drugega, pisanje regularnega izraza (regex), opisovanje funkcije, ustvarjanje testnega okostja, tolmačenje sporočila o napaki, priprava dokumentacije, predlaganje imen spremenljivk/funkcij in manjše preoblikovanje (izboljšanje strukture kode brez spreminjanja njenega obnašanja).

Slabosti: Poznavanje poslovnih pravil, specifičnih za vaše podjetje, zapomniti si celotno bazo kode, dejansko izvajanje in preverjanje kode, zagotovo poznavanje najnovejših različic knjižnice, odkrivanje varnostnih ranljivosti s stoodstotnim jamstvom. Najnevarnejša stvar je halucinacija: model si v zelo prepričljivem jeziku izmisli neobstoječo funkcijo, knjižnico ali API (vmesnik, ki omogoča izmenjavo podatkov med aplikacijami). To tveganje lahko dejansko obrnete sebi v prid, saj je kodo, za razliko od navadnega besedila, mogoče preizkusiti, da vidite, ali »deluje« — samo ne preskočite koraka preverjanja.

Vrsta misije

Vloga AI

moška vloga

Izdelajte kotlovnico/skelet

proizvaja osnutek

Prilagaja, pregledi

Opis kode

Poda hiter povzetek

Preveri kritični del kode

pisanje testov

Primer nakazuje

Potrjuje pokritost in natančnost

Varnostno kritična logika

koristna ideja

Odločitev in odgovornost sta v celoti na ljudeh.

Uporaba API/knjižnice

Ustvari vzorec

Preveri obstoj in različico

arhitekturna odločitev

Vrste možnosti

Izbira in brani poznavanje konteksta

Korak za korakom: Osnovni delovni cikel

  1. Pojasnite nalogo. Če ti ne znaš v enem stavku napisati, kar želiš, tudi model ne more. Prej ko negotovost prodre v vhod, večja je v izhodu.
  2. Podajte kontekst. Pozivu dodajte ustrezno kodo, celotno sporočilo o napaki, različico jezika/ogrodja in omejitve. Ne recite "popravi to", recite "Python 3.11, FastAPI 0.110; ta funkcija daje napako 500, eksplodira, ko je telo zahteve prazno".
  3. Vloga in oblika nalaganja. Ogrodje, kot je »Ste višji razvijalec Go; samo navedite kodo in utemeljitev v dveh stavkih«, osredotoča izhod.
  4. Vprašajte za majhne. Razčlenite ga na korake in ne na eno velikansko zahtevo; Preverite vsak korak posebej. Večje spremembe so tvegane, ker jih je težko preveriti in nagnjene k skrivanju napak.
  5. Preveri. Zaženite, preizkusite, preberite vizualno. Nepreverjena koda AI je "skica", ne "rešitev". To je korak v ciklu, o katerem se najbolj ne da pogajati.

Trije mini kovčki

1. primer – Prihranek časa je resničen, a skromen. Ko je ekipa skeletizirala nove končne točke CRUD (Create-Read-Update-Delete) z AI, se je čas prvega osnutka zmanjšal s približno 40 minut na 8 minut. Vendar je bil s pregledom in testiranjem skupni čas 25 minut; tako da je realni dobiček od 40 do 25, približno 38 %. Ta stopnja, izmerjena namesto pričakovanja "10-krat smo pospešili", je trajnostna pridobitev.

2. primer – Halucinacija je draga. Razvijalec je brez preverjanja uporabil klic requests.get_json(), ki ga je predlagal AI; Te metode ni bilo (natančno response.json()). 20 minut je bilo izgubljenih, ko se koda ni prevedla. Preprosto "ali ta metoda res obstaja?" preverjanje bi ponastavilo izgubo.

Primer 3 – Dober kontekst podvoji rezultat. Za isto napako je en razvijalec preprosto napisal "Prejemam napako", drugi pa je dodal celotno sled sklada, različico in vzorec vnosa. Slednji je dobil pravilno rešitev v prvem poskusu; Prvi je porabil tri zavoje. Razlika ni bila v modelu, ampak v vložku.

Štiri kopirane predloge

Splošni zmogljivi zagonski poziv:

Vloga: Ste izkušen {{language}} razvijalec. Naloga: {{what_want}}Kontekst:- Ogrodje/različica: {{framework_and_version}}- Omejitve: {{performance, style, dependency rules}}Pravila:- Ne uporabljajte neobstoječe knjižnice/funkcije; Če niste prepričani, označite kot "preveri". - Najprej navedite kratek načrt, nato kodo, nato 2 stavka utemeljitve. - Izdelajte delujočo kodo, ki jo je mogoče preizkusiti.

Če želite filtrirati negotovost nazaj v model:

Preden rešite spodnjo nalogo, kot vprašanja naštejte VSAJ 3 točke, ki se vam zdijo manjkajoče ali nejasne. NE pišite kode, preden odgovorim. Naloga: {{task}}

Za samopreverjanje izhoda:

Izdelali ste naslednjo kodo. Zdaj pa spremenite svojo vlogo in kritizirajte to kodo: - Naštejte 3 primere (robne primere), ki morda ne bodo delovali. - Ali obstajajo API-ji/funkcije, ki bi jih lahko izmislili? Označi.- Daj popravljeno različico. Koda:{{code}}

Če želite odločitev razdeliti na možnosti:

Predlagajte 2-3 pristope k rešitvi za {{problem}}. Za vsako: kratek opis, plus/minus, kdaj izbrati. Podajte v obliki tabele. NE izbirajte zame; samo razjasni možnost.

Šibek poziv/močan poziv

Šibko: "Odpravi napako v tej kodi." (Katera napaka? Kateri jezik? Kakšno je pričakovano vedenje?)
Močno: "Python 3.11 / FastAPI 0.110. Naslednja končna točka vrne 500 s KeyError, ko je telo zahteve prazno; želim, da vrne 400 in smiselno sporočilo v praznem telesu. Najprej razložite razlog, nato navedite popravljeno funkcijo, nato pa napišite preizkus za ta scenarij. [koda]"

Zmogljiva različica; Poda jezik, različico, dejansko napako, pričakovano vedenje in izhodni format. Modelu ni več treba napovedovati.

Pogoste napake

  • Zaupanje brez preverjanja. Najpogostejša in najdražja napaka. Ne recite "rešeno", dokler koda ni sestavljena in preizkušena.
  • Postavljanje vprašanj brez konteksta. Odgovor brez različice, besedila napake in omejitev je splošen in pogosto napačen.
  • Ena velika prošnja. Če ne morete zahtevati in pregledati 300-linijske proizvodnje naenkrat, so napake nevidne.
  • Manekenkino samozavest zamenjujejo kot dokaz. AI lahko samozavestno reče nekaj narobe; Ton ni pokazatelj točnosti.
  • Naključno lepljenje skrivnosti podjetja. Zasebnih ključev, podatkov o strankah ali zasebne izvorne kode ne smete vnašati v neodobrena orodja (to temo se bomo poglobili v 10. enoti).
Namig: vsak rezultat umetne inteligence obravnavajte kot »to je osnutek«. Ta ena miselna navada odpravi večino tveganj, ki jih boste videli skozi modul.

Če povzamem

Pomočnik pri kodiranju je jezikovni model, ki napove naslednji najverjetnejši fragment; Ne razume kode, proizvaja vzorce. Zato je močan v ponavljajočih se formulacijskih opravilih; Pri delu, ki zahteva preverjanje, ki je specifično za vaš kontekst, ga je treba uporabljati previdno. Največje tveganje predstavljajo halucinacije, edini protistrup pa je preverjanje. Disciplina, ki se je bomo držali skozi celoten modul, je jasna: razjasnite nalogo, podajte kontekst, prosite za majhne, ​​potrdite vsak rezultat.

Aplikacijska naloga

Zapišite tri programske naloge, ki ste jih opravili v zadnjem tednu (npr. odpravljanje napak, preizkus, posodobitev README). Oglejte si »karto prednosti in slabosti« za vsakega in v enem stavku opišite, kakšna bi bila vaša vloga in vloga umetne inteligence, če bi to naredili umetna inteligenca. Nato dajte eno od teh nalog umetni inteligenci z zgornjo predlogo »start prompt« ter zaženite in preverite rezultat; Upoštevajte, koliko minut ste prihranili in koliko napak ste morali popraviti.

kontrolni seznam

  • [ ] Spoznal sem, da LLM proizvaja vzorce, ne pa "razume" kode.
  • [ ] Znam razložiti koncepte žetona, kontekstnega okna in poziva v enem stavku.
  • [ ] Razlikujem med vrstami nalog, pri katerih je umetna inteligenca močna in šibka.
  • [ ] Vem, kaj je halucinacija in edini protistrup je preverjanje.
  • [ ] Cikel "predlagaj, izdelaj, preveri" sem prilagodil svoji nalogi.
  • [ ] Na konkretnem primeru lahko pokažem razliko med močnim in šibkim pozivom.