Vienetas 1 / 12

Dirbtinis intelektas programinės įrangos komandoms: veikimo modelis ir ribos

Pelnas:

  • Gebėjimas paaiškinti, kaip kodavimo asistentas veikia kaip kalbos modelis ir žetono, kontekstinio lango, haliucinacijų sąvokas.
  • Gebėjimas atskirti programinės įrangos užduotis, kuriose AI yra stiprus ir silpnas, naudojant mentalinį žemėlapį
  • Gebėjimas taikyti pagrindinį darbo ciklą siūlyti-gaminti-patikrinti savo užduotims

Programinės įrangos kūrėjo diena retai praleidžiama „rašant kodą nuo nulio“. Realiu laiku; Skaityti kažkieno parašytą kodą, bandyti atkurti klaidą, nuskaityti žurnalą (logo eilutės, kurias sukuria programa veikiant), rašyti testus, rašyti PR (pull request – sujungimo užklausa, kur pateikiamas kodo pakeitimas komandos peržiūrai) paaiškinimo ir dokumentacijos atnaujinimas. Dirbtinis intelektas (AI) yra greičio daugiklis, galintis paliesti beveik visus šiuos neregėtus darbus. Tačiau pirmoji sąlyga norint jį saugiai naudoti – teisingai suprasti, kas tai yra ir kas ne.

Šiame skyriuje pirmiausia paaiškiname pagrindinę kodavimo asistento technologiją paprasta kalba; tada sukuriame modelio privalumų ir silpnybių mentalinį žemėlapį; Galiausiai nustatome pagrindinę darbo discipliną, kurią naudosime visame modulyje: siūlykite, gaminkite, patikrinkite. Šie trys žingsniai yra kitų vienuolikos vienetų pagrindas.

Pastaba: Šis modulis yra bendrasis mokymas. Saugumui svarbioje programinėje įrangoje (mokėjimų apdorojimas, sveikatos priežiūra, autentifikavimas, kritinė infrastruktūra) AI išvestis nepakeičia kvalifikuoto inžinieriaus peržiūros ir patvirtinimo. AI yra asistentas; Pasirašęs asmuo yra inžinierius.

Ką iš tikrųjų veikia kodavimo asistentas?

Dauguma kodavimo asistentų yra sukurti remiantis dideliu kalbos modeliu (LLM – dirbtinis intelektas, apmokytas naudoti didžiulius kiekius teksto ir kodo, kuris numato kitą greičiausiai „gabalą“). Modelis „nesupranta“ kodo kaip žmogus; Jis sukuria labiausiai tikėtiną jūsų pateikto konteksto tęsinį, remiantis modeliais, kuriuos jis išmoksta iš daugybės pavyzdžių. Šis iš pažiūros paprastas mechanizmas duoda stebėtinai įgudusių rezultatų praktikoje – nes daugumą programinės įrangos sudaro pasikartojantys šablonai: HTTP užklausa, ciklas, nulinis patikrinimas, bandymo šablonas.

Čia svarbūs trys terminai. Žetonas yra mažiausias vienetas, kurį modelis apdoroja dalydamas tekstą; Tai apytiksliai kelios raidės arba žodžio dalis. Konteksto langas yra žetonų kiekis, kurį modelis gali „matyti“ vienu metu; Jūsų kodas, klaidos pranešimas ir instrukcija turi tilpti šiame lange. Raginimas yra visos instrukcijos ir kontekstas, kurį pateikiate modeliui. Gautos išvesties kokybė tiesiogiai priklauso nuo šių dviejų: kuo geresnį kontekstą ir aiškesnes instrukcijas suteiksite modeliui, tuo geresnį rezultatą gausite. Netinkama įvestis sukuria blogą išvestį, net jei tai išmanusis modelis – klasikinė programinės įrangos taisyklė „šiukšles įvesti, šiukšles išvežti“ taip pat taikoma dirbtiniam intelektui.

Stiprybių ir silpnybių žemėlapis

Norint nukreipti AI į reikiamus darbus, būtina žinoti, kur jis šviečia ir kur suklumpa. Įsiminę šį žemėlapį, su kiekviena kita misija susimąstysite: „Ar turėčiau šį darbą perduoti dirbtiniam intelektui, ar tai padaryti pats? Tai leidžia atsakyti į klausimą per kelias sekundes.

Jo pranašumai yra šie: generuoti pagrindinį kodą, verčiant iš vienos kalbos į kitą, rašyti reguliariąją išraišką (regex), aprašyti funkciją, sukurti bandomąjį skeletą, interpretuoti klaidos pranešimą, rengti dokumentaciją, siūlyti kintamųjų / funkcijų pavadinimus ir nedidelius pertvarkymus (kodo struktūros tobulinimas nekeičiant jo elgesio).

Trūkumai: žinoti savo įmonei būdingas verslo taisykles, atsiminti visą kodo bazę, realiai paleisti ir tikrinti kodą, tiksliai žinoti naujausias bibliotekos versijas, aptikti saugumo spragas su šimtaprocentine garantija. Pavojingiausia yra haliucinacijos: modelis labai įtikinama kalba sugalvoja neegzistuojančią funkciją, biblioteką arba API (sąsają, kuri leidžia keistis duomenimis tarp programų). Šią riziką iš tikrųjų galima paversti jūsų naudai, nes kodas, skirtingai nei paprastas tekstas, gali būti patikrintas, ar jis „veikia“ – tiesiog nepraleiskite patvirtinimo žingsnio.

Misijos tipas

AI vaidmuo

vyro vaidmuo

Pagaminti katilą/skeletą

gamina juodraštį

Prisitaiko, peržiūri

Kodo aprašymas

Pateikiama greita santrauka

Patikrina svarbiausią kodo dalį

rašymo testai

Case siūlo

Patvirtina aprėptį ir tikslumą

Saugumui svarbi logika

naudinga idėja

Sprendimai ir atsakomybė visiškai priklauso nuo žmonių.

API / bibliotekos naudojimas

Sugeneruoja pavyzdį

Tikrina egzistavimą ir versiją

architektūrinis sprendimas

Įvairių variantų

Atsirenka ir ginasi žinodamas kontekstą

Žingsnis po žingsnio: pagrindinis darbo ciklas

  1. Išsiaiškinkite užduotį. Jei negalite vienu sakiniu parašyti to, ko norite, negali ir modelis. Kuo anksčiau neapibrėžtumas prasiskverbia į įvestį, tuo labiau jis auga išvestyje.
  2. Pateikite kontekstą. Į raginimą pridėkite atitinkamą kodą, visą klaidos pranešimą, kalbos / sistemos versiją ir apribojimus. Nesakykite „pataisyti“, sakykite „Python 3.11, FastAPI 0.110; ši funkcija duoda 500 klaidą, ji sprogsta, kai užklausos turinys yra tuščias“.
  3. Primetimo vaidmuo ir formatas. Tokios sistemos kaip „Esate vyresnysis „Go“ kūrėjas; tiesiog nurodykite kodą ir dviejų sakinių pagrindimą“ sutelkia išvestį.
  4. Paprašykite mažų. Suskirstykite jį į žingsnius, o ne į vieną milžinišką prašymą; Patikrinkite kiekvieną veiksmą atskirai. Dideli pakeitimai yra rizikingi, nes juos sunku patikrinti ir jie linkę slėpti klaidas.
  5. Patvirtinti. Paleiskite, išbandykite, perskaitykite vizualiai. Nepatvirtintas AI kodas yra „eskizas“, o ne „sprendimas“. Tai yra labiausiai neaptartas ciklo žingsnis.

Trys mini dėklai

1 atvejis – sutaupoma laiko tikrai, bet kukli. Kai komanda sukūrė naujus CRUD (sukurti-skaityti-atnaujinti-trinti) galinius taškus su AI, pirmojo juodraščio laikas sumažėjo nuo maždaug 40 minučių iki 8 minučių. Tačiau su peržiūra ir bandymais bendras laikas buvo 25 minutės; taigi tikrasis pelnas yra nuo 40 iki 25, apie 38%. Šis rodiklis, matuojamas vietoj lūkesčių „mes pagreitėjome 10 kartų“, yra tvarus pelnas.

2 atvejis – haliucinacijos kainuoja brangiai. Kūrėjas naudojo AI siūlomą requests.get_json() iškvietimą be patvirtinimo; Tokio metodo nebuvo (tiksliai response.json()). Nesukompiliavus kodo, buvo prarasta 20 minučių. Paprastas "ar šis metodas tikrai egzistuoja?" patikrinimas iš naujo nustatys nuostolius.

3 atvejis – geras kontekstas padvigubina našumą. Dėl tos pačios klaidos vienas kūrėjas tiesiog parašė „Gaunu klaidą“, o kitas pridėjo visą kamino pėdsaką, versiją ir įvesties pavyzdį. Pastarasis iš pirmo karto gavo teisingą sprendimą; Pirmasis praleido tris posūkius. Skirtumas buvo ne modelyje, o įvestyje.

Keturi kopijuojami šablonai

Bendros paskirties, galingas paleidimo raginimas:

Vaidmuo: esate patyręs {{language}} kūrėjas.Užduotis: {{what_want}}Kontekstas:- Struktūra / versija: {{framework_and_version}}- Apribojimai: {{našumo, stiliaus, priklausomybės taisyklės}}Taisyklės: - Nenaudokite neegzistuojančios bibliotekos / funkcijos; Jei nesate tikri, pažymėkite kaip „patikrinti“. - Pirmiausia pateikite trumpą planą, tada kodą, tada 2 sakinius pagrindimo. - Sukurkite patikrintą, veikiantį kodą.

Norėdami filtruoti neapibrėžtumą atgal į modelį:

Prieš spręsdami toliau pateiktą užduotį, kaip klausimus išvardykite BENT 3 punktus, kurių jums trūksta arba kurie yra neaiškūs. NERAŠYKITE kodo prieš man atsakant.Užduotis: {{užduotis}}

Jei norite, kad išvestis būtų savaime patikrinta:

Jūs sukūrėte šį kodą. Dabar pakeiskite savo vaidmenį ir kritikuokite šį kodą: - Išvardykite 3 atvejus (krašto atvejus), kurie gali neveikti. - Ar yra kokių nors API / funkcijų, kurias galėjote sukurti? Pažymėti. – Pateikite pataisytą versiją.Kodas:{{kodas}}

Norėdami suskirstyti sprendimą į parinktis:

Pasiūlykite 2–3 {{problem}} sprendimo būdus. Kiekvienam: trumpas aprašymas, pliusas/minusas, kada pasirinkti. Pateikite lentelės pavidalu. NESIRINKITE už mane; tiesiog paaiškink variantą.

Silpnas raginimas / Stiprus raginimas

Silpnas: „Pataisykite šio kodo klaidą“. (Kokia klaida? Kokia kalba? Kokio elgesio tikimasi?)
Stiprus: "Python 3.11 / FastAPI 0.110. Šis galutinis taškas grąžina 500 su KeyError, kai užklausos turinys yra tuščias; noriu, kad jis grąžintų 400 ir prasmingą pranešimą tuščiame turinyje. Pirmiausia paaiškinkite priežastį, tada pataisykite funkciją, tada parašykite šio scenarijaus testą. [kodas]"

Galinga versija; Jame pateikiama kalba, versija, faktinė klaida, numatoma elgsena ir išvesties formatas. Modelis nebereikia prognozuoti.

Dažnos klaidos

  • Pasitikėjimas be patvirtinimo. Dažniausia ir brangiausia klaida. Nesakykite „išspręsta“, kol kodas nebus sukompiliuotas ir išbandytas.
  • Klausimų uždavimas be konteksto. Atsakymas be versijos, klaidos teksto ir apribojimų yra bendras ir dažnai klaidingas.
  • Vienas didžiulis prašymas. Jei negalite vienu metu paprašyti ir peržiūrėti 300 eilučių produkcijos, klaidos tampa nematomos.
  • Klaidinantis modelio pasitikėjimą savimi kaip įrodymą. AI gali užtikrintai pasakyti ką nors ne taip; Tonas nėra tikslumo rodiklis.
  • Atsitiktinai įklijuojama įmonės paslaptis. Privatūs raktai, klientų duomenys ar privatus šaltinio kodas neturėtų būti įvedami į nepatvirtintus įrankius (šią temą nagrinėsime 10 skyriuje).
Patarimas: kiekvieną AI išvestį vertinkite kaip „tai juodraštį“. Šis vienintelis protinis įprotis užgesina daugumą rizikos, kurią matysite per visą modulį.

Apibendrinant

Kodavimo asistentas yra kalbos modelis, numatantis kitą labiausiai tikėtiną fragmentą; Jis nesupranta kodo, sukuria šablonus. Štai kodėl jis yra stiprus pasikartojančiuose, formuliniuose darbuose; Jis turėtų būti naudojamas atsargiai atliekant darbus, kuriuos reikia patvirtinti atsižvelgiant į jūsų kontekstą. Didžiausia rizika yra haliucinacijos, o vienintelis priešnuodis yra patikrinimas. Drausmė, kurios laikysimės visame modulyje, yra aiški: paaiškinkite užduotį, pateikite kontekstą, paprašykite mažų dalykų, patvirtinkite kiekvieną rezultatą.

Taikymo užduotis

Užsirašykite tris programinės įrangos užduotis, kurias atlikote praėjusią savaitę (pvz., klaidų taisymas, testas, README naujinimas). Pažvelkite į kiekvieno „stipriųjų ir silpnųjų pusių žemėlapį“ ir vienu sakiniu apibūdinkite, koks būtų jūsų ir AI vaidmuo, jei tai padarytų AI. Tada nurodykite vieną iš šių užduočių AI naudodami aukščiau pateiktą „pradžios raginimo“ šabloną ir paleiskite bei patikrinkite išvestį; Atkreipkite dėmesį, kiek minučių sutaupėte ir kiek klaidų turėjote ištaisyti.

kontrolinis sąrašas

  • [ ] Supratau, kad LLM kuria šablonus, o ne „supranta“ kodą.
  • [ ] Gebu vienu sakiniu paaiškinti žetono, kontekstinio lango ir raginimo sąvokas.
  • [ ] Galiu atskirti užduočių tipus, kai dirbtinis intelektas yra stiprus ir silpnas.
  • [ ] Aš žinau, kas yra haliucinacijos ir vienintelis priešnuodis yra patikrinimas.
  • [ ] Ciklą „siūlyti, gaminti, patikrinti“ pritaikiau savo užduočiai.
  • [ ] Konkrečiu pavyzdžiu galiu parodyti skirtumą tarp stipraus raginimo ir silpno raginimo.