Več zagonskih podjetij tekmuje v razvoju modelov, ki bi lahko sestavljali vse boljšo programsko opremo. Trdijo, da je to najkrajša pot do splošne umetne inteligence.

Will Douglas
Vprašajte ljudi, ki razvijajo splošno umetno inteligenco (USI), za kaj je ta trenutno uporabna – kaj jih res žene –, in mnogi bodo odgovorili, da pisanje računalniške kode.
»To je nekaj zelo vznemirljivega za razvijalce,« je pojasnil Jared Kaplan, vodja znanstvenikov v Anthropicu, družbeno koristnem zagonskem podjetju. »Radi bi resnično doumeli, kaj je narobe s kodo, in jo popravili.«
Copilot, orodje, ki so ga razvili poleg velikih jezikovnih modelov OpenAI in ga je leta 2022 z Microsoftovo podporo predstavila platforma GitHub, danes uporabljajo milijoni razvijalcev po vsem svetu, nadaljnji milijoni pa se za pomoč obračajo na splošne klepetalnike, kot so Antrhopicov Claude, ChatGPT podjetja OpenAI, in na Gemini Google DeepMinda.
»Danes več kot četrtino vseh novih računalniških kod v Googlu ustvari umetna inteligenca (UI), nato pa jih pregledajo in potrdijo inženirji,« je povedal Alphabetov direktor Sundar Pichai. »Našim inženirjem pomaga, da naredijo več in hitreje napredujejo.« Pričakujte, da bodo druga tehnološka podjetja sledila tem zgledom, če jim že ne.
Umetnointeligenčnih orodij za pisanje računalniške kode ne ponujajo le velike živine, temveč je na ta živahni trg vstopilo tudi kup novih zagonskih podjetij. Novinci, kot so Zencoder, Merly, Cosine, Tessl (ki je nekaj mesecev po ustanovitvi postal vreden 750 milijonov dolarjev) in Poolside (njegova vrednost je dosegla tri milijarde dolarjev, še preden je začel prodajati svoj prvi izdelek), se vsi potegujejo za svoj kos pogače. »Zdi se, da so razvijalci pripravljeni plačevati za inteligentna orodja,« je komentiral Nathan Benaich, analitik v investicijskem podjetju Air Street Capital. »In tako je računalniška koda eden najlažjih načinov za unovčenje UI.«
Takšna podjetja obljubljajo, da bodo nadgradila asistente za kodiranje. V nasprotju z večino obstoječih orodij razvijalcem ne nudi le nekakšnega turbo samodejnega izpolnjevanja, temveč zmore izdelati prototipe, jih preizkusiti in popraviti. Razvijalci bi se tako lahko preobrazili v nadzornike, ki bodo morali več časa nameniti pregledovanju in popravkom, kot če bi računalniško kodo od začetka do konca napisali sami.
To pa še ni vse. Številni, ki razvijajo asistente za računalniško kodiranje, menijo, da bi lahko predstavljali bližnjico do USI, hipotetične nadčloveške tehnologije, ki naj bi bila cilj številnih najbolj znanih podjetij.
»Prva izrazito ekonomsko koristna dejavnost, ki bo dosegla človeške zmogljivosti, bo razvijanje programske opreme,« je prepričan Eiso Kant, direktor in soustanovitelj Poolsida. (OpenAI se že hvali, da je njen najnovejši model o3 na izzivu v računalniškem kodiranju premagal vodja znanstvenikov v tem podjetju.)

Pravilna koda
Programski inženirji govorijo o dveh vrstah pravilnosti. Najprej mora biti pravilna sintaksa programa (njegova slovnica), kar pomeni, da so vse besede, številke in matematični operaterji na pravem mestu. To je veliko pomembnejše od slovnične pravilnosti v naravnem jeziku. Samo ena napakica v več tisoč vrsticah kode in program ne bo deloval.
Prva generacija asistentov je zdaj že precej uspešna pri pisanju kode, ki je v tem oziru pravilna. Učili so jih z milijardami primerov in tako so usvojili površinsko strukturo številnih tipov programov.
Asistenti za pisanje računalniške kode so že uveljavljeni – jasno ni le, kako velik vpliv imajo.
A program mora biti pravilen še v drugem pomenu: lepo, da dela, pa tudi počne tisto, kar bi radi? To je druga raven pravilnosti, ki je cilj novega vala generativnih asistentov – in šele oni bodo temeljito spremenili nastajanje računalniških programov.
»Veliki jezikovni modeli znajo napisati tehnično brezhibno kodo, a morda ne napišejo vedno tega, kar bi vi radi,« je pojasnil Alistair Pullen, soustanovitelj Cosine. »Za želeni končni rezultat bi morali poustvariti miselne procese, kot bi se odvijali v človeškem razvijalcu.«
Težava tiči v tem, da podatki, s katerimi urijo večino asistentov za kodiranje – to so milijarde delcev kode iz spletnih repozitorijev –, ne vključujejo tudi teh miselnih procesov. Vidimo končni izdelek, ne pa, kaj je vključeno v njegovo izdelavo. »Kod je ogromno, vendar ti podatki ne predstavljajo razvijanja programske opreme,« je povedal Kant.
Pullen, Kant in drugi ugotavljajo, da je za vzpostavljanje modela, ki zmore veliko več od samodejnega izpolnjevanja – da torej izdela uporabne programe, jih preizkusi in popravi napake –, asistentu treba pokazati veliko več od zgolj kod, torej tudi to, kako so nastali.
Skratka, podjetja, kot sta Cosine in Poolside, razvijajo modele, ki ne posnemajo zgolj tega, kakšna naj bi bila dobra računalniška koda, ne glede na njeno gladko delovanje, temveč v prvi vrsti posnemajo postopek, kako takšna koda nastane. Če jim bo to uspelo, bodo modeli proizvajali veliko boljše programe in bodo neprimerno uspešnejši pri popravljanju napak.
Drobtinice
A najprej potrebujete podatkovno množico, ki odslikava ta postopek oziroma korake, ki jih utegne narediti človeški razvijalec pri pisanju kode. Te korake si predstavljajte kot sled iz krušnih drobtin, ki bi ji naprava lahko sledila in tudi sama izdelala podobno kodo.
To vključuje tudi izbiranje, iz česa naj črpa, kateri odseki obstoječega zbira kod so nujni za posamezno programsko nalogo. »Kontekst je ključen,« je poudaril ustanovitelj Zencoderja Andrew Filev. »Prva generacija orodij se pri kontekstu ni odlikovala, saj ni naredila drugega, kot upoštevala odprte zavihke. A vaš repozitorij kod bi lahko vseboval pet tisoč dokumentov in večino bi jih orodje zgrešilo.«
Zencoder je najel skupino veteranov s področja iskalnih orodij, da bi pomagali razviti orodje, ki zmore analizirati velike kodne zbirke in izluščiti, kaj je pomembno. S tako podrobnim kontekstom zmanjšajo halucinacije in izboljšajo kakovost kode, ki so jo sposobni napisati veliki jezikovni modeli, je razložil Filev. »To imenujemo zakasnjena generalizacija repozitorija – Zencoder prebere in razume ves kodni repozitorij in omogoča globoko kontekstualno razumevanje, preden se loti pisanja kode in predlaga izboljšave.«
Tudi Cosine meni, da je kontekst ključen, vendar se nanj opira, da ustvari novo vrsto podatkovne množice. Podjetje je nekaj deset programerjev prosilo, naj si beležijo, kaj so počeli, ko so se prebijali skozi stotine različnih nalog pri programiranju. »Prosili smo jih, naj si zabeležijo popolnoma vse,« je pripovedoval Pullen. »Zakaj ste odprli ta dokument? Zakaj ste se pomaknili do polovice? Zakaj ste ga zaprli?« Programerje so tudi prosili, naj komentirajo dokončane kode in označijo odseke, za katere bi morali poznati druge kode ali določeno dokumentacijo.

Cosine je z vsemi temi podatki uredil ogromno umetno ustvarjeno podatkovno zbirko, ki navaja značilne korake programerjev in vire podatkov, iz katerih črpajo, da dokončajo računalniško kodo. Z vsemi temi podatki učijo model, da ugotovijo, kakšno sled iz krušnih drobtin bi potreboval, da bi izdelal posamezni program, in nato, kako stopati po tej sledi.
Poolside s sedežem v San Franciscu prav tako ustvarja umetno podatkovno zbirko, ki zajema sam postopek kodiranja, vendar se opira predvsem na tehniko, imenovano spodbujevalno učenje z izvajanjem kode. (Uporablja jo tudi Cosine, vendar manj.)
Spodbujevalno učenje z izvajanjem kode je analogno tehniki, zaradi katere so klepetalniki, kot je ChatGPT, spretni sogovorniki v pogovoru, in se imenuje spodbujevalno učenje s človeškimi povratnimi informacijami. Pri njem model naučijo sestavljati besedilo, ki je bolj po meri človeških preizkuševalcev, potem ko označujejo odgovore, ki so jim ljubši. Pri spodbujevalnem učenju z izvajanjem kode pa model učijo, da napiše kodo, ki bo verjetneje izvedla, kar mora, ko jo bo uporabnik zagnal.
Učenje sistema z igro
Cosine in Poolside pravita, da ju je navdihnil pristop DeepMinda s svojim igralnim modelom AlphaZero. Tega so naučili mogočih korakov – potez v igri – in ga nato pustili, da je vedno znova igral sam proti sebi ter se s poskusi in z napakami naučil, katera zaporedja potez vodijo k zmagi.
»Pustili so ga, da je raziskoval poteze in simuliral toliko iger, kot je le imel računalniške moči – in to je pripomoglo k zmagi nad Leejem Sedolom,« se korejskega velemojstra v goju, ki ga je leta 2016 premagal AlphaZero, spominja Pengming Wang, ustanovni znanstvenik v Poolsidu. Pred tem je delal v Google DeepMindu, in sicer je raziskoval uporabo modela AlphaZero za druge namene poleg namiznih iger, vključno s FunSearchem, različico, ki so jo učili reševanja zahtevnejših matematičnih nalog.
Če pristop z modelom AlphaZero prenesemo na kodiranje, koraki, ki so nujni za sestavljanje koda – drobtinice, postanejo mogoče poteze v igri, pravilni program pa zmaga v tej igri. Če modelu omogočimo, da igra sam, se lahko izboljšuje veliko hitreje kot človek. »Človeški programer poskuša in pogori samo enkrat, model pa lahko poskusi sto stvari hkrati,« je izpostavil Kant.
Cosine se od Poolsida razlikuje po tem, da uporablja standardno različico GPT-4o podjetja OpenAI, zato se lahko uči z več podatki, kot jih zmore predelati osnovni model, Poolside pa razvija lastni veliki jezikovni model.
Kant meni, da učenje modela od samega začetka prinaša boljše rezultate, kot če bi prilagodili obstoječi model, ki je 'posesal' ne le milijarde kod, temveč večino interneta. »Popolnoma nič me ne moti, da naš model kakšno nepomembno malenkost pozabi,« je dodal.
Cosine trdi, da se njihov generativni asistent za kodiranje, imenovan Genie, uvršča na vrh lestvice standardnega nabora testov za kodirne modele SWE-Bench. Poolside še vedno gradi svoj model, vendar trdi, da se že to, kar so ustvarili, po učinkovitosti kosa s Copilotom GitHuba.
»Globoko sem prepričan, da bomo z velikimi jezikovnimi modeli dohiteli programske razvijalce,« je izjavil Kant.
Vsi pa ne menijo tako.
Nelogični veliki jezikovni modeli
Za Justina Gottschlicha, direktorja in ustanovitelja podjetja Merly, veliki jezikovni modeli niso pravo orodje za takšno delo, in pika. Primerja jih s svojim psom: »Moj pes ne bo nikoli znal kodirati, naj ga še tako učim. To se preprosto ne bo zgodilo,« je povedal. »Zna veliko drugih stvari, vendar preprosto nima tako globokih kognitivnih sposobnosti.«
Gottschlich se s pisanjem kod ukvarja več kot desetletje in nekaj podobnega kot svojemu psu očita tudi velikim jezikovnim modelom. Za programiranje je nujna zmožnost neoporečno natančnega reševanja logičnih ugank. Naj veliki jezikovni model še tako uspešno posnema človeške programerje, je v svojem jedru še vedno predvsem statistični avtomat, je poudaril. »Nelogičnega sistema ne moreš naučiti, da bo postal logičen.«
Namesto učenja velikega jezikovnega modela z vnašanjem številnih primerov Merly svojemu sistemu ne pokaže niti ene človeške računalniške kode. Kajti za razvoj modela, ki bo dejansko znal pisati kode, je prepričan Gottschlich, moraš delati na ravni temeljne logike, ki jo predstavlja koda, ne na sami kodi. Merlyjev sistem se zato uči neposrednega predstavljanja, to je nekaj podobnega strojno berljivemu zapisu, v kar prevedejo večino programskih jezikov, preden jih zaženejo.
Gottschlich ni želel podrobno opisati, kako je to videti in kako postopek deluje, uporabil je le analogijo: v matematiki obstaja predstava, da potrebujemo le primarna števila, saj vsa druga lahko izračunamo z njimi. »Ta koncept lahko prenesete tudi na kodo,« je dodal.
Ta pristop se dotika same logike programiranja, poleg tega pa je tudi hiter, saj milijone vrstic računalniške kode oklesti na nekaj tisoč vrstic vmesnega jezika, preden jih sistem analizira.
Drugačen način razmišljanja
Mnenje o teh konkurenčnih pristopih je nemara odvisno od tega, kaj pričakujete od generativnih kodirnih asistentov.
Novembra lani je Cosine inženirjem prepovedal uporabo drugih orodij kot lastnih izdelkov. Zdaj vidi vpliv asistenta Genie na svoje inženirje, ki pogosto samo opazujejo orodje, kako namesto njih piše kode. »Modelu omogočate rezultat, ki ga želite, in tako namesto vas poskrbi za izvedbo,« je pojasnil Yang Li, še eden od soustanoviteljev Cosina.
Pullen priznava, da je včasih nenavadno in zahteva drugačno razmišljanje. »Naši inženirji se ukvarjajo z več stvarmi hkrati in preklapljajo med okni,« je razlagal. »Genie poganja kodo v enem, v drugem pa mu naročijo nekaj drugega.«
Ta orodja omogočajo izdelovanje prototipov več različic nekega sistema hkrati. Če razvijamo programsko opremo, v katero je treba vgraditi tudi plačilni sistem, asistent za kodiranje lahko hkrati preizkuša več možnosti, namesto da bi se jih kodiralo na roko drugega za drugim.
Genie lahko napake odpravlja 24 ur na dan. Večina ekip razvijalcev programske opreme uporablja orodje za poročanje o napakah, ki uporabnikom omogoča javljanje opisov težav, na katere so naleteli. Genie jih prebere in poišče rešitev, človek pa jih mora le še pregledati, preden posodobi kodo.
Ni človeka, ki bi lahko razumel na bilijone vrstic računalniške kode v največjih sodobnih programskih sistemih, je poudaril LI, »in ker vse več programske opreme spiše druga programska oprema, bo kode le še več«.
Torej bodo nujni kodirni asistenti, ki bodo vzdrževali programsko opremo. »Ozko grlo bo nastalo zaradi ljudi – kako hitro bodo lahko preverili strojno ustvarjene kode,« je dodal Li.
Kaj o tem menijo inženirji v Cosinu? Kot zatrjuje Pullen, nimajo pripomb. »Če vam dam zahtevno nalogo, boste še vedno morali razmisliti, kako jo opisati modelu,« je začel. »Namesto da bi napisali kodo, morate sestaviti opis v naravnem jeziku. Tudi v to je vključeno veliko tuhtanja, torej ne moremo ravno reči, da smo oropani inženirskih užitkov. Še vedno obstaja želja, ki jo želimo potešiti.«
Nekateri se bodo verjetno lažje prilagodili novemu načinu dela kot drugi. Cosine kandidate za delovno mesto rad povabi, naj nekaj dni pišejo kode z njegovo ekipo. Pred nekaj meseci je ekipa svežega kandidata prosila, naj sestavi vizualni gradnik, ki bo zaposlenim omogočil delitev posrečenih delov programske opreme, ki jo ravno razvijajo, na družbenih omrežjih.
Naloga ni bila preprosta, saj je kandidat moral poznati veliko odsekov iz Cosinovih milijonov in milijonov vrstic kode. A uspelo mu je v nekaj urah. »Oseba, ki nikoli ni videla naše kodne zbirke, je k nam prišla v ponedeljek in v torek popoldne že nekaj poslala. Mislili smo, da bo potreboval teden dni,« je priznal Li. (Kandidata so zaposlili.)
A tu je še drug vidik. Številna podjetja to tehnologijo uporabljajo za zmanjševanje števila programerjev. Li meni, da bomo kmalu dobili razrede programskih inženirjev – na enem koncu bodo elitni razvijalci z milijonskimi plačami, ki bodo znali odkrivati težave, ko se bo UI zalomilo, na drugem koncu pa bodo manjše ekipe od deset do dvajset članov opravljale delo, za katero je bilo nekoč potrebno več sto programerjev. »Podobno kot so bankomati preobrazili bančništvo,« je ponazoril Li.
»Vse, kar boste želeli doseči, bo odvisno od računalniške moči, ne kadrovske. Mislim, da je že splošno sprejeto, da je konec obdobja, ko smo zaposlovali na tisoče inženirjev,« je dodal.
Krivinski pogoni
Tudi Gottschlich je prepričan, da bodo nujne naprave, ki znajo kodirati bolje od ljudi, saj je to po njegovem mnenju edini način, kako sestaviti ogromne, zapletene programske sisteme, ki jih bomo nekoč potrebovali. Tako kot mnogi v Silicijevi dolini pričakuje, da se bo človek v prihodnosti selil na druge planete, kar pa ne bo mogoče, če nam UI ne bo sestavila ustrezne programske opreme, je pojasnil. »Merlyjev dejanski cilj je, da človeka ponese na Mars.«
Gottschlich raje govori o strojnem programiranju kot o kodirnih asistentih, saj meni, da ta izraz napačno opredeljuje problem. »Po mojem mnenju ti sistemi ne asistirajo človeku, temveč bi ljudje morali asistirati njim,« je povedal. »Delajo lahko s hitrostjo UI, zakaj bi omejevali njihov potencial?«
»V Kremenčkovih imajo avtomobile, ki pa se premikajo le ob pomoči voznikovih nog,« je opisoval Gottschlich. »Zdi se mi, da večina ljudi tako uporablja UI za programske sisteme.«
»V Merlyju pa tako rekoč sestavljamo vesoljske ladje,« je dodal, in to ne v šali. »Po mojem jih ne bi smeli poganjati ljudje na kolesih, temveč krivinski pogoni.«
Ali to zveni odbito? Saj tudi je. Vendar je treba to, kar imajo ljudje, ki razvijajo to tehnologijo, za svoj končni cilj, vseeno jemati resno.
Gottschlich ni osamljen v svojem razmišljanju o galaksijah. Kljub osredotočenju na izdelke, ki jih razvijalci hočejo uporabljati čim prej, si večina teh podjetij postavlja tudi neprimerno zahtevnejše cilje. Obiščite spletno stran Cosine, na kateri se podjetje predstavlja kot Laboratorij za človeško umovanje. Kodiranje vidi le kot prvi korak proti modelu za splošnejšo uporabo, ki bi lahko posnemal človekovo reševanje težav na številnih področjih.
Poolside ima podobne cilje: podjetje takoj pove, da razvija splošno umetno inteligenco. »Kod je način za formaliziranje sklepanja in umovanja,« meni Kant.
Wang izpostavlja agente. Predstavljajte si sistem, ki lahko nemudoma sestavi programsko opremo za katerokoli nalogo: »Če dosežete stopnjo, na kateri vaš agent ob pomoči programske opreme dejansko zmore rešiti katerokoli računalniško nalogo – je to pravzaprav USI.«
Tu na Zemlji takšni sistemi resda še ostajajo sanje, vendar se programsko inženirstvo spreminja hitreje, kot so pričakovali celo najboljši na tem področju.
»Nismo na točki, ko bi vse preprosto postorile naprave, zagotovo pa se odmikamo od ustaljene vloge programskih inženirjev,« je poudaril Pullen iz podjetja Cosine. »Vidimo zametke novega načina dela – kaj bo v prihodnosti pomenilo delati kot programski inženir.«
Copyright Technology Review, distribucija Tribune Content Agency.