Agenti u praksi - Do agenta, korak po korak

Nakon mnogo teorije i pregleda gotovih rješenja koja se mogu odmah početi koristiti, no ništa neće demistificirati agente bolje od toga da se jedan doista i napravi. Za to ćemo se osloniti na jedan običan svakodnevni zadatak, ali ćemo mu pristupiti na dva načina. Zatim ćemo otići i korak dalje, pa umjesto da se koristi oblak, isto to ćemo napraviti lokalno. Pritom nije ideja pokazati što je bolje ili lošije, nego samo pokazati kako isti problem izgleda iz više kutova gledanja i, možda još važnije, kada agent uopće ima smisla, ali i kako se za stvaranje agenata i procesa za automatizaciju lako može koristiti umjetna inteligencija…

Matija Gračanin subota, 29. kolovoza 2026. u 06:00
Jutarnja obrada e-pošte u n8n-u – model se koristi samo za jedan strogo strukturirani korak, dok vremenski raspored, filtri, prag pouzdanosti, skice i oznake ostaju deterministički, baš kao što bi kod dobro osmišljenih agentskih sustava to i trebalo biti…
Jutarnja obrada e-pošte u n8n-u – model se koristi samo za jedan strogo strukturirani korak, dok vremenski raspored, filtri, prag pouzdanosti, skice i oznake ostaju deterministički, baš kao što bi kod dobro osmišljenih agentskih sustava to i trebalo biti…

Dosad je već postalo jasno da kada se razmišlja o agentima i agentskim sustavima, naglasak nije toliko na samom modelu koliko na čitavom ekosustavu oko tog modela. Jednako tako, evidentno je i da ne treba baš svaki zadatak prepustiti agentu pa treba dobro razmisliti treba li uopće u čitavu jednadžbu uplesti nešto nedeterminističko kao što je veliki jezični model. Kada su odluke donesene i kad se konačno odluči koji će se harness koristiti, onda se može primiti posla. Svakako je pozitivno to što se u svakome trenutku za dobar dio onoga što će se raditi zapravo može osloniti na umjetnu inteligenciju i to ne samo da bi rješenja kao što su Claude Code ili ChatGPT Work (Codex) generirala programski kôd, pa čak i čitav workflow za n8n u obliku JSON datoteke koja se lako može uvesti, nego čak i za praktičnije stvarčice kao što je instalacija i pokretanje svega. Stoga je i ono što će se moći vidjeti na idućim stranicama zapravo napravljeno upravo uz pomoć umjetne inteligencije, a ono što je generirano dostupno je na GitHubu pa svatko može eksperimentirati s agentima nakon malo petljanja s instalacijama, konfiguracijama, API ključevima i podešavanjem OAutha za Gmail kroz Google Cloud. Taj se dio, s obzirom na prirodu osmišljenog zadatka, jednostavno ne može izbjeći.

Inicijalni zadatak namjerno je jednostavan. Svakoga radnog dana u 7:30 treba pregledati najviše dvadeset nepročitanih Gmail poruka iz posljednja 24 sata, preskočiti kategorije Promotions i Social, izdvojiti poruke koje traže reakciju te pripremiti sažetak i nacrt odgovora. Model dobiva samo pošiljatelja, predmet i očišćeni tekst same poruke, bez privitaka i povijesti razgovora ako uopće postoji. Vraća strogo strukturiran rezultat: prioritet, oznaku treba li odgovor, sažetak, razlog, skicu poruke i procjenu pouzdanosti. Skica nastaje samo kada je odgovor potreban i pouzdanost je najmanje 0,80. Sam projekt osmišljen je s ciljem da se pokaže koliko malo slobode modelu zapravo treba dati da bi bio koristan, ali i kada ga uopće treba koristiti.

Stvaranje radnih tijekova, a pogotovo kad treba žonglirati s API ključevima i OAuthom, uvijek će trebati nešto vremena da sve proradi, čak i unatoč tome što je sam radni tijek možda sasvim dobro napravljen. Srećom, n8n detekciju i rješavanje problema čini relativno lakim…
Stvaranje radnih tijekova, a pogotovo kad treba žonglirati s API ključevima i OAuthom, uvijek će trebati nešto vremena da sve proradi, čak i unatoč tome što je sam radni tijek možda sasvim dobro napravljen. Srećom, n8n detekciju i rješavanje problema čini relativno lakim…

Najvažnija ograničenja nisu zapisana samo u promptu, a poruka se nikada neće poslati automatski, nego će skica poruke dobiti oznaku AI/Obradjeno ili AI/Za-provjeru i čekati akciju čovjeka (human-in-the-loop), s time da je potrebno u Gmailu prvo ručno dodati ove oznake. Uspješno analizirana poruka bit će označena kao obrađena kako je iduće jutro sustav ne bi opet dohvatio, a ako model prepozna sastanak ili neki rok, u jutarnjem se sažetku pojavljuje prijedlog, ali događaj se ne upisuje sam u kalendar. Već se iz toga vidi da većina posla ovdje zapravo uopće nije agentska. Raspored, dohvat poruka, filtri, ograničenje broja stavki, prag pouzdanosti, oznake i sastavljanje izvještaja determinističke su operacije. LLM je potreban samo tamo gdje sadržaj treba protumačiti, odnosno traži li poruka odgovor, koliko je važna i kako bi skica poruke mogla izgledati. Ništa više od toga.

Isti zadatak na dva načina

Prva varijanta napravljena je kao workflow za n8n od ukupno šesnaest čvorova. Schedule Trigger i Gmail dohvaćaju poruke, Code čvor ih čisti i skraćuje, a Basic LLM Chain sa Structured Output Parserom od modela traži rezultat prema zadanoj shemi. Nakon toga klasičan uvjet provjerava needs_reply i confidence, a ako se dobije pozitivan rezultat, onda će se napraviti skica poruke u Gmailu. U workflowu nema operacije Send ni čvora koji stvara događaj u Google Calendaru. Prednost n8n-a jest u tome što se nakon svakog čvora vidi ulaz i izlaz, pa se pogreške relativno lako mogu identificirati, a ako se koristi n8n u oblaku, tu je dostupan i AI agent kojim se vrlo brzo mogu riješiti mogući problemi.

Ljubitelji maksimalne kontrole i fleksibilnosti vjerojatno će posegnuti za nekim poznatim frameworkom kako bi napravili agentski sustav, a upravo smo to u ovom slučaju napravili i mi…
Ljubitelji maksimalne kontrole i fleksibilnosti vjerojatno će posegnuti za nekim poznatim frameworkom kako bi napravili agentski sustav, a upravo smo to u ovom slučaju napravili i mi…

Druga varijanta se oslanja na Python i vrlo popularan agentski framework LangGraph. Graf ima unaprijed nazvane korake za dohvat poruka, analizu, odluku, izradu skica i generiranje logova. Uvjetni brid vodi prema skici poruke ili izravno prema završetku, a Pydantic provjerava strukturu izlaza modela. LangGraphov checkpoint čuva stanje, dok odvojena evidencija obrađenih poruka osigurava idempotenciju. Naime, ista poruka e-pošte ne smije dobiti dvije skice samo zato što je proces ponovno pokrenut. Zadani način rada je --dry-run što znači da se rezultat sprema lokalno, a ako se sve pokrene s parametrom --apply, onda će biti dozvoljeno stvaranje skica i oznaka. Metoda za slanje poruke e-pošte uopće nije implementirana, što znači da se takvo što nikada niti ne može dogoditi. Uostalom, ono što agent ne bi smio izvršiti, najbolje je nikad ni ne ponuditi kao alat. Jasno, da bi se koristio LangGraph potrebno je i nešto znanja programiranja, no uvijek se za to, kao i naknadne korekcije, može zatražiti pomoć nekog AI modela.

Dakle, n8n omogućuje da se bitno brže dođe do prvog funkcionalnog rezultata, pogotovo ako se koristi n8n u oblaku, a i lakše će ga održavati netko tko nije razvojni inženjer. LangGraph traži više truda oko OAutha, logova, testova i rješavanja pogrešaka, no zauzvrat omogućuje korištenje Gita, pregled promjena i vrlo preciznu kontrolu nad svakim aspektom čitavog agentskog sustava.

Tko se boji kôda još? Ako se s programiranjem i zapne, no dobro se razumiju koncepti, onda nema nikakvog razloga da se za generiranje kôda ne osloni na neki od AI alata…
Tko se boji kôda još? Ako se s programiranjem i zapne, no dobro se razumiju koncepti, onda nema nikakvog razloga da se za generiranje kôda ne osloni na neki od AI alata…

Dokumenti koji ostaju lokalno

Drugi dio projekta ne bavi se obradom poruka e-pošte, nego demonstrira lokalni RAG za pitanja nad vlastitim PDF-ovima, Wordovim dokumentima, tekstovima i bilješkama. Za to se koristi n8n da sve orkestrira, Ollama lokalno izvršava LLM te model za embeddanje, a Qdrant služi za pohranu vektora i metapodataka. Čitav je sustav zamišljen tako da sva tri navedena servisa rade kao Linux kontejneri u Docker Desktopu s WSL 2 backendom. Portovi su vezani samo uz lokalno računalo, Qdrant je zaštićen API ključem, a dokumenti se u kontejner dodaju samo za čitanje, pa se može smatrati da je odrađena i određena sigurnosna higijena, iako bi se tu moglo implementirati još čitav niz drugih mehanizama.

Sam je RAG razdvojen na dva radna tijeka. Prvi učitava dokumente, reže ih na manje komade koji se preklapaju (chunking), odrađuje embedding i upisuje ih u Qdrant zajedno s nazivom izvora. Drugi će primiti pitanje, dohvatiti najrelevantnije isječke i tek ih tada predati lokalnom modelu da se generira odgovor. U samom se odgovoru mora navesti izvor, a kada u dokumentima nema dovoljno podataka, ispravan i jedini prihvatljiv rezultat glasi da odgovor nije pronađen. Eventualne upute (promptovi) skriveni u dokumentima smatraju se običnim sadržajem, a ne novom instrukcijom agentu.

Lokalni RAG demonstrira kako se može iskoristiti n8n u kombinaciji s lokalnim LLM-ovima i kroz relativno jednostavan radni tijek napraviti chatbot za razgovor s vlastitim dokumentima. Lokalno je doista i lokalno, pa onima kojima je važna sigurnost i privatnost ovako će je i postići…
Lokalni RAG demonstrira kako se može iskoristiti n8n u kombinaciji s lokalnim LLM-ovima i kroz relativno jednostavan radni tijek napraviti chatbot za razgovor s vlastitim dokumentima. Lokalno je doista i lokalno, pa onima kojima je važna sigurnost i privatnost ovako će je i postići…

Automatizirati ili ne?

Promatrajući oba pristupa za automatizaciju uz agenta, ali i za korištenje LLM-ova lokalno na računalu kroz Ollamu, možda je najvažniji zaključak da je pogrešno promatrati koje je rješenje ili koji je pristup bolji ili manje loš. Nekome će se n8n pokazati kao sve što je potrebno, drugi neće ni pomisliti na nešto drugo do LangGrapha te korištenja vlastite vektorske baze. Najvažnija je lekcija to da se autonomija agenata mora i može pravilno ograničiti. U sve tri varijante, model radi samo ono u čemu klasična pravila nisu dobra, odnosno tumači jezik, procjenjuje namjeru i oblikuje prijedlog. Sve ono ostalo što se može okarakterizirati deterministički, prepušteno je standardnom tijeku rada ili je ostalo u programskom kôdu. Tako se dobiva sustav čije se ponašanje može testirati dok se greške mogu dobrim dijelom spriječiti ili barem smanjiti.

Osim toga, treba dobro promisliti isplati li se automatizacija uopće. Ako čovjek dvadeset poruka pregleda za desetak minuta, održavanje OAutha, modela i samoga radnog tijeka lako može pojesti sve što se mislilo uštedjeti. Uostalom, o ekonomici korištenja modela naveliko smo pisali u prvom dijelu. Ne treba zaboraviti ni da, kad se uvede agentski sustav ili bilo kakav drugi proces automatizacije, to ne znači odmah i da je posao sveden na nulu, nego da se sada posao premješta s obavljanja zadataka koji su automatizirani na održavanje sustava automatizacije. A kada su u pitanju agentski sustavi, zbog svoje stohastičke prirode, takvo održavanje može biti prilično naporno u produkciji. Dakle, agent ima smisla kada je posao dovoljno frekventan, konstantan i mjerljiv, kada pogreška ili kašnjenje imaju visoku cijenu te kad unutar procesa doista postoji potreba za donošenjem odluka koje baš nije praktično rješavati nizom strogo zadanih uvjeta. Sve ostalo možda se vrlo lako može odraditi tek pomno osmišljenim radnim tijekom, bez uplitanja umjetne inteligencije.

 

Bug 406 rujan 2026.

AI agenti