Vienība 1 / 12

Mākslīgais intelekts programmatūras komandām: darba modelis un ierobežojumi

Ieguvumi:

  • Spēja izskaidrot, kā kodēšanas palīgs darbojas kā valodas modelis, kā arī marķiera, konteksta loga, halucinācijas jēdzienus
  • Spēja atšķirt programmatūras uzdevumus, kuros AI ir spēcīgs un vājš, izmantojot mentālo karti
  • Spēja pielietot pamata darba ciklu ierosināt-ražot-pārbaudīt saviem uzdevumiem

Programmatūras izstrādātāja diena reti tiek pavadīta, "rakstot kodu no nulles". Reālā laikā; Kāda cita rakstītā koda nolasīšana, kļūdas mēģinājums reproducēt, žurnāla skenēšana (loga rindas, ko rada aplikācija palaišanas laikā), testu rakstīšana, PR (pull request – sapludināšanas pieprasījums, kur koda maiņa tiek iesniegta komandas izskatīšanai) skaidrojuma un dokumentācijas atjaunināšana. Mākslīgais intelekts (AI) ir ātruma pavairotājs, kas var pieskarties gandrīz visiem šiem neredzētajiem darbiem. Bet pirmais nosacījums drošai lietošanai ir pareizi saprast, kas tas ir un kas nav.

Šajā nodaļā mēs vispirms vienkāršā valodā izskaidrojam kodēšanas palīga pamatā esošo tehnoloģiju; tad mēs izveidojam modeļa stipro un vājo pušu mentālo karti; Visbeidzot, mēs izveidojam pamata darba disciplīnu, ko izmantosim visā modulī: ierosināt, ražot, pārbaudīt. Šie trīs soļi ir nākamo vienpadsmit vienību mugurkauls.

Piezīme: Šis modulis ir vispārīga apmācība. Drošībai kritiskā programmatūrā (maksājumu apstrāde, veselības aprūpe, autentifikācija, kritiskā infrastruktūra) mākslīgā intelekta izvade nevar aizstāt kvalificēta inženiera pārskatīšanu un apstiprināšanu. AI ir palīgs; Parakstītājs ir inženieris.

Ko patiesībā dara kodēšanas palīgs?

Lielākā daļa kodēšanas palīgu ir veidoti uz liela valodas modeļa (LLM — AI, kas apmācīts, izmantojot milzīgu teksta un koda daudzumu, kas paredz nākamo visticamāko “gabalu”). Modelis kodu "nesaprot" kā cilvēks; Tas ģenerē visticamāko jūsu sniegtā konteksta turpinājumu, pamatojoties uz modeļiem, kas iegūti no milzīga piemēru kopuma. Šis šķietami vienkāršais mehānisms praksē dod pārsteidzoši prasmīgus rezultātus, jo lielākā daļa programmatūras sastāv no atkārtotiem modeļiem: HTTP pieprasījums, cilpa, nulles pārbaude, testa modelis.

Šeit svarīgi ir trīs termini. Token ir mazākā vienība, ko modelis apstrādā, dalot tekstu; Tas ir aptuveni daži burti vai vārda daļa. Konteksta logs ir tokenu skaits, ko modelis var "redzēt" uzreiz; Jūsu kodam, kļūdas ziņojumam un norādījumiem ir jāietilpst šajā logā. Uzvedne ir visi norādījumi un konteksts, ko sniedzat modelim. Iegūtās produkcijas kvalitāte ir tieši atkarīga no šiem diviem — jo labāku kontekstu un skaidrākus norādījumus modelim sniedzat, jo labāku rezultātu iegūsit. Slikta ievade rada sliktu izvadi, pat ja tas ir viedais modelis — klasiskais programmatūras noteikums “atkritumi iekšā, atkritumi ārā” attiecas arī uz AI.

Stipro un vājo pušu karte

Lai AI novirzītu uz pareizajiem darbiem, ir jāzina, kur tas spīd un kur paklūp. Šīs kartes iegaumēšana liks jums aizdomāties katrā nākamajā misijā: "Vai man vajadzētu uzticēt šo darbu AI vai darīt to pašam?" Tas ļauj jums atbildēt uz jautājumu dažu sekunžu laikā.

Tās stiprās puses ir šādas: standarta koda ģenerēšana, tulkošana no vienas valodas uz citu, regulāras izteiksmes (regex) rakstīšana, funkcijas aprakstīšana, testa skeleta izveide, kļūdas ziņojuma interpretācija, dokumentācijas izstrāde, mainīgo/funkciju nosaukumu ierosināšana un nelielas pārveidošanas (koda struktūras uzlabošana, nemainot tā uzvedību).

Vājās puses: uzņēmumam specifisko biznesa noteikumu pārzināšana, visas koda bāzes atcerēšanās, koda faktiskā palaišana un pārbaude, jaunāko bibliotēkas versiju pilnīga pārzināšana, drošības ievainojamību noteikšana ar simtprocentīgu garantiju. Bīstamākā lieta ir halucinācijas: modelis ļoti pārliecinošā valodā izgudro neesošu funkciju, bibliotēku vai API (interfeisu, kas nodrošina datu apmaiņu starp lietojumprogrammām). Šo risku faktiski var izmantot savā labā, jo kodu, atšķirībā no vienkārša teksta, var pārbaudīt, lai noskaidrotu, vai tas “darbojas” — vienkārši neizlaidiet verifikācijas darbību.

Misijas veids

AI loma

vīrieša loma

Izgatavot katlu/skeletu

ražo melnrakstu

Pielāgojas, pārskati

Koda apraksts

Sniedz ātru kopsavilkumu

Pārbauda koda kritisko daļu

kontroldarbu rakstīšana

Lieta iesaka

Apstiprina pārklājumu un precizitāti

Drošībai kritiska loģika

noderīga ideja

Lēmumi un atbildība pilnībā gulstas uz cilvēku.

API/bibliotēkas lietojums

Ģenerē paraugu

Pārbauda esamību un versiju

arhitektūras lēmums

Savas iespējas

Atlasa un aizstāv, zinot kontekstu

Soli pa solim: pamata darba cikls

  1. Precizējiet uzdevumu. Ja tu nevari vienā teikumā uzrakstīt to, ko gribi, nevar arī modelis. Jo agrāk nenoteiktība iesūcas ievadā, jo lielāka tā pieaug izejā.
  2. Dodiet kontekstu. Uzvednei pievienojiet attiecīgo kodu, pilnu kļūdas ziņojumu, valodas/ietvara versiju un ierobežojumus. Nesakiet "labot šo", sakiet "Python 3.11, FastAPI 0.110; šī funkcija rada kļūdu 500, tā eksplodē, kad pieprasījuma pamatteksts ir tukšs".
  3. Uzspiešanas loma un formāts. Tāds ietvars kā “Jūs esat vecākais Go izstrādātājs; vienkārši ievadiet kodu un divu teikumu pamatojums” koncentrējas uz rezultātu.
  4. Jautājiet mazo. Sadaliet to soļos, nevis vienā milzīgā pieprasījumā; Pārbaudiet katru darbību atsevišķi. Lielas izmaiņas ir riskantas, jo tās ir grūti pārbaudīt un var slēpt kļūdas.
  5. Pārbaudīt. Palaidiet to, pārbaudiet, izlasiet vizuāli. Nepārbaudīts AI kods ir "skice", nevis "risinājums". Šis ir cikla visvairāk neapspriežamais solis.

Trīs mini futrāļi

1. gadījums — laika ietaupījums ir reāls, bet neliels. Kad komanda izveidoja jaunus CRUD (Izveidot-Lasīt-Atjaunināt-Dzēst) galapunktus ar AI, pirmā uzmetuma laiks samazinājās no aptuveni 40 minūtēm līdz 8 minūtēm. Tomēr ar pārskatīšanu un testēšanu kopējais laiks bija 25 minūtes; tātad reālais ieguvums ir no 40 līdz 25, aptuveni 38%. Šis rādītājs, ko mēra cerības "mēs esam paātrinājuši 10 reizes" vietā, ir ilgtspējīgs ieguvums.

2. gadījums — halucinācijas ir dārgas. Izstrādātājs izmantoja AI ieteikto izsaukumu requests.get_json() bez validācijas; Šādas metodes nebija (precīzi response.json()). Kad kods netika apkopots, tika zaudētas 20 minūtes. Vienkāršs "vai šī metode patiešām pastāv?" verifikācija atiestatītu zaudējumus.

3. gadījums — labs konteksts dubulto rezultātu. Par to pašu kļūdu viens izstrādātājs vienkārši uzrakstīja "Es saņemu kļūdu", bet otrs pievienoja pilnu steka izsekošanu, versiju un ievades paraugu. Pēdējais ieguva pareizo risinājumu pirmajā mēģinājumā; Pirmais pavadīja trīs apgriezienus. Atšķirība nebija modelī, bet gan ievadē.

Četras kopējamas veidnes

Universāla, jaudīga palaišanas uzvedne:

Loma: Jūs esat pieredzējis {{language}} izstrādātājs.Uzdevums: {{what_want}}Konteksts:- Ietvars/versija: {{framework_and_version}}- Ierobežojumi: {{veiktspēja, stils, atkarības noteikumi}}Noteikumi:- Neizmantojiet neesošu bibliotēku/funkciju; Ja neesat pārliecināts, atzīmējiet to kā "pārbaudīt". - Vispirms sniedziet īsu plānu, pēc tam kodu, pēc tam 2 teikumus pamatojuma. - Izveidojiet pārbaudāmu, strādājošu kodu.

Lai modelī filtrētu nenoteiktību:

Pirms tālāk norādītā uzdevuma risināšanas kā jautājumus uzskaitiet VISMAZ 3 punktus, kas jums šķiet iztrūkstoši vai neskaidri. NERAKSTI kodu, pirms es atbildu.Uzdevums: {{uzdevums}}

Lai veiktu izvades pašpārbaudi:

Jūs esat izveidojis šādu kodu. Tagad mainiet savu lomu un kritizējiet šo kodu: - Norādiet 3 gadījumus (malas gadījumus), kas var nedarboties. - Vai ir kādas API/funkcijas, kuras varējāt izdomāt? Atzīmēt. — norādiet labotu versiju.Kods:{{kods}}

Lai sadalītu lēmumu opcijās:

Iesakiet 2–3 risinājuma pieejas {{problēma}}. Katram: īss apraksts, plus/mīnuss, kad izvēlēties. Sniedziet tabulas veidā. NEIZVĒLIES manā vietā; vienkārši precizējiet opciju.

Vāja uzvedne / spēcīga uzvedne

Vāji: "Novērsiet kļūdu šajā kodā." (Kura kļūda? Kura valoda? Kāda ir sagaidāmā uzvedība?)
Spēcīgs: "Python 3.11 / FastAPI 0.110. Tālāk norādītais galapunkts atgriež 500 ar KeyError, kad pieprasījuma pamatteksts ir tukšs; es vēlos, lai tas atgrieztu 400 un jēgpilnu ziņojumu tukšā pamattekstā. Vispirms izskaidrojiet iemeslu, pēc tam norādiet laboto funkciju, pēc tam uzrakstiet šī scenārija testu. [kods]."

Jaudīga versija; Tas norāda valodu, versiju, faktisko kļūdu, paredzamo darbību un izvades formātu. Modelim vairs nav jāprognozē.

Biežas kļūdas

  • Uzticēšanās bez verifikācijas. Visizplatītākā un dārgākā kļūda. Nesakiet "atrisināts", kamēr kods nav apkopots un pārbaudīts.
  • Jautājumu uzdošana bez konteksta. Atbilde bez versijas, kļūdas teksta un ierobežojumiem ir vispārīga un bieži vien nepareiza.
  • Viens milzīgs lūgums. Ja nevar uzreiz pieprasīt un pārskatīt 300 līniju produkciju, kļūdas kļūst neredzamas.
  • Maldīties modeles pašapziņu kā pierādījumu. AI var droši pateikt kaut ko nepareizi; Tonis nav precizitātes rādītājs.
  • Nejauši ielīmējot uzņēmuma noslēpumu. Privātās atslēgas, klientu datus vai privāto pirmkodu nedrīkst ievadīt neapstiprinātos rīkos (šajā tēmā mēs iedziļināsimies 10. nodaļā).
Padoms. Uztveriet katru AI izvadi kā "šis ir melnraksts". Šis vienīgais garīgais ieradums dzēš lielāko daļu risku, ko redzēsit visā modulī.

Rezumējot

Kodēšanas palīgs ir valodas modelis, kas paredz nākamo visticamāko fragmentu; Tas nesaprot kodu, tas rada modeļus. Tāpēc viņš ir spēcīgs atkārtotos, formulētos darbos; Tas jālieto piesardzīgi darbam, kam nepieciešama pārbaude, kas ir specifiska jūsu kontekstam. Lielākais risks ir halucinācijas, un vienīgais pretlīdzeklis ir pārbaude. Disciplīna, ko mēs ievērosim visā modulī, ir skaidra: noskaidrojiet uzdevumu, sniedziet kontekstu, pieprasiet nelielu, apstipriniet katru nodevumu.

Lietojumprogrammas uzdevums

Pierakstiet trīs programmatūras uzdevumus, ko veicāt pagājušajā nedēļā (piemēram, kļūdu labojums, pārbaude, README atjauninājums). Apskatiet katra stipro un vājo pušu karti un vienā teikumā aprakstiet, kāda būtu jūsu un AI loma, ja AI darītu to. Pēc tam dodiet vienu no šiem uzdevumiem AI, izmantojot iepriekš redzamo veidni “sākt uzvedni”, palaidiet un pārbaudiet izvadi; Ņemiet vērā, cik minūtes esat ietaupījis un cik kļūdu jums bija jāizlabo.

kontrolsaraksts

  • [ ] Es sapratu, ka LLM ražo modeļus, nevis "saprot" kodu.
  • [ ] Es varu izskaidrot marķiera, konteksta loga un uzvednes jēdzienus vienā teikumā.
  • [ ] Es varu atšķirt uzdevumu veidus, kuros AI ir spēcīgs un vājš.
  • [ ] Es zinu, kas ir halucinācijas, un vienīgais pretlīdzeklis ir pārbaude.
  • [ ] Ciklu "ierosināt, ražot, pārbaudīt" es pielāgoju savam uzdevumam.
  • [ ] Es varu parādīt atšķirību starp spēcīgu uzvedni un vāju uzvedni konkrētā piemērā.