Donosimo malo istraživanje i primjer o tome kako AI može pomoći u poslu vezano uz arhitekturu softvera
Prije nekoliko mjeseci sam sudjelovao na jednoj domaćoj, najvećoj, developerskoj konferenciji sa predavanjem na ovu istu temu iz naslova. Predavanje, odnosno prezentacija je, uz ponešto teksta i činjenica, bila skup screenshot-ova mojeg „istraživanja“ AI-a i mogu li ga i kako koristiti u svrhu razvijanja arhitekture nekog softvera, a sve u svrhu odgovora na pitanje iz naslova, a to je moram li se kao Arhitekt softvera „bojati“ za svoj posao.
Autor: Tomislav Globlek, Application Architect, ELEKS
S obzirom da je ovo članak, a ne prezentacija, neću koristiti toliko screenshot-ova, nego ću probati svoje „putovanje“ kroz razvoj i dokumentiranje arhitekture pretočiti u tekst. Naravno, neće tu biti apsolutno sve prikazano i opisano, ali ću vam probati prenijeti moj tok misli, rezultate i zaključke oko korištenja umjetne inteligencije u svrhu kreiranja arhitekture jednog zamišljenog softvera kako bi sam sebi odgovorio na pitanje je li moje mjesto arhitekta softvera ugroženo.
Krenut ću od definicije arhitekture
“The software architecture of a system is the set of structures needed to reason about the system. These structures comprise software elements, relations among them, and properties of both.”
Dakle, skup raznih struktura koji omogućavaju objašnjenje sustava, a te strukture se sastaje od softverskih elemenata, relacija između njih i njihovih svojstva.
Zadao sam si zadatak, i pokušao sam koristiti što više AI kako bi dobio željeni rezultat, a to je dokumentirana i nacrtana arhitektura nekog softvera. Malo sam se fokusirao na jedan aspekt arhitekture, onaj meni najzanimljiviji, a to je vizualizacija arhitekture putem dijagrama, a tek onda dokumentiranje.
Zamišljeni software čiju arhitekturu sam htio „osmisliti“ i „nacrtati“ pomoću AI-a je, ukratko, web aplikacija koja se mora integrirati sa lokalnom bazom podataka, omogućiti korisniku da mijenja dizajn i radi online plaćanje.
Premisa korištenja AI-a je da sam odlučio koristiti besplatne inačice, počevši od ChatGPT-a kao nekako najpoznatijeg.
Krenuo sam sa raščlanjivanjem zahtjeva na funkcionalne i nefunkcionalne zahtjeve, grupirao ih logičke i slijedne korake te uz svaku stavku probao odrediti mogu li za to koristiti AI ili ne.
- Korisnički zahtjevi
- Funkcionalni – Korisnik
- Nefunkcionalni – Korisnik / Arhitekt / AI
- Dizajn arhitekture
- Obrasci (patterns)- AI
- Taktike (tactics) – AI
- Atributi kvalitete, rizici, osjetljive točke (Sensitivity points) – Arhitekt / AI
- Prioritizacija – Korisnik / Arhitekt
- Dokumentiranje arhitekture
- Struktura dokumenta – Arhitekt / Korisnik / AI
- Dijagrami – Arhitekt / AI
- Razlozi i objašnjenja – Arhitekt / AI
Dakle, za dosta stavki mislim mogu koristiti AI, pa sam onda tako i krenuo, dio po dio, postavljao pitanja ChatGPT-u što i kako mogu implementirati, počevši od integracije lokalne baze i web aplikacije u cloud-u na što sam dobio odgovor da moram implementirati VPN (Virtual Private Network). Nastavio sam sa pitanjima oko izmjene dizajna web-a, na što je ChatGPT sugerirao da mogu koristiti tehniku CSS Stylesheet Switching. Uz to mi je dao i uputstva kako se to može odraditi putem skripte. Predložio mi je integraciju Stripe servisa za online plaćanje s obzirom da taj servis nudi izdavanje faktura. Sve su to bili pojedinačni upiti na koje sam dobio odgovor, odnosno prijedlog ili ideju što i kako koristiti.
Međutim, onaj koji čita dokument arhitekture to možda ne može vizualizirati, pa je dobro napraviti i neki dijagram, kako bi se prikazale relacije (jedna od glavnih definicija arhitekture sustava) između tih pojedinačnih elemenata i kako bi to moglo funkcionirati u cjelini. Osmislio sam jedan kratak upit za AI gdje sam naveo što su ulazni zahtjevi i što pokušavam dobiti na dijagramu, te pitao da mi ga nacrta. Od ChatGPT-a sam dobio mermaid kod, koji sam ubacio u draw.io i dobio dijagram. Vrlo jednostavno i efektno, kada bi bilo točno.
S obzirom da sam na prvom rezultatu crtanja dijagrama dobio „krivi“ rezultat do kojeg sam došao inicijalnom analizom, pokušao sam ići korak dalje, isti upit za crtanje dijagrama provući kroz još nekoliko alata, da vidim ima li razlike. Probao sam:
1. Whimsical – jako zanimljiv alat za crtanje dijagrama koji ima direktnu integraciju sa ChatGPT-om u pozadini gdje mu se može zadati upit za crtanje dijagrama direktno kroz korisničko sučelje. Rezultat je bio malo bolji, ali i dalje ne potpuno točan. Interesantno, s obzirom da u pozadini koristi isti model kao što sam i ja direktno koristio, ChatGPT.
2. Excalidraw – također, jako zanimljiv alat za brzo crtanje i skiciranje bilo čega, pa tako i dijagrama, isto ima direktnu integraciju sa AI-em (ne znam točno kojim modelom). Isti upit kao i u prva dva slučaja, dobio sam treći rezultat. Opet, malo bolje, ali i dalje ne potpuno točno.
3. LMSys.org Chatbot arena – zanimljiv koncept kako iskoristiti korisnike da pomognu u učenju AI modela. Zadate upit (naravno isti kao i prije) i dobijete 2 paralelna rezultata od dva različita AI modela, gdje onda vi kao korisnik dajete ocjenu koji je dao bolji rezultat. Odabrao sam jedan koji mi se činio bolji i prikladniji za ono što mi treba, rezultat ponovo u mermaid kodu, ponovo import u draw.io, rezultat opet drugačiji, i pogađate, opet ne potpuno točan.
I onda, nakon što sam probao nekoliko različitih alata sa neželjenim rezultatom, pitao sam se što bi bilo bolje. Možda nešto s kim bi mogao „pričati“ i imati interakciju, odnosno konverzaciju, kao sa „pravim“ AI-em.
AI for Work, web stranica sa poprilično puno kategorija i potkategorija ChatGPT promt-ova, gdje sam naišao na jedan pod nazivom „Create a technical documentation document“ iz perspektive „Software Engineer-a“. Možda upravo ono što sam tražio.
Definicija ChatGPT prompta od samog ChatGPT-a
ChatGPT prompt je ulazni tekst ili upit koji korisnik daje modelu ChatGPT kako bi dobio željeni odgovor. Prompt može biti pitanje, rečenica, ili niz rečenica koje služe kao smjernica modelu za generiranje odgovora. Ukratko, prompt je ono što korisnik unosi kako bi započeo razgovor ili postavio zadatak modelu ChatGPT.
Na hrvatskom jeziku, prompt bi se mogao definirati kao uputa ili upit upućen umjetnoj inteligenciji (AI) kako bi se generirao odgovarajući odgovor ili nastavak teksta.
Upravo taj pristup mi je dao bolji rezultat, u samom crtanju dijagrama koji sam mogao „popravljati“ sa dodatnim pojašnjenjima mojeg upita. Zanimljiv dio ovakve konverzacije je što se u samom prompt-u definira i što očekujemo kao popratne akcije za ono što inicijalno AI generira kao rezultat. Kao popratna akcija je definirano da sam AI mora uzeti u obzir određene reference (tehničke knjige oko sofvera i arhitekture koje su također navedene u propmt-u) na temelju kojih treba sam sebi analizirati rezultat i ocijeniti ga.
Nakon toga će ponuditi što želimo napraviti sa rezultatom, i kao prva opcija je da se unaprijedi rezultat na temelju analize koju je odradio. Odabirom te opcije, AI sam sebe revidira i očekivano, poboljša rezultate. Pored crtanja dijagrama koji je bio inicijalni zadatak, daljnjom konverzacijom sam zatražio da predloži i neki predložak dokumentiranja tih rezultata (iako sam znao što bi trebao). Dobio sam poprilično dobar rezultat, naravno na temelju onih referentnih knjiga definiranih u samom prompt-u. Sve to skupa sam mogao iskoristiti kako bi kreirao dokument koji ima smisleni početak i kraj, te zaključak dizajna arhitekture.
Nasuprot dijagramima koje je generirao AI, ovako izgleda dijagram kada ja sa sam crtam u draw.io alatu. Dosta drugačije.
Zaključak priče i mojeg putovanja kroz istraživanje kako mi AI može pomoći u poslu vjerojatno nikome neće biti iznenađujući.
- Treba znati protumačiti i ispravno postaviti korisničke zahtjeve koji mogu biti „misleading” i za AI
- Ponekad korisnik neće znati sve zahtjeve
- ALI arhitekt mora predložiti neke stvari (npr. VPN)
- AI može generirati objašnjenje dijagrama u tekstualnom obliku
- ALI, usmena prezentacija nekome tko ne razumije tehnički jezik je i dalje na arhitektu
- U definiranju strukture pisane dokumentacije svakako AI može pomoći i ne treba bježati od toga
- ALI arhitekt mora odlučiti treba li sve i ima li sve to smisla u kontekstu zahtjeva od korisnika
- Ima puno AI alata što nije ništa čudno
- ALI, jesu li točni? Ne baš skroz i uvijek, ovisi o samom ulaznom zahtjevu, ali idu u dobrom smjeru
- Trebamo li ih koristiti?
- Da, naravno, zašto si ne bi olakšali i ubrzali posao, pogotovo onaj dio oko istraživanja. ChatGPT može zamijeniti Google u dosta slučajeva.
- Trebaju li se arhitekti bojati za svoj posao?
- NE još!
Disclaimer: svi korišteni alati su besplatni za korištenje u kontekstu u kojem sam ih koristio, a ovaj članak nije sponzoriran niti ima namjeru reklamirati bilo koji od tih alata.
O autoru
Tomislav Globlek
Tomislav se bavi razvojem softvera preko 17 godina. Kroz svoju karijeru bio je dio nekoliko najvećih i najjačih tvrtki u Hrvatskoj što mu je dalo priliku raditi na projektima razvoja poslovnog softvera. Njegova strast od početka nije bila samo kodiranje, već zamišljanje i predstavljanje kako softver funkcionira ispod haube i kako klijenti vide svoj softver iz poslovne perspektive, što ga je dovelo do softverske arhitekture i vodećih uloga kroz koje je također prakticirao savjetovanje o specifičnim tehnologijama i proizvodima.