Kako osposobiti AI agenta za potrebe svoje tvrtke? Saznajemo od inženjera iz Infobipa i Sofascorea

netokracija - prije 2 tjedna - link

Prvi Infobipov Engineering meetup okupio je više od 80 inženjera i inženjerki iz raznih područja i senioriteta, a tema koja ih je privukla u Alpha Centauri kampusu je ChatGPT i njegova primjena u upravljanju ogromnim količinama podataka odnosno specifičnim znanjima i zadacima.

Prvu temu meetupa Big Data Analysis and Insights with ChatGPT otvorio je Herman Zvonimir Došilović (Senior Software Engineer @ Sofascore), kroz čije smo predavanje saznali kako Sofascore koristi ChatGPT za dobivanje ključnih uvida iz baze podataka od 1 petabajta.

U drugu temu Story About Stanley – The AI That Knew Too Much uveo nas je Ivan Markanović (Principal Engineer @ Infobip) koji razvija Stanleyja, AI agenta koji ne samo da ispisuje izlazne podatke, već i izvršava naredbe ovisno o ulaznim podacima. U pitanju je uzbudljiva priča koje se vrti oko frustracije, kreativnosti i prilagođavanja AI-a potrebama Infobipa.

Kako pohraniti i agregirati milijardu sirovih podataka?

Kroz predavanje, saznali smo kako Sofascore koristi ChatGPT za dobivanje ključnih uvida iz baze podataka od 1 petabajta. Iako su tek u ranoj fazi iskorištavanja umjetne inteligencije u tu svrhu, SofaScore nije tek nedavno zagrizao u AI područje. Njihov AI i analitički tim ima već 30 ljudi, a brinu se o svim aktivnostima vezanima uz podatke: od prikupljanja, pohrane i analize do vizualizacije i strojnog učenja.

Naravno, ChatGPT stavio je neke nove karte na stol te su Herman i kolege odlučili iskušati njegove mogućnosti za velike baze podataka.

SofaScore svaki dan generira milijardu redaka anonimiziranih korisničkih podataka te ukupno broje 1 petabajt sirovih anonimiziranih korisničkih podataka. Osim te analitičke baze, imaju i 100 gigabajta veliku bazu za samu aplikaciju, koja sadrži sve podatke o timovima, igračima i utakmicama… Tako da, jasno vam je o kojoj razini govorimo.

Za početak, Herman je pokazao kako podaci prolaze kroz njihov sustav (data pipeline fotka niže), objašnjavajući kako nije baš jeftina aktivnosti ako morate pohranjivati i pozivati se na baze njihove veličine…

Stoga smo odlučili napraviti sami svoj customizirani model za unos podataka, koji vrtimo na Kubernetes clusteru. On svaki dan unosi podatke s BigQueryja na naše interne servere. Uštede su nevjerojatne. čak više od 20 puta.

IE Meetup, Sofascore

Podaci koji potom stignu u ClickHouse (koji obožavaju, dodaje Herman) su sirovi odnosno neprocesirani. Slati upite na bazu takvih podataka je sporo i neefikasno, pogotovo ako želite vrtjeti upite koji se protežu na nekoliko dana, tjedana ili čak mjeseci.

No, ono što radimo jest da agregiramo ove podatke u nekoliko različitih vremenskih okvira. Agregiranje podataka je zbilja jedan od najvažnijih koraka za nas koji procesiramo podatke. Da vam ocrtam koliko je važna: ako se pitamo koliko smo imali aktivnih korisnika u Hrvatskoj prošli mjesec – dobivanje odgovora može potrajati i nekoliko minuta na neprocesiranim podacima u odnosu na par milisekundi iz agregiranih podataka.

Kada su podaci agregirani, s njima možemo raditi skoro sve što hoćemo, ističe Herman. Takve podatke i koriste za mnogo toga, od kreiranja preglednih statistika do godišnjih i kvartalnih izvješća. Što nas dovodi i do glavne teme, da potrebu za tim podacima imaju razni timovi – koji nemaju svi pristup ni znanje kako baratati spomenutim bazama.

Čak i da znaju raditi s SQL-om, trebali bi poznavati kako se podaci spremaju i organiziraju. Trebali bi poznavati semantiku svake tablice, svakog stupca, a trenutno postoji više od 200 aktivno korištenih tablica u našoj ClickHouse bazi.

Što ako na vaša pitanja može odgovoriti AI?

Stoga razni timovi i pojedinci kojima trebaju podaci dolaze njihovom timu sa zahtjevima. Za sad je to funkcioniralo putem zasebnog Slack kanala, na kojem osoba prvo odgovara na 4 pitanja: Što je vaš zahtjev?; Zašto to tražite?; Što će se napraviti na temelju rezultata?; Do kada treba biti odrađeno?

A što ako na ta i druga pitanja može odgovoriti AI? Osim kolegama, što ako možemo i sebi olakšati tako što će nam ChatGPT generirati SQL upite za takve zahtjeve…

Glavna ideja je bila prilično jednostavna, izgraditi chat aplikaciju koja će ti omogućiti da prirodnim jezikom šalješ upite na bazu te da ti pritom i odgovori prirodnim jezikom. Ali imali smo jedan problem, kako da aplikacija bude “svjesna” 1 petabajta podataka?

Dosjetili su se koristiti vektorsku bazu, s kojom su, kao u knjigama, mogli pronaći odgovor koristeći samo indeksirane riječi, bez potrebe da procesiraju sve podatke.

I tako dolazimo do prompt engineeringa! Niže možete vidjeti i kako je Herman zadužio ChatGPT da postane SQL, točnije – ClickHouse stručnjak.

Naravno da su se otvorila i pitanja o sigurnosti. S obzirom na to da postoji bojazan da sam ChatGPT pozove random SQL upite, Herman navodi kako su postavili nekoliko razina ograničenja (resursna, stručna, vlasnička) kako bi osigurali da se takvo što ne dogodi.

Iako je egzekucija još na osnovnoj razini, Herman i kolege planiraju nastaviti polirati ovaj alat. Trenutno sve operira na ChatGPT 3.5 platformi, stoga su imali minimalno troškova, kaže Herman da nisu okrznuli 100 dolara koje su dobili na raspolaganje.

Svakako je plan podići sve na veću razinu: od boljeg promptanja do isprobavanja novih modela – jer osim što im ovo koristi kolegama u timu pa i čitavoj firmi, imaju i masu klijenata i partnera koji su zainteresirani za podatke, zaključuje Herman.

Od poruke na Slacku…

Sličnu primjenu ChatGPT-ja u baratanju podacima imali smo priliku vidjeti i u Infobipu. Njihovom infrastrukturnom odjelu i Engineering Directoru Oliveru Lovakoviću, koji uvijek gleda kako nešto optimizirati, nije promakla ideja Ivana Markovića, Principal inženjera, koja je ubrzo i realizirana.

Naime, troubleshooting korisničkih i inih problema na platformi koja ima 37 milijardi interakcija dnevno, 3000 mikroservisnih aplikacija, 60 data centara koji se vrte na 30 tisuća servera, koje koriste i održava 800 inženjera… stvarno nekad nije nimalo jednostavan ni brz proces. No, kako se ispostavilo, može biti i jednostavniji i lakši.

U Infobipovom infrastrukturnom timu s tom idejom razvili su Deployka, alat kojim podržavaju odnosno upravljaju s više platformi iz jednog mjesta odnosno sučelja. No, postojao je jedan problem, što ako za izvršiti određen zadatak odnosno troubleshooting, osoba mora imati pristup nekoj dokumentaciji ili dopuštenje neke treće odgovorne osobe… Nužno je povući nekoga za rukav da vam pomogne, a gdje bolje nego na Slacku.

Dedicirani kanal uskoro je postao FAQ s obzirom na količinu informacija koja se razmjenjivala. Unatoč toj bazi dostupnih odgovora, na tom kanalu se redovito postavljalo ista pitanja

… do prompt engineeringa

Ako smo išta dosad naučili (barem na Netokraciji), to je da ChatGPT možemo nahraniti bazom znanja o kojoj ga potom možemo ispitivati i očekivati (u većini slučajeva) suvisle odgovore kad nam zatrebaju. Što mu više informacija date, to će se on davati bolje odgovore. Ivan i kolege povukli su tako cijelu povijest poruka i upita sa spomenutog Slack kanala, čime su nahranili ChatGPT (verziju 4.0 Turbo).

Odradili su tzv. finetuning, model je naučio sve što je trebalo, i sve je bilo super. E, nije!

Potrebno je mnogo vremena i truda da bi se istrenirao AI model, a to biste trebali napraviti svaki put kada se promijeni i najmanja sitnica u podacima, primjerice, API dokumentacije. Morali biste nanovo istrenirati model i zbog obične promjene URL-a.

Tu u igru ulazi prompt engineering.

IE meetup, Infobip

Okrenuli su se prompt engineeringu u nadi da će moći samo promijeniti prompt tj. da neće za svaku promjenu u ulaznim podacima morati nanovo trenirati model. Priča se tek tu zahuktava s nizom novih pitanja… Ako znamo da možemo i trebamo uvesti znanje u alat, zašto ne bismo sve informacije ubacili promptanjem direktno u alat?

Mi to zapravo i radimo, ali postoji jedna mala caka – a to je ograničenje koliko ChatGPT može obraditi tokena po upitu. Možemo samo određeni dio podataka ubaciti unutra.

Ako već imamo ograničenje i biramo podatke, jasno je da to trebaju biti ključne i relevantne informacije za korisnike. No, kako znati što korisnici zbilja trebaju i traže – neće oni uvijek eksplicitno pitati: reci mi više o Deplyoku – što ako pitaju: pokaži mi sve moje servere?

U dobavljanju što preciznijeg i užeg, a opet dovoljno širog spektra ulaznih podataka iz kojih će AI agent moći nešto zaključiti, Ivanu i timu pomogle su vektorske baze odnosno korištenje embeddingsa i retrieval modela – procedure koje ćete i sami koristiti ako budete htjeli uz pomoć strojnog učenja dobavljati konkretne informacije iz većih, nestrukturiranih baza podataka.

Tu dolazimo i do tri slijeda pokušaja i pogreške koja su potaknula nastanak samog “AI inženjera”, Stanleyja.

Kako je Stanley spasio dan – iz trećeg puta

Ivan – i tim koji mu se pridružio u razvoju ovog rješenja, osmislili su potom prvi plan.

Plan je bio da ChatGPT izvuče informaciju iz Infobipove dokumentacije, stavi je u bazu podatka, potom s korisnikovim upitom po bazi odradi pretragu po sličnosti te da nazad odgovor. Plan nije uspio, odgovore koje je Stanley vraćao ili su se referirali na zastarjele podatke ili bi javio da podaci o tome ne postoje. Drugi plan također – Stanley im je davao različite odgovore na ista pitanja, izbacivao nestrukturirane podatke, a često bi znao i odgovoriti “probajte sad” nakon što ništa nije napravio…

Kako kažu, treća sreća! Ivan i kolege su se pitali koji problem zapravo žele riješiti? Odgovor je bio: operativne stvari, stvari na koje se troši vrijeme, a vjerojatno bespotrebno.

Za većinu poruka, inženjer je morao stati raditi svoj posao i provjeriti u čemu je stvar.

Zaključili su da oni zapravo trebaju AI inženjera koji bi umjesto pravog mogao provjeriti ograničenja odnosno prava pristupa nečemu. Takvi upiti, unatoč tome što se čine beznačajni, oni to nisu – o njima netko ovisi i netko ih svejedno mora napraviti.

Plan tri koji je u konačnici bio uspješan, išao je ovako:

  1. Dodati Deploykovu dokumentaciju u dataset;
  2. Konvertirati funkcije u scheme;
  3. Prenijeti ih u prompt;
  4. Pustiti GPT da odluči što će napraviti.

Kako je Ivan demonstrirao uživo – testiranje teorije uspjelo! Stanley bez problema može vratiti odgovor tko od kolega ima pristup kojim serverima, kao što može i sam deployati server i javiti njegov status…

Kako operira Stanley?

Naravno, nije sve idealno: Stanley je u svom radu nekad koristio previše memorije, a nekad bi znao i halucinirati. Ako imate tisuće funkcija, prešišat ćete token limit, ističe Ivan.

Zato su upogonili drugog agenta, koji radi na ChatGPT 3.5 verziji, a čiji je jedini zadatak samo odabrati 10 do 15 funkcija tj. “tema” koje su najrelevantnije za postavljeno pitanje. Haluciranje su također riješili bacajući još malo AI iskre u vatru. Naime, iako ne potpuno, možete ublažiti haluciniranje tako što ćete aktivirati više agenata da međusobno razgovaraju i provjeravaju rezultat prije nego vam daju odgovor.

Pratite nas za vijesti i o drugom izdanju Infobip Engineering Meetupa!

pročitaj cijeli članak

AI (35)ChatGPT (8)Infobip (7)Izvještaj (8)Programiranje (11)umjetna inteligencija (78)