Dobici:
- Sposobnost razlikovanja gdje AI pruža pravu brzinu u životnom ciklusu razvoja softvera, a gdje odluka i odgovornost ostaju na inženjeru
- Sposobnost primjene troslojne inženjerske discipline koja provjerava svaki kod i dizajn proizveden kompilacijom, testiranjem i pregledom.
- Steknite naviku čišćenja konteksta kako biste iskoristili AI bez dijeljenja povjerljivog izvornog koda, vjerodajnica i podataka o korisnicima
Kad pogledate dan računalnog inženjera, slika je slična u većini timova: razumijevanje poslovnog zahtjeva, projektiranje, pisanje koda, čitanje tuđeg koda, ispravljanje pogrešaka (proces otkrivanja zašto program ne radi ispravno i popravljanje toga), pisanje testova, priprema dokumentacije, pregled koda i prisustvovanje sastancima. Drugim riječima, vrijeme posvećeno pravoj "inženjerskoj prosudbi", odnosno je li rješenje ispravno, sigurno i održivo, drobi se pod ponavljajućim radom. Tu na scenu stupa umjetna inteligencija (skraćeno AI; softver koji radi na tekstu i kodu s velikim jezičnim modelom). AI ne donosi odluke umjesto vas; Priprema vas za odluku, proizvodi kostur koda, sužava bug i stavlja razrađeni nacrt pred vas. Kroz ovaj modul nećemo pozicionirati AI kao "automatskog programera", već kao discipliniranog partnera za programiranje u paru čiji se izlaz svaki put kompilira, testira i pregledava.
U ovoj prvoj jedinici razjašnjavamo tri stvari: U kojim fazama životnog ciklusa razvoja softvera (faze kroz koje softver prolazi od ideje do proizvodnje: analiza, dizajn, kodiranje, testiranje, implementacija, održavanje) AI dodaje pravu vrijednost; koje odluke treba strogo prepustiti inženjeru; i koje se discipline provjere i povjerljivosti morate pridržavati kada to radite. Bez pravilno postavljenog krova, tehnike na sljedećim jedinicama mogu postati opasne; Jer pogreška u softveru dopire do milijuna korisnika u isto vrijeme i može se pretvoriti u sigurnosnu ranjivost.
Koncepti: Halucinacija: AI-jeva uvjerljiva izmišljotina metode, biblioteke, API-ja ili ponašanja koje zapravo ne postoji. Kontekst: Unos koji dajete AI (kôd, poruka o pogrešci, zahtjev, ograničenja). Verifikacija: Provjera rezultata na neovisan način (kompilacija, testiranje, dokumentacija). Ova tri koncepta okosnica su cijelog modula.
U kojim je poduzećima AI Accelerator, u kojim je poduzećima rizičan?
Softverski poslovi spadaju u dvosmjerni spektar u smislu rezultata. Na jednom kraju su reverzibilni, niskorizični pripremni radovi; S druge strane, postoje zadaci koje je teško vratiti i koji ulaze u proizvodno okruženje i mogu uzrokovati gubitak podataka, sigurnosnu ranjivost ili prekide. Vrijednost AI-a varira ovisno o tome gdje se nalazite na ovom spektru.
vrsta poslovanja
AI doprinos
Uloga inženjera
Kodni kostur / predložak
Brzo stvaranje repetitivne strukture
Logika i kontrola statusa rubova
otklanjanje pogrešaka
Popis hipoteza i mogućih uzroka
Razmnožavanje i potvrda temeljnog uzroka
pisanje testova
Testirajte izradu nacrta i scenarija
Smislena tvrdnja i provjera opsega
refaktoriranje
Prijedlog refaktoriranja
Održavanje ponašanja testiranjem
Dokumentacija
Prvi nacrt i struktura
Provjera ispravnosti prema kodu
Arhitektonska/sigurnosna odluka
Popis opcija te prednosti i mane
Konačna odluka i odgovornost
Pravilo je jednostavno: rizik izlaza umjetne inteligencije jednak je šteti koju će nanijeti ako taj izlaz napravi pogrešku. Netočno predlaganje naziva varijable je bezopasno; Nepravilna autentifikacija (provjera je li korisnik stvarno ono za što se predstavlja) čini cijeli sustav ranjivim. Dakle, prvo pitanje koje treba postaviti prije korištenja izlaza je: "Što se događa ako ovo nije u redu i tko to primijeti i kada?"
Oprez: AI proizvodi tečan i pouzdan kod. Tečnost nije jamstvo točnosti. Jezični model može vjerodostojno proizvesti naziv funkcije koji zapravo ne postoji, netočan niz parametara ili čak nesiguran uzorak. U softveru to ne ostaje samo na papiru; Kompajlira se, pokreće i eksplodira u proizvodnji.
Odluke koje treba prepustiti inženjeru
Neke odluke nikada ne bi trebale biti potpuno automatizirane; nosi tehničke, pravne i etičke rizike:
- Odobrenje za proizvodnju: Puštanje koda u proizvodnju i odgovornost za to.
- Sigurnost i arhitektura: skupe odluke kao što su autentifikacija, autorizacija, enkripcija i model podataka.
- Licenca i autorska prava: Upotrebljivost proizvedenog koda u komercijalnom proizvodu i usklađenost s licencom.
- Rad s povjerljivim podacima: Transakcije s podacima o kupcima, tajne izvornog koda i informacije o identitetu.
Upozorenje: Čak i ako AI kaže da je "ovaj kod siguran i spreman za proizvodnju", prihvaćanje toga bez sigurnosnog testiranja, pregleda koda i provjere valjanosti pod stvarnim opterećenjem je neprihvatljivo. U radu koji je kritičan za sigurnost, izlaz umjetne inteligencije nikada nije zamjena za odobrenje kompetentnog inženjera; Svaki rezultat koji vodi do odluke mora biti neovisno provjeren i odobren od strane ovlaštenog inženjera prije implementacije.
Disciplina provjere: Troslojna kontrola
Primijenite tri razine kontrole da biste koristili izlaz umjetne inteligencije poput starijeg recenzenta, a ne naslijepo. Ovo je osnovni refleks koji ćemo ponavljati tijekom modula.
- Kompilacija i statička provjera: kompajlira li se kod doista/pokreće? Ima li tipskih pogrešaka, neiskorištenih varijabli, nepostojećih API-ja? Što kaže alat za statičku analizu (alat koji ispituje kod bez pokretanja)?
- Neovisna reprodukcija (testiranje): Pokrenite kod s malim, poznatim ulazima i pogledajte hoćete li dobiti očekivani izlaz. Pokušajte s rubnim slučajevima (nula, nula, negativno, ogromno).
- Provjera izvora: Svaki API, verzija biblioteke i jezična značajka koju AI koristi treba biti potvrđena iz službene dokumentacije.
Upit za provjeru (olakšava provjeru rezultata): "Navedite SVE vanjske biblioteke, metode i jezične značajke koje koristite u svom kodu. Za svaku od njih naznačite u kojoj je verziji dostupna i označite je 'mora se provjeriti iz dokumentacije'. Nemojte izmišljati API-je za koje niste sigurni; ako niste sigurni, jasno napišite 'nisam siguran'. Također navedite sve rubne slučajeve koje niste obradili kao zaseban popis."
Kritikirajte svoj vlastiti kôd: "Pogledajte kritički kôd koji ste upravo napisali, poput starijeg inženjera koji vas je unajmio. Navedite konkretne stavke pod ova tri naslova: (1) greške u logici/rubovima, (2) sigurnosni rizici, (3) problemi s performansama ili čitljivošću. Za svaku stavku napišite 'zašto je problem' i 'predloženo rješenje'. Ako nema problema, recite 'Nisam mogao pronaći problem'; ne pokušavajte da ga uljepšam."
Slab upit / Jak upit
SLABO:"Napišite mi funkciju provjere autentičnosti korisnika."(Rezultat: nejasno koji jezik, koje pravilo, koje ponašanje pogreške; generički kod, često nesiguran ili izvan konteksta.)JAKO:"Napišite funkciju provjere valjanosti e-pošte za Python 3.11. Unos: niz. Izlaz: Istina ako je važeća, False u suprotnom. Pravila: prazan niz Netočno; Nije potrebna usklađenost s RFC-om, dovoljan je osnovni format. NE KORISTITE vanjski format biblioteka. Test od 5 uzoraka ispod bloka dodavanja funkcije: valjan, prazan, bez '@', dvostruki '@', sadrži samo razmake."
Razlika je u kontekstu. Snažan brz; Uključuje jezik, verziju, ulazno-izlazni ugovor, ograničenja i očekivana testiranja. Ova jedinstvena disciplina uvelike smanjuje rizik od halucinacija i nesigurnog koda.
Mini kućišta
Slučaj 1 — Izmišljena metoda. Programer čuje od umjetne inteligencije da postoji metoda koja se zove date.addBusinessDays(5) u biblioteci datuma i to mu je objašnjeno na pouzdan način. Gledajući dokumentaciju, vidi da ne postoji takva metoda, ispravan način je ručna petlja. Halucinacija je snimljena prije nego što krene u proizvodnju uz 10-minutnu provjeru.
Slučaj 2 — Gubitak rubnog stanja. AI proizvodi funkciju "izračunaj prosjek"; Djeluje kada se testira s 1000 redaka podataka. Međutim, kada je popis prazan, daje pogrešku dijeljenja s nulom. Budući da je inženjer dodao prazan ulazni test, on vidi i ispravlja pogrešku prije nego što se aktivira. Test stanja jednog ruba sprječava proizvodni alarm u 3 ujutro.
Slučaj 3 — Rizik privatnosti. Stručnjak se sprema zalijepiti datoteku sa stvarnim nizom veze baze podataka i API ključem u javni alat. Pamti politiku ustanove; Zamjenjuje tajne s <REDIGOVANO>, reducira kod na reprezentativan primjer i traži ga. Tako pomoć dobije za 5 minuta, ali podaci o identitetu ne izlaze.
Princip rada s tajnim kodom i podacima o identitetu
Najosjetljiviji dio softvera; tajne izvornog koda, informacije o identitetu (API ključ, lozinka, token) i korisničke/osobne podatke. Osnovno načelo: očistiti prije dijeljenja, pitati samo bit problema s reprezentativnim primjerom ako je moguće.
Anonimizirani uzorak upita: "Postoji pogreška u sljedećoj funkciji. Zamijenio sam stvarnu poslovnu logiku i skrivene konstante reprezentativnim vrijednostima (API ključ, nazivi tablica, generička imena polja). Problem: dobivam pogrešku Y u unosu X. Samo pronađite logičku pogrešku u ovom reprezentativnom kodu i objasnite ispravljenu verziju. [reprezentativni kod]"
Savjet: Ako ste u nedoumici, riješite ovaj test: "Bi li moja organizacija bila u nevolji da sam ovo javno napisao na forumu?" Čak i ako je odgovor nejasan, prvo ga razjasnite. Resetiranje je uvijek jeftinije od kasnijeg traženja curenja.
Uobičajene greške
- Korištenje izlaza bez kompajliranja/testiranja. "AI je napisao" nije opravdanje; Svaki dio koda se provjerava njegovim pokretanjem.
- Postavljanje zahtjeva bez konteksta. Ako jezik, verzija, ulaz-izlaz i ograničenja nisu navedeni, kod postaje generički i često nesiguran.
- Dijeljenje povjerljivih informacija bez razmišljanja. API ključ, lozinka i korisnički podaci ne bi se trebali izdati bez brisanja.
- Brkanje preciznog jezika s točnošću. Što AI sigurnije govori, to trebate biti oprezniji; Samouvjeren ton nije dokaz.
- Delegiranje odluke AI-u. Odluka o pokretanju proizvodnje, sigurnosti i arhitekture ostaje na inženjeru; AI samo proizvodi materijale.
Ukratko
AI ubrzava ponavljajuće i dugotrajne dijelove softverskog rada: okvirni kod, izradu testova, sužavanje grešaka, dokumentaciju. Međutim, odluka i odgovornost ostaje na inženjeru. Svaki izlaz mora proći tri razine kontrole (kompilacija/statika, testiranje, izvor). Pisanje upita s kontekstom i brisanje skrivenih informacija dvije su ključne navike koje ćemo ponavljati u svakoj jedinici ovog modula. Kada AI koristite disciplinirano, dobivate na brzini; kada ga koristite bez discipline, prenosite pogreške i ranjivosti u proizvodnju.
Zadatak aplikacije
Odaberite mali zadatak kodiranja iz vlastitog rada ili iz zamišljenog projekta (npr. funkcija provjere valjanosti). Prvo napišite slabi prompt i dobijte izlaz. Zatim primijenite moćni obrazac upita iz ove jedinice: dodajte jezik/verziju, ulazno-izlazni ugovor, ograničenja i očekivana testiranja. Stavite dva ispisa jedan pored drugog i napišite razliku. Zatim sastavite robusni izlaz i testirajte ga s najmanje tri rubna slučaja (nula, nula/negativan, neočekivani format) i zabilježite što ste pronašli u kojem testu.
popis za provjeru
- [ ] Dodao sam jezik, verziju i ulazno-izlazni ugovor u upit.
- [ ] Napisao sam "Ne izmišljaj, reci mi ako nisi siguran" i ograničenje opsega.
- [ ] Sastavio/pokrenuo sam kôd, provjerio statička upozorenja.
- [ ] Testirao sam s najmanje tri rubna kućišta.
- [ ] Provjerio sam korištene API-je iz službene dokumentacije.
- [ ] Izbrisao sam sve tajne kodove/vjerodajnice ili koristio poslovni alat.
- [ ] Potvrdio sam da odluka o pokretanju proizvodnje i sigurnosti ostaje na čovjeku.