Jedinica 1 / 12

Umjetna inteligencija za softverske timove: radni model i ograničenja

Dobici:

  • Sposobnost objašnjenja kako pomoćnik kodiranja radi kao jezični model i koncepti tokena, kontekstnog prozora, halucinacija
  • Sposobnost razlikovanja softverskih zadataka u kojima je AI jaka i slaba s mentalnom mapom
  • Sposobnost primjene osnovnog radnog ciklusa predložiti-proizvesti-provjeriti na vlastite zadatke

Dan razvojnog programera rijetko se provodi u "pisanju koda od nule". Realno vrijeme; Čitanje koda koji je napisao netko drugi, pokušaj reproduciranja buga, skeniranje dnevnika (redovi dnevnika koje proizvodi aplikacija tijekom rada), pisanje testova, pisanje PR-a (zahtjev za povlačenjem - zahtjev za spajanje gdje se promjena koda podnosi na timski pregled) objašnjenje i ažuriranje dokumentacije. Umjetna inteligencija (AI) je multiplikator brzine koji može dotaknuti gotovo sve ove neviđene poslove. Ali prvi uvjet za sigurno korištenje je ispravno razumjeti što on jest, a što nije.

U ovoj jedinici prvo objašnjavamo temeljnu tehnologiju pomoćnika kodiranja jednostavnim jezikom; zatim stvaramo mentalnu mapu snaga i slabosti modela; Na kraju uspostavljamo osnovnu radnu disciplinu koju ćemo koristiti kroz cijeli modul: predložiti, proizvesti, provjeriti. Ova tri koraka okosnica su sljedećih jedanaest cjelina.

Napomena: Ovaj modul je opća obuka. U sigurnosno kritičnom softveru (obrada plaćanja, zdravstvena skrb, autentifikacija, kritična infrastruktura) AI izlaz nije zamjena za pregled i odobrenje od strane kvalificiranog inženjera. AI je pomoćnik; Potpisnik je inženjer.

Što pomoćnik za kodiranje zapravo radi?

Većina pomoćnika kodiranja izgrađena je na velikom jezičnom modelu (LLM—AI obučen na ogromnim količinama teksta i koda koji predviđa sljedeći najvjerojatniji "dijel"). Model ne "razumije" kod kao čovjek; Generira najvjerojatniji nastavak konteksta koji mu date, na temelju obrazaca koje uči iz ogromnog skupa primjera. Ovaj naizgled jednostavan mehanizam daje iznenađujuće uspješne rezultate u praksi - jer se većina softvera sastoji od ponavljajućih uzoraka: HTTP zahtjeva, petlje, provjere nule, testnog uzorka.

Tri pojma su ovdje kritična. Token je najmanja jedinica koju model obrađuje dijeljenjem teksta; To je otprilike nekoliko slova ili dio riječi. Kontekstni prozor je količina tokena koju model može "vidjeti" odjednom; Vaš kod, poruka o pogrešci i upute moraju stati u ovaj prozor. Prompt su sve upute i kontekst koji date modelu. Kvaliteta izlaza koju dobijete izravno ovisi o ovo dvoje: što bolji kontekst i jasnije upute date modelu, bolji ćete rezultat dobiti. Loš unos proizvodi loš rezultat, čak i ako se radi o pametnom modelu — klasično softversko pravilo "smeće unutra, smeće van" također se primjenjuje na AI.

Karta snaga i slabosti

Da bi se AI usmjerila na prave poslove, potrebno je znati gdje sija, a gdje kiksa. Memoriranje ove karte natjerat će vas da se sa svakom sljedećom misijom pitate: "Trebam li ovaj posao prepustiti umjetnoj inteligenciji ili to učiniti sam?" Omogućuje vam da odgovorite na pitanje u nekoliko sekundi.

Njegove prednosti su: Generiranje standardnog koda, prevođenje s jednog jezika na drugi, pisanje regularnog izraza (regex), opisivanje funkcije, stvaranje testnog kostura, tumačenje poruke o pogrešci, izrada nacrta dokumentacije, predlaganje naziva varijabli/funkcija i manja refaktoriranja (poboljšanje strukture koda bez promjene njegovog ponašanja).

Slabosti: Poznavanje poslovnih pravila specifične za vašu tvrtku, pamćenje vaše cijele baze kodova, stvarno pokretanje i provjera koda, sigurno poznavanje najnovijih verzija knjižnice, otkrivanje sigurnosnih propusta sa stopostotnim jamstvom. Najopasnija stvar je halucinacija: model izmišlja nepostojeću funkciju, biblioteku ili API (sučelje koje omogućuje razmjenu podataka između aplikacija) na vrlo uvjerljivom jeziku. Taj se rizik zapravo može okrenuti u vašu korist, budući da se kod, za razliku od običnog teksta, može testirati da se vidi "radi li" - samo nemojte preskočiti korak provjere.

Vrsta misije

Uloga AI

muška uloga

Izradite kotlovnicu/kostur

proizvodi nacrt

Prilagođava se, recenzije

Opis koda

Daje brzi sažetak

Provjerava kritični dio u kodu

pisanje testova

Slučaj sugerira

Potvrđuje pokrivenost i točnost

Sigurnosno kritična logika

korisna ideja

Odluka i odgovornost u potpunosti su na ljudima.

Upotreba API-ja/biblioteke

Generira uzorak

Provjerava postojanje i verziju

arhitektonska odluka

Vrste opcija

Odabire i brani poznavanje konteksta

Korak po korak: Osnovni radni ciklus

  1. Pojasnite zadatak. Ako ti ne znaš u jednoj rečenici napisati što želiš, ne može ni model. Što prije neizvjesnost prodre u ulaz, to više raste u izlazu.
  2. Dajte kontekst. U upit dodajte relevantni kod, potpunu poruku o pogrešci, verziju jezika/okvira i ograničenja. Nemojte reći "popravi ovo", recite "Python 3.11, FastAPI 0.110; ova funkcija daje pogrešku 500, eksplodira kada je tijelo zahtjeva prazno".
  3. Uloga i format nametanja. Okvir poput "Vi ste stariji Go programer; samo dajte kod i obrazloženje u dvije rečenice" fokusira izlaz.
  4. Pitajte za male. Podijelite ga na korake radije nego na jedan golemi zahtjev; Provjerite svaki korak zasebno. Velike promjene su rizične jer ih je teško provjeriti i sklone su skrivanju pogrešaka.
  5. Potvrdi. Pokrenite ga, testirajte, čitajte vizualno. Neprovjereni AI kod je "skica", a ne "rješenje". Ovo je korak u ciklusu o kojem se ne može pregovarati.

Tri mini kućišta

Slučaj 1 — Ušteda vremena je stvarna, ali skromna. Kada je tim skeletonizirao nove CRUD (Create-Read-Update-Delete) krajnje točke pomoću umjetne inteligencije, vrijeme prve skice palo je s otprilike 40 minuta na 8 minuta. Međutim, s pregledom i testiranjem, ukupno je vrijeme bilo 25 minuta; pa je pravi dobitak od 40 do 25, oko 38%. Ova stopa, mjerena umjesto očekivanja "ubrzali smo 10 puta", predstavlja održivi dobitak.

Slučaj 2 — Halucinacije su skupe. Programer je upotrijebio poziv requests.get_json() koji je predložio AI bez provjere; Nije postojala takva metoda (točnije response.json()). Izgubljeno je 20 minuta kada se kod nije kompajlirao. Jednostavan "postoji li ova metoda stvarno?" verifikacija bi poništila gubitak.

Slučaj 3 — Dobar kontekst udvostručuje izlaz. Za isti bug, jedan programer jednostavno je napisao "Dobivam pogrešku", a drugi je dodao cijelo praćenje hrpe, verziju i uzorak unosa. Potonji je dobio točno rješenje u prvom pokušaju; Prvi je potrošio tri kruga. Razlika nije bila u modelu, već u unosu.

Četiri predloška za kopiranje

Moćan upit za pokretanje opće namjene:

Uloga: Vi ste iskusni {{language}} programer. Zadatak: {{what_want}}Kontekst:- Okvir/verzija: {{framework_and_version}}- Ograničenja: {{performance, style, dependency rules}}Pravila:- Nemojte koristiti nepostojeću biblioteku/funkciju; Ako niste sigurni, označite to kao "provjeri". - Prvo dati kratak plan, zatim šifru, zatim 2 rečenice obrazloženja. - Izradite radni kod koji se može testirati.

Za filtriranje nesigurnosti natrag u model:

Prije rješavanja donjeg zadatka navedite NAJMANJE 3 točke koje smatrate nedostajućim ili nejasnim kao pitanja. NEMOJ pisati kod prije nego što odgovorim. Zadatak: {{task}}

Za samoprovjeru izlaza:

Proizveli ste sljedeći kod. Sada promijenite svoju ulogu i kritizirajte ovaj kod: - Navedite 3 slučaja (rubna slučaja) koji možda neće raditi. - Postoje li API-ji/funkcije koje ste mogli izmisliti? Označi.- Daj ispravljenu verziju. Šifra:{{code}}

Da biste odluku podijelili na opcije:

Predložite 2-3 pristupa rješenju za {{problem}}. Za svaki: kratak opis, plus/minus, kada odabrati. Dati u obliku tablice. NE BIRAJ umjesto mene; samo razjasnite opciju.

Slab upit / Jak upit

Slabo: "Ispravite grešku u ovom kodu." (Koja pogreška? Koji jezik? Koje je očekivano ponašanje?)
Jako: "Python 3.11 / FastAPI 0.110. Sljedeća krajnja točka vraća 500 s KeyError kada tijelo zahtjeva bude prazno; želim da vrati 400 i smislenu poruku na praznom tijelu. Prvo objasnite razlog, a zatim dajte ispravljenu funkciju, a zatim napišite test za ovaj scenarij. [kod]"

Snažna verzija; Daje jezik, verziju, stvarnu pogrešku, očekivano ponašanje i izlazni format. Model više ne mora predviđati.

Uobičajene greške

  • Povjerenje bez provjere. Najčešća i najskuplja greška. Nemojte reći "riješeno" dok se kod ne kompajlira i testira.
  • Postavljanje pitanja bez konteksta. Odgovor bez verzije, teksta pogreške i ograničenja je generički i često pogrešan.
  • Jedna velika molba. Nemogućnost zahtijevanja i pregleda proizvodnje od 300 linija odjednom čini pogreške nevidljivima.
  • Zamjenjujući samouvjerenost modela kao dokaz. AI može pouzdano reći nešto pogrešno; Ton nije pokazatelj točnosti.
  • Nasumično lijepljenje tajne tvrtke. Privatni ključevi, korisnički podaci ili privatni izvorni kod ne smiju se unositi u neodobrene alate (ovu ćemo temu obraditi u jedinici 10).
Savjet: Tretirajte svaki AI izlaz kao "ovo je nacrt". Ova jedina mentalna navika uklanja većinu rizika koje ćete vidjeti tijekom modula.

Ukratko

Pomoćnik kodiranja je jezični model koji predviđa sljedeći najvjerojatniji fragment; Ne razumije kod, proizvodi obrasce. Zato je jak u ponavljajućim, formulacijskim poslovima; Treba ga koristiti oprezno za posao koji zahtijeva provjeru koja je specifična za vaš kontekst. Najveći rizik je halucinacija, a jedini protuotrov je provjera. Disciplina koju ćemo slijediti tijekom cijelog modula je jasna: razjasnite zadatak, dajte kontekst, tražite male, potvrdite svaku isporuku.

Zadatak aplikacije

Zapišite tri softverska zadatka koja ste izvršili u prošlom tjednu (npr. ispravak bugova, test, ažuriranje README). Pogledajte "kartu snaga i slabosti" za svaki i u jednoj rečenici opišite koja bi bila vaša uloga i uloga umjetne inteligencije da to učini umjetna inteligencija. Zatim dajte jedan od ovih zadataka AI-u s predloškom "start prompt" iznad i pokrenite i provjerite izlaz; Zabilježite koliko ste minuta uštedjeli i koliko ste grešaka morali popraviti.

popis za provjeru

  • [ ] Shvatio sam da LLM proizvodi uzorke, a ne "razumije" kod.
  • [ ] Mogu objasniti koncepte tokena, kontekstnog prozora i upita u jednoj rečenici.
  • [ ] Mogu razlikovati vrste zadataka u kojima je AI jaka i slaba.
  • [ ] Znam što je halucinacija i jedini protuotrov je provjera.
  • [ ] Ciklus "predloži, proizvedi, provjeri" prilagodio sam vlastitom zadatku.
  • [ ] Mogu pokazati razliku između jakog i slabog poticaja na konkretnom primjeru.