Umjetna inteligencija

Kako sam postao šaptač agentima?

PHOTO:

Claude AIUmjetna inteligencijaprogramiranjeGoogle Antigravity

Već duže vrijeme koristim agente (AI, LLM) tijekom programiranja. Znatno sam smanjio guglanje u potrazi za rješenjima problema, a gotovo sam prestao koristiti službenu dokumentaciju jer mi agent daje brži odgovor kad od njega zatražim istu stvar.

Za generiranje programskog koda prije nisam koristio agente jer u početku i nisu bili dovoljno dobri. No, prije par mjeseci bio sam na Python meetupu na kojem je Ivan Arar pričao o Spec-Driven AI developmentu pa me to navelo da i ja počnem šaptati agentima.

Prvi test: Flutter i Google Antigravity

Prvo sam se odlučio na izradu jedne aplikacije u tehnologiji s kojom inače ne radim, odlučio sam napraviti aplikaciju za evidenciju mjerenja krvnog tlaka u Flutteru i to kao desktop aplikaciju (Linux). Za razvoj sam odabrao Google Antigravity u kojem je default agent Gemini 3 Pro.

Nisam pisao detaljnu specifikaciju već sam agenta navodio korak po korak, posebnost po posebnost. Iako nisam naveo što se sve mjeri on je prepoznao da bi trebalo unositi sistolički i dijastolički tlak te otkucaje srca. Predložio sam agentu da podatke sprema u SQLite bazu, ali tu je nastao problem - nikako nije uspio postići da to proradi pa je predložio neku svoju NoSQL bazu i to je proradilo od prve.

Osim tabličnog prikaza zatražio sam da mi mjerenja prikaže u obliku grafa na dva načina: sva mjerenja i uprosječena po danima. Napravio je i ispis, ali nikako nije uspio napraviti položeni ispis, samo uspravan. Zatražio sam i izvoz unesenih podataka u JSON formatu kao i uvoz takve datoteke u aplikaciju. Sve je odrađeno korektno, aplikacija radi, malo sam bacio oko na kod, ali nisam promijenio ni jedan znak.

Izazovi s Djangom i Wagtailom

Drugi test je bilo dodavanje novih posebnosti u postojeću Wagtail/Django aplikaciju. Tu stvari nisu išle tako dobro, imao sam namjeru da agenta koristim da mi generira 'dosadan' kod koji se mora napisati kad se dodaje nova aplikacija u Django projekt. Tu je bilo dosta problema, glupog koda koji nije radio i nakon nekog vremena sam odustao. Izgleda da su Wagtail aplikacije ipak malo poznate tom modelu, što se za generiranje Flutter aplikacije sigurno ne može reći.

Pokušao sam generirati testove za jednu postojeću aplikaciju. Radili su, ali nisu bili sjajni. Kad sam napravio nadogradnju na novu verziju Djanga ti testovi su se raspali. Agent je koristio zastarjele metode, a prilikom generiranja testova 'nije znao' prepoznati upozorenja koja su na to ukazivala.

Nakon toga odustao sam od Google Antigravityja, zbog previše pokušaja i pogrešaka raspoloživi tokeni su se prebrzo trošili.

Django Lumen i Claude Code

Anthropic je pokrenuo besplatnu akademiju za rad s AI alatima pa sam malo bacio oko, počeo gledao edukaciju za Claude Code, ali sam prestao kad je došla do točke gdje se kao primjer koristi NodeJS aplikacija. Ali ta edukacija me potaknula da dam priliku tom agentu da pokaže što zna na drugom području.

Već sam prije započeo jedan mali projekt kojeg sam namjeravao postaviti koristeći Kamal. O razlozima zašto baš Kamal budem neki drugi put, ali kako Kamal također nije neki projekt koji se puno koristi tu je Claude Code također zapeo, iako je predložio dobra rješenja za neke probleme.

Kao novi projekt odlučio sam realizirati jednu ideju o kojoj već dugo razmišljam i koja je relativno jednostavno za izvesti, ali uvijek prije bi zapeo na vizualizaciji koja je srž te ideje. Oni koji koriste Django znaju da za Django Extensions koji između puno lijepih stvari ima i naredbu uz pomoć koje se generira ER diagram modela iz projekta. Rezultat je jedna lijepa velika slika svih modela i veza između njih. Jedan od problema s tom naredbom je što koristi Graphviz, a njegova instalacija nije uvijek najjednostavnija, s Linuxom nema problema, ali MacOS je druga priča, a o Windowsima da i ne govorimo.

Moja ideja je bila da napravim to na drugi način, ali da se prikaz modela može vidjeti u web aplikaciji te da bude interaktivan. Isprobavao sam različita rješenja za vizualizaciju ER dijagrama, ali su mi bila ili komplicirana ili ružna.

To je bio pravi test za Claude Code. Izvući podatke o modelima su trivijalna stvar u Djangu i to je Claude dobro napravio, a za vizualizaciju je odlučio koristiti Mermaid.js. Tu je zapeo na zahtjevu da linija prema drugom modelu kreće iz polja preko kojega je relacija definirana. Kako to nije moguće u Marmaid.js-u napravio je custom rješenje za prikaz bez ikakvog koda treće strane. Rezultat me iznenadio jer je bio ljepši i skoro istovjetan onome što sam zamislio. Brzina prikaza grafikona je bila puno veća nego kad je koristio Mermaid.js. Generiranje koda za to je bilo jako zahtjevno pa je potrošio sve raspoložive tokene i nastavili smo s razvojem tek idući dan. Dalje je sve išlo puno lakše. Bilo je bugova koji su se otkrili tek kad sam aplikaciju testirao na projektima s puno modela. Najveći je bio taj kad sam otkrio da za ključ koristi samo ime modela pa je pogrešno prikazivao modele iz različitih aplikacija koji su imali isto ime. Rješenje je bilo koristiti ime aplikacije i ime modela kao ključ. Bilo je još nekih manjih problema, ali uz moju kontrolu koda i pokazivanje direktno na problem Claude je prvu fazu projekta uspješno priveo kraju.

Django Lumen objavljen je na Codeberg-u, paket se instalira na standardan način pip install django-lumen i nakon 5 dana i nekoliko stotina preuzimanja nije prijavljen neki značajniji bug, samo se traže dodatne mogućnosti. Jedno od pitanje je bilo i kako se Lumen nosi s prikazom velikog broja modela (425), ja sam ga isprobao na aplikaciji s nešto više od 300 modela i prikaz je skoro trenutačan.

Pitanje je kada bi ovaj projekt vidio svjetlo dana da Claude nije odradio odličan posao vizualiziranja modela - to je meni bio najveći izazov.

Ovo iskustvo mi je pokazalo da agenti definitivno ubrzavaju razvoj, neki problemi bi se izbjegli da je specifikacija bila detaljnija, ali pisanje potpune specifikacije trajalo bi duže nego proces postupnih naputaka i testiranja onoga što je napravljeno.

Danas sam u procesu postupnih naputaka doradio jednu web aplikaciju koja već neko vrijeme čeka da je završim. Claude se dobro nosio s Wagtailom iako su neka rješenja bila neoptimalna, često ide najkraćim putem do cilja, kod mu je nekonzistentan - iako su u aplikaciji svi class based view-ovi on je napravio funkcijski view, definirao je path kao dekorator na metodi, a svi postojeći pathovi bili su definirani u urls.py datotekama.

Čini mi se da bi se takvi problemi mogli riješiti s definiranjem vještina koje obogaćuju i usmjeravaju agentove mogućnosti.

Iako agenti omogućavaju izradu aplikacija i onima koji ne znaju programirati, mislim da će ih najbolje iskoristiti oni koji znaju programirati i koji mogu prepoznati kritične točke u kodu i usmjeriti agenta u pravom smjeru.

Moje šaputanje agentima je tek počelo i čini mi se da vidim neko svjetlo na kraju prvog od brojnih tunela koji nam slijede.



Ako prvi put komentirate moguće je da se vaš komentar neće isti tren pojaviti na stranici već nakon dodatne provjere. Hvala na doprinosu i strpljenju.