Dobici:
- Sposobnost da objasni kako asistent kodiranja radi kao jezički model i koncepte tokena, kontekstnog prozora, halucinacije
- Sposobnost razlikovanja softverskih zadataka gdje je AI jaka i slaba s mentalnom mapom
- Sposobnost primjene osnovnog ciklusa rada predložiti-proizvesti-provjeriti na vlastite zadatke
Dan programera softvera rijetko se provodi u "pisanju koda od nule". Real time; Čitanje koda koji je neko drugi napisao, pokušaj da se reproducira greška, skeniranje log-a (redovi dnevnika koje aplikacija proizvodi tokom rada), pisanje testova, pisanje PR-a (pull zahtjev - zahtjev za spajanjem gdje se promjena koda dostavlja na pregled tima) objašnjenja i ažuriranje dokumentacije. Umjetna inteligencija (AI) je množitelj brzine koji može dodirnuti gotovo sve ove nevidljive poslove. Ali prvi uslov za bezbednu upotrebu je da pravilno razumete šta jeste, a šta nije.
U ovoj jedinici prvo objašnjavamo osnovnu tehnologiju pomoćnika za kodiranje na jednostavnom jeziku; zatim kreiramo mentalnu mapu snaga i slabosti modela; Konačno, uspostavljamo osnovnu radnu disciplinu koju ćemo koristiti kroz cijeli modul: predložiti, proizvesti, provjeriti. Ova tri koraka su okosnica sljedećih jedanaest jedinica.
Napomena: Ovaj modul je opća obuka. U softveru koji je kritičan za sigurnost (obrada plaćanja, zdravstvena zaštita, autentifikacija, kritična infrastruktura) AI izlaz nije zamjena za pregled i odobrenje od strane kvalifikovanog inženjera. AI je asistent; Potpisnik je inženjer.
Šta zapravo radi pomoćnik za kodiranje?
Većina pomoćnika za kodiranje izgrađena je na velikom jezičkom modelu (LLM – AI obučena za ogromne količine teksta i koda koji predviđa sljedeći najvjerovatniji „komad“). Model ne "razumije" kod kao čovjek; Generiše najverovatniji nastavak konteksta koji mu date, na osnovu obrazaca koje uči iz ogromnog skupa primera. Ovaj naizgled jednostavan mehanizam daje iznenađujuće stručne rezultate u praksi — jer se većina softvera sastoji od obrazaca koji se ponavljaju: HTTP zahtjev, petlja, nulta provjera, test obrazac.
Tri termina su ovdje kritična. Token je najmanja jedinica koju model obrađuje dijeljenjem teksta; To je otprilike nekoliko slova ili dio riječi. Prozor konteksta je količina tokena koje model može "vidjeti" odjednom; Vaš kod, poruka o grešci i instrukcije moraju stati u ovaj prozor. Prompt su sve upute i kontekst koje dajete modelu. Kvalitet rezultata koji ćete dobiti direktno zavisi od ova dva: što bolji kontekst i jasnija uputstva date modelu, to ćete dobiti bolji rezultat. Loš unos proizvodi loš rezultat, čak i ako je u pitanju pametan model — klasično softversko pravilo „smeće u, smeće van“ također se primjenjuje na AI.
Mapa snaga i slabosti
Da biste AI usmjerili na prave poslove, potrebno je znati gdje blista, a gdje posrće. Pamćenje ove mape natjerat će vas da se zapitate sa svakom sljedećom misijom: "Da li da ovaj posao prepustim AI-u ili da to uradim sam?" Omogućava vam da odgovorite na pitanje u sekundi.
Njegove prednosti su: generiranje šablonskog koda, prevođenje s jednog jezika na drugi, pisanje regularnog izraza (regex), opisivanje funkcije, kreiranje testnog skeleta, tumačenje poruke o grešci, izrada dokumentacije, predlaganje imena varijabli/funkcija i manja refaktoriranja (poboljšanje strukture koda bez promjene njegovog ponašanja).
Slabosti: Poznavanje poslovnih pravila specifičnih za vašu kompaniju, pamćenje vaše cijele baze koda, stvarno pokretanje i provjera koda, sigurno poznavanje najnovijih verzija biblioteke, otkrivanje sigurnosnih propusta sa stopostotnom garancijom. Najopasnija stvar je halucinacija: model izmišlja nepostojeću funkciju, biblioteku ili API (interfejs koji omogućava razmjenu podataka između aplikacija) na vrlo uvjerljivom jeziku. Ovaj rizik se zapravo može pretvoriti u svoju korist, budući da se kod, za razliku od običnog teksta, može testirati da bi se vidjelo da li “radi” – samo nemojte preskočiti korak provjere.
Vrsta misije
Uloga AI
muška uloga
Izraditi šablon/skelet
proizvodi propuh
Adaptacije, recenzije
Opis koda
Daje kratak sažetak
Provjerava kritični dio u kodu
pisanje testova
Case sugerira
Potvrđuje pokrivenost i tačnost
Sigurnosno-kritična logika
korisna ideja
Odluka i odgovornost su u potpunosti na ljudima.
Upotreba API-ja/biblioteke
Generiše uzorak
Provjerava postojanje i verziju
arhitektonska odluka
Vrste opcija
Odabire i brani znajući kontekst
Korak po korak: Osnovni radni ciklus
- Pojasnite zadatak. Ako ne možete u jednoj rečenici napisati ono što želite, ne može ni model. Što se ranije nesigurnost uvlači u ulaz, to više raste u izlazu.
- Dajte kontekst. Dodajte odgovarajući kod, punu poruku o grešci, verziju jezika/okvira i ograničenja u prompt. Nemojte reći "popravi ovo", recite "Python 3.11, FastAPI 0.110; ova funkcija daje grešku 500, eksplodira kada je tijelo zahtjeva prazno".
- Uloga i format nametanja. Okvir poput "Vi ste stariji Go programer; samo dajte kod i obrazloženje od dvije rečenice" fokusira izlaz.
- Pitajte za male. Rastavite ga na korake, a ne na jedan ogroman zahtjev; Provjerite svaki korak posebno. Velike promjene su rizične jer ih je teško provjeriti i sklone skrivanju grešaka.
- Verify. Pokrenite, testirajte, vizualno pročitajte. Neprovjereni AI kod je "skica", a ne "rješenje". Ovo je korak ciklusa o kojem se najviše ne može pregovarati.
Tri mini futrole
Slučaj 1 — Uštede vremena su stvarne, ali skromne. Kada je tim skeletizirao nove CRUD (Kreiraj-Pročitaj-Ažuriraj-Delete) krajnje tačke pomoću AI, vrijeme prvog nacrta je palo sa otprilike 40 minuta na 8 minuta. Međutim, uz pregled i testiranje, ukupno vrijeme je bilo 25 minuta; tako da je stvarni 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 koristio poziv requests.get_json() koji je predložila AI bez validacije; Nije postojala takva metoda (tačno response.json()). 20 minuta je izgubljeno kada kod nije kompajliran. Jednostavna "da li ova metoda zaista postoji?" verifikacija bi resetovala gubitak.
Slučaj 3 — Dobar kontekst udvostručuje izlaz. Za istu grešku, jedan programer je jednostavno napisao "Dobijam grešku", a drugi je dodao kompletno praćenje steka, verziju i uzorak unosa. Potonji je dobio ispravno rješenje iz prvog pokušaja; Prvi je potrošio tri okreta. Razlika nije bila u modelu, već u inputu.
Četiri predloška koji se mogu kopirati
Opće namjene, moćni prompt za pokretanje:
Uloga: Vi ste iskusan {{language}} programer. Zadatak: {{what_want}}Kontekst:- Okvir/verzija: {{framework_and_version}}- Ograničenja: {{performanse, stil, pravila zavisnosti}}Pravila:- Nemojte koristiti nepostojeću biblioteku/funkciju; Ako niste sigurni, označite kao "provjeri". - Prvo dajte kratak plan, zatim šifru, pa 2 rečenice opravdanja. - Izraditi provjerljiv, radni kod.
Za filtriranje nesigurnosti natrag u model:
Prije rješavanja zadatka u nastavku, navedite NAJMANJE 3 tačke koje vam nedostaju ili su nejasne kao pitanja. NEMOJTE pisati kod prije nego što odgovorim. Zadatak: {{task}}
Da bi se rezultat samoprovjerio:
Napravili ste sljedeći kod. Sada promijenite svoju ulogu i kritikujte ovaj kod: - Navedite 3 slučaja (rubna slučaja) koji možda neće raditi. - Postoje li neki API-ji/funkcije koje ste mogli izmisliti? Označi.- Dajte ispravljenu verziju.Šifra:{{code}}
Da biste odluku podijelili na opcije:
Predložite 2-3 pristupa rješenja za {{problem}}. Za svaki: kratak opis, plus/minus, kada odabrati. Navedite u tabelarnom obliku. NE biraj za mene; samo pojasnite opciju.
Slaba prompt / Jaka prompt
Slabo: "Popravi grešku u ovom kodu." (Koja greška? Koji jezik? Kakvo je očekivano ponašanje?)
Snažno: "Python 3.11 / FastAPI 0.110. Sljedeća krajnja tačka vraća 500 sa KeyError kada tijelo zahtjeva bude prazno; Želim da vrati 400 i značajnu poruku u praznom tijelu. Prvo objasnite razlog, zatim dajte ispravljenu funkciju, a zatim napišite test za ovaj scenario. [kod]"
Moćna verzija; Daje jezik, verziju, stvarnu grešku, očekivano ponašanje i izlazni format. Model više ne mora da predviđa.
Uobičajene greške
- Pouzdanje bez verifikacije. 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 greške i ograničenja je generički i često pogrešan.
- Jedan veliki zahtev. Nemogućnost da zatražite i pregledate proizvodnju od 300 linija odjednom čini greške nevidljivim.
- Pogrešiti samopouzdanje modela kao dokaz. AI može sa sigurnošću reći nešto pogrešno; Ton nije pokazatelj tačnosti.
- Nasumično lijepljenje tajne kompanije. Privatni ključevi, podaci o klijentima ili privatni izvorni kod ne bi trebalo da se unose u neodobrene alate (u ovu temu ćemo se pozabaviti u jedinici 10).
Savjet: Tretirajte svaki izlaz AI kao "ovo je nacrt". Ova jedinstvena mentalna navika uklanja većinu rizika koje ćete vidjeti tokom modula.
Ukratko
Pomoćnik za kodiranje je jezički model koji predviđa sljedeći najvjerovatniji fragment; Ne razumije kod, proizvodi obrasce. Zato je jak u poslovima koji se ponavljaju; Treba ga koristiti oprezno za rad koji zahtijeva provjeru koja je specifična za vaš kontekst. Najveći rizik je halucinacija, a jedini protuotrov je verifikacija. Disciplina koju ćemo pratiti kroz cijeli modul je jasna: razjasniti zadatak, dati kontekst, zatražiti malo, potvrditi svaki rezultat.
Zadatak aplikacije
Zapišite tri softverska zadatka koja ste radili u protekloj sedmici (npr. ispravak grešaka, test, ažuriranje README). Pogledajte „mapu prednosti i slabosti“ za svaku od njih i opišite u jednoj rečenici koja bi bila vaša i AI uloga da to učinite. Zatim dajte jedan od ovih zadataka AI-u s gornjim predloškom „start prompt“ i pokrenite i provjerite izlaz; Zabilježite koliko minuta ste uštedjeli i koliko grešaka ste morali popraviti.
kontrolna lista
- [ ] Shvatio sam da LLM proizvodi obrasce, a ne "razumije" kod.
- [ ] Mogu objasniti koncepte tokena, kontekstnog prozora i prompta u jednoj rečenici.
- [ ] Mogu razlikovati tipove zadataka u kojima je AI jaka i slaba.
- [ ] Znam šta je halucinacija i jedini protivotrov je verifikacija.
- [ ] Prilagodio sam ciklus "predloži, proizvede, provjeri" svom vlastitom zadatku.
- [ ] Mogu pokazati razliku između jakog i slabog prompta na konkretnom primjeru.