Vienetas 1 / 12

Įvadas į dirbtinį intelektą ir patikros discipliną kompiuterių inžinerijoje

Pelnas:

  • Gebėjimas atskirti, kur AI suteikia tikrą greitį programinės įrangos kūrimo cikle, o kur sprendimas ir atsakomybė tenka inžinieriui
  • Gebėjimas taikyti trijų sluoksnių inžinerijos discipliną, kuri patikrina kiekvieną kodą ir dizainą, sukurtą kompiliuojant, testuojant ir peržiūrint.
  • Įpraskite išvalyti kontekstą, kad panaudotumėte dirbtinį intelektą nesidalindami konfidencialia šaltinio kodu, kredencialais ir klientų duomenimis

Žvelgiant į kompiuterių inžinieriaus dieną, daugumoje komandų vaizdas panašus: verslo užklausos supratimas, projektavimas, kodo rašymas, kažkieno kodo skaitymas, derinimas (procesas, kai išsiaiškinta, kodėl programa veikia netinkamai, ir tai ištaisoma), testų rašymas, dokumentacijos ruošimas, kodo peržiūra ir dalyvavimas susitikimuose. Kitaip tariant, laikas, skirtas tikram „inžineriniam sprendimui“, tai yra, ar sprendimas yra teisingas, saugus ir tvarus, sutrinka dėl pasikartojančio darbo. Čia pradeda veikti dirbtinis intelektas (sutrumpintai AI; programinė įranga, kuri veikia su tekstu ir kodu su dideliu kalbos modeliu). AI nepriima sprendimo už jus; Jis paruošia jus sprendimui, sukuria kodo skeletą, susiaurina klaidą ir pateikia prieš jus parengtą juodraštį. Šiame modulyje AI pozicionuosime ne kaip „automatinį programuotoją“, o kaip disciplinuotą porų programavimo partnerį, kurio išvestis yra sukompiliuojama, išbandoma ir peržiūrima kiekvieną kartą.

Šiame pirmajame skyriuje paaiškiname tris dalykus: Kuriuose programinės įrangos kūrimo gyvavimo ciklo etapuose (etapai, kuriuos programinė įranga pereina nuo idėjos iki gamybos: analizė, projektavimas, kodavimas, testavimas, diegimas, priežiūra) AI suteikia tikros vertės; kokius sprendimus griežtai turi priimti inžinierius; ir kokios yra tikrinimo ir konfidencialumo disciplinos, kurių turite laikytis tai darydami. Teisingai neįrengus šio stogo, tolesnių įrenginių technika gali tapti pavojinga; Nes programinės įrangos klaida vienu metu pasiekia milijonus vartotojų ir gali virsti saugumo spraga.

Sąvokos: Haliucinacijos: AI įtikinamas metodas, biblioteka, API arba elgesys, kuris iš tikrųjų neegzistuoja. Kontekstas: įvestis, kurią suteikiate AI (kodas, klaidos pranešimas, reikalavimas, apribojimai). Patikrinimas: Išvesties tikrinimas nepriklausomu būdu (kompiliavimas, testavimas, dokumentacija). Šios trys sąvokos yra viso modulio pagrindas.

Kuriose įmonėse yra AI Accelerator, kuriose įmonėse tai rizikinga?

Programinės įrangos darbų rezultatų spektras yra dvipusis. Viename gale yra grįžtami, mažos rizikos paruošiamieji darbai; Kitame gale yra sunkiai grąžinamos užduotys, kurios patenka į gamybos aplinką ir gali sukelti duomenų praradimą, saugumo spragas ar trikdžius. AI reikšmė skiriasi priklausomai nuo to, kur esate šiame spektre.

verslo tipas

AI indėlis

Inžinieriaus vaidmuo

Kodo skeletas / katilo plokštė

Greitas pasikartojančios struktūros generavimas

Logikos ir krašto būsenos valdymas

derinimas

Hipotezė ir galimų priežasčių sąrašas

Reprodukcija ir pagrindinės priežasties patvirtinimas

rašymo testai

Bandomasis juodraštis ir scenarijaus kūrimas

Prasmingas tvirtinimo ir apimties patikrinimas

pertvarkymas

Refaktoriaus pasiūlymas

Elgesio palaikymas atliekant bandymus

Dokumentacija

Pirmasis projektas ir struktūra

Teisingumo patikrinimas pagal kodą

Architektūrinis/saugumo sprendimas

Pasirinkimų sąrašas, privalumai ir trūkumai

Galutinis sprendimas ir atsakomybė

Taisyklė paprasta: AI išvesties rizika yra lygi žalai, kurią ji patirs, jei išvestis padarys klaidą. Neteisingas kintamojo pavadinimo pasiūlymas yra nekenksmingas; Netinkamas autentifikavimas (patikrinimas, ar vartotojas tikrai yra tas, kuo jis teigia esąs) daro visą sistemą pažeidžiama. Taigi pirmasis klausimas, kurį reikia užduoti prieš naudojant išvestį, yra toks: „Kas atsitiks, jei tai neteisinga, kas ir kada tai pastebės?

Atsargiai: AI sukuria sklandų ir patikimą kodą. Sklandumas negarantuoja tikslumo. Kalbos modelis gali patikimai sukurti funkcijos pavadinimą, kurio iš tikrųjų nėra, neteisingą parametrų seką ar net nesaugų šabloną. Programinėje įrangoje tai nelieka popieriuje; Jis kompiliuoja, paleidžiamas ir eksploatuojamas gamyboje.

Sprendimai, kuriuos reikia palikti inžinieriui

Kai kurie sprendimai niekada neturėtų būti visiškai automatizuoti; kelia techninę, teisinę ir etinę riziką:

  • Gamybos patvirtinimas: kodo išleidimas į gamybą ir atsakomybė už tai.
  • Saugumas ir architektūra: brangūs sprendimai, tokie kaip autentifikavimas, autorizavimas, šifravimas ir duomenų modelis.
  • Licencija ir autorių teisės: sukurto kodo naudojimas komerciniame gaminyje ir licencijos laikymasis.
  • Darbas su konfidencialiais duomenimis: operacijos su klientų duomenimis, šaltinio kodo paslaptimis ir tapatybės informacija.
Įspėjimas: net jei AI sako „šis kodas yra saugus ir paruoštas gamybai“, nepriimtina tai priimti be saugumo testavimo, kodo peržiūros ir patvirtinimo esant realiai apkrovai. Atliekant saugai svarbius darbus, dirbtinio intelekto išvestis niekada nepakeičia kompetentingo inžinieriaus patvirtinimo; Bet kokia išvada, dėl kurios priimamas sprendimas, prieš įgyvendinimą turi būti nepriklausomai patikrinta ir patvirtinta įgalioto inžinieriaus.

Tikrinimo disciplina: trijų sluoksnių valdymas

Taikykite tris valdymo lygius, kad dirbtinio intelekto išvestį naudotumėte kaip vyresnysis apžvalgininkas, o ne aklai. Tai yra pagrindinis refleksas, kurį kartosime visame modulyje.

  1. Kompiliavimas ir statinis tikrinimas: ar kodas iš tikrųjų kompiliuojamas / vykdomas? Ar yra tipo klaidų, nenaudojamų kintamųjų, neegzistuojančių API? Ką sako statinės analizės įrankis (įrankis, kuris tiria kodą jo nepaleidęs)?
  2. Nepriklausomas atkūrimas (testavimas): paleiskite kodą su mažais žinomais įėjimais ir pažiūrėkite, ar gaunate laukiamą išvestį. Išbandykite kraštinius atvejus (nulinis, nulis, neigiamas, didžiulis).
  3. Šaltinio patvirtinimas: kiekviena API, bibliotekos versija ir kalbos funkcija, kurią naudoja AI, turėtų būti patikrinta iš oficialių dokumentų.

Patvirtinimo raginimas (palengvina išvesties patikrinimą): "Išvardykite VISAS išorines bibliotekas, metodus ir kalbos funkcijas, kurias naudojate savo kode. Prie kiekvienos iš jų nurodykite, kurioje versijoje ji yra, ir pažymėkite, kad ji turi būti patvirtinta iš dokumentacijos. Nekurkite jokių API, dėl kurių nesate tikri; jei nesate tikri, aiškiai parašykite "nesate tikri". Taip pat išvardykite visus adresų atvejus kaip atskirą.

Kritikuokite savo kodo raginimą: "Kritiškai pažvelkite į ką tik parašytą kodą, tarsi jus pasamdęs vyresnysis inžinierius. Nurodykite konkrečius elementus pagal šias tris antraštes: (1) logikos / krašto klaidos, (2) saugumo rizika, (3) našumo ar skaitomumo problemos. Prie kiekvieno elemento parašykite „kodėl yra problema“ ir „siūlomas sprendimas“. Nerasti problemos. ją pagražinti“.

Silpnas raginimas / stiprus raginimas

WEAK:"Parašykite man naudotojo autentifikavimo funkciją." (Rezultatas: neaišku, kokia kalba, kuri taisyklė, kokia klaida; bendras kodas, dažnai nesaugus arba iš konteksto.)STRONG:"Parašykite el. pašto patvirtinimo funkciją, skirtą Python 3.11. Įvestis: eilutė. Išvestis: teisinga, jei galioja, kitaip klaidinga. Taisyklės: reikalinga tuščia eilutė. Būtina išorinė biblioteka, DONOT RUSE. 5 mėginių testas po funkcijos papildymo bloku: galiojantis, tuščias, be „@“, dvigubas „@“, tik tarpai.

Skirtumas yra kontekste. Galingas raginimas; Tai apima kalbą, versiją, įvesties-išvesties sutartį, apribojimus ir bandymo lūkesčius. Ši vienintelė disciplina labai sumažina haliucinacijų ir nesaugaus kodo riziką.

Mini dėklai

1 atvejis. Sugalvotas metodas. Kūrėjas iš AI girdi, kad datų bibliotekoje yra metodas, vadinamas date.addBusinessDays(5), ir tai paaiškinama užtikrintai. Žvelgdamas į dokumentaciją, jis mato, kad tokio metodo nėra, teisingas būdas yra rankinis ciklas. Haliucinacija užfiksuojama prieš pradedant gaminti, patikrinus 10 minučių.

2 atvejis – krašto būklės praradimas. AI sukuria funkciją „apskaičiuoti vidurkį“; Jis veikia, kai išbandoma su 1000 duomenų eilučių. Tačiau, kai sąrašas tuščias, tai suteikia dalybos iš nulio klaidą. Kadangi inžinierius pridėjo tuščios įvesties testą, jis mato ir ištaiso klaidą, kol ji pradeda veikti. Vieno krašto būklės bandymas apsaugo nuo gamybos pavojaus signalo 3 val.

3 atvejis. Privatumo rizika. Ekspertas ruošiasi įklijuoti failą su faktine duomenų bazės ryšio eilute ir API raktu į viešąjį įrankį. Prisimena įstaigos politiką; Jis pakeičia paslaptis <REDACTED>, sumažina kodą iki reprezentatyvaus pavyzdžio ir prašo jo. Taigi jis sulaukia pagalbos per 5 minutes, tačiau jo tapatybės informacija nepasirodo.

Darbo su slaptu kodu ir tapatybės informacija principas

Jautriausia programinės įrangos dalis; šaltinio kodo paslaptys, tapatybės informacija (API raktas, slaptažodis, prieigos raktas) ir kliento/asmens duomenys. Pagrindinis principas: išvalykite prieš dalindamiesi, jei įmanoma, paklauskite tik problemos esmės su reprezentatyviu pavyzdžiu.

Anoniminis raginimo šablonas: "Tokioje funkcijoje yra klaida. Tikrąją verslo logiką ir paslėptas konstantas pakeičiau reprezentatyviomis reikšmėmis (API raktu, lentelių pavadinimais, laukų pavadinimais generic). Problema: įvestyje X gaunu klaidą Y. Tiesiog suraskite logikos klaidą šiame reprezentaciniame kode ir paaiškinkite ištaisytą versiją. [reprezentacinis kodas]"

Patarimas: jei abejojate, atlikite šį testą: „Ar mano organizacijai kiltų problemų, jei tai parašyčiau viešai forume?“ Net jei atsakymas neaiškus, pirmiausia jį išvalykite. Nustatyti iš naujo visada yra pigiau nei vėliau ieškoti nuotėkio.

Dažnos klaidos

  • Išvesties naudojimas be kompiliavimo / testavimo. „AI parašė“ nėra pateisinimas; Kiekviena kodo dalis patikrinama ją paleidžiant.
  • Prašymų teikimas be konteksto. Jei nenurodyta kalba, versija, įvestis-išvestis ir apribojimai, kodas tampa bendras ir dažnai nesaugus.
  • Dalintis konfidencialia informacija negalvojant. API raktas, slaptažodis ir kliento duomenys neturėtų būti išleisti jų neišvalius.
  • Painioja tikslią kalbą su tikslumu. Kuo labiau pasitikintis AI kalba, tuo atsargesnis turėtumėte būti; Pasitikintis tonas nėra įrodymas.
  • Sprendimo delegavimas AI. Sprendimas pradėti gamybą, saugumą ir architektūrą lieka inžinieriui; AI gamina tik medžiagas.

Apibendrinant

AI pagreitina pasikartojančias ir daug laiko reikalaujančias programinės įrangos darbo dalis: skeleto kodą, testo rengimą, klaidų susiaurinimą, dokumentaciją. Tačiau sprendimas ir atsakomybė lieka inžinieriui. Kiekviena išvestis turi praeiti tris valdymo lygius (kompiliavimas / statinis, testavimas, šaltinis). Rašyti raginimus su kontekstu ir išvalyti paslėptą informaciją yra du pagrindiniai įpročiai, kuriuos pakartosime kiekviename šio modulio skyriuje. Kai DI naudojate disciplinuotai, įgyjate greitį; kai naudojate jį be disciplinos, į gamybą pernešate klaidų ir pažeidžiamumų.

Taikymo užduotis

Pasirinkite nedidelę kodavimo užduotį iš savo darbo arba iš įsivaizduojamo projekto (pvz., patvirtinimo funkcija). Pirmiausia parašykite silpną raginimą ir gaukite išvestį. Tada pritaikykite galingą šio įrenginio raginimo šabloną: pridėkite kalbą / versiją, įvesties-išvesties sutartį, apribojimus ir patikrinkite lūkesčius. Padėkite du spaudinius vienas šalia kito ir parašykite skirtumą. Tada sukompiliuokite patikimą išvestį ir patikrinkite ją bent trimis kraštiniais atvejais (nulinis, nulis / neigiamas, netikėtas formatas) ir atkreipkite dėmesį, ką radote kuriame teste.

kontrolinis sąrašas

  • [ ] Prie raginimo pridėjau kalbą, versiją ir įvesties-išvesties sutartį.
  • [ ] Parašiau „Nesugalvok, pasakyk, jei nesate tikras“ ir apimties apribojimą.
  • [ ] Sudariau/paleidau kodą, patikrinau, ar nėra statinių įspėjimų.
  • [ ] Išbandžiau su mažiausiai trimis kraštiniais atvejais.
  • [ ] Patikrinau naudojamas API iš oficialios dokumentacijos.
  • [ ] Išvaliau bet kokį slaptą kodą / kredencialus arba naudojau įmonės įrankį.
  • [ ] Patvirtinau, kad sprendimas pradėti gaminti ir saugumas lieka žmogui.