Umjetna inteligencija je odavno prestala biti samo chatbot koji odgovara na pitanja. Danas govorimo o AI agentima — sustavima koji mogu samostalno planirati korake, pozivati alate, pretraživati vanjske izvore podataka i donositi odluke bez ljudske intervencije u svakom koraku. U ovom tutorijalu prolazimo kroz osnovnu arhitekturu takvog agenta, temeljenu na kombinaciji LLM-a (Large Language Model) i RAG-a (Retrieval-Augmented Generation).
Što zapravo radi AI agent
Klasičan LLM poziv izgleda ovako: pošaljete prompt, dobijete odgovor. Agent je nešto drugačije — on radi u petlji: promišlja što treba napraviti, poziva alat (funkciju, API, bazu podataka), analizira rezultat i ponavlja postupak dok zadatak nije završen. Ta petlja se često naziva ReAct obrazac (Reasoning + Acting).
Korisnik → Agent razmišlja → Agent poziva alat → Rezultat alata → Agent razmišlja dalje → ... → Konačan odgovor
Zašto dodati RAG
LLM sam po sebi zna samo ono što je naučio tijekom treniranja — a to znanje ima datum isteka i ne uključuje vaše interne dokumente, bazu proizvoda ili svježe podatke. RAG rješava taj problem tako da prije generiranja odgovora dohvati relevantne dijelove teksta iz vaše baze znanja i ubaci ih u kontekst modela. Rezultat: agent odgovara na temelju stvarnih, aktualnih podataka umjesto da "izmišlja" (halucinira).
Osnovni koraci izrade
1. Pripremite bazu znanja
Dokumente (PDF-ove, wiki stranice, tickete) podijelite na manje dijelove (chunkove) od otprilike 300-800 tokena, uz malo preklapanja između njih kako se rečenice ne bi prekidale na pola.
2. Generirajte embeddinge i spremite ih u vektorsku bazu
from openai import OpenAI
client = OpenAI()
embedding = client.embeddings.create(
model="text-embedding-3-small",
input=chunk_text
).data[0].embedding
vector_db.upsert(id=chunk_id, vector=embedding, metadata={"text": chunk_text})
Popularni izbori za vektorsku bazu: Pinecone, Weaviate, Qdrant ili čak PostgreSQL s pgvector ekstenzijom ako želite ostati na poznatoj infrastrukturi.
3. Definirajte alate koje agent smije koristiti
Svaki alat opišite jasnim imenom, opisom i shemom parametara — model bira alat na temelju tog opisa, pa što je opis precizniji, to je manje pogrešnih poziva.
{
"name": "search_knowledge_base",
"description": "Pretražuje internu bazu znanja i vraća relevantne odlomke teksta.",
"parameters": {
"type": "object",
"properties": {
"query": { "type": "string", "description": "Pretraživački upit" }
},
"required": ["query"]
}
}
4. Postavite agentnu petlju
U svakom koraku model dobiva povijest razgovora i popis dostupnih alata. Ako model odluči pozvati alat, vi izvršite taj poziv u svom kodu i vratite rezultat modelu kao novu poruku. Petlja se ponavlja dok model ne vrati konačan tekstualni odgovor bez novog poziva alata.
5. Ograničite broj koraka i dodajte zaštitne mehanizme
Bez limita agent može upasti u beskonačnu petlju pozivanja istog alata. Postavite maksimalan broj iteracija (npr. 10-15) i logirajte svaki poziv radi debugiranja.
Česte greške početnika
- Preveliki chunkovi — ako su dijelovi teksta preveliki, dohvat postaje netočan jer se relevantna informacija "utapa" u nebitnom tekstu.
- Nema re-rankinga — sirovi rezultati vektorske pretrage nisu uvijek najbolji; dodatni sloj re-rankinga (npr. cross-encoder model) često značajno poboljša kvalitetu.
- Previše alata odjednom — agent s 30 alata teže bira ispravan nego agent s 5 dobro opisanih alata. Grupirajte funkcionalnosti.
- Nema memorije grešaka — ako alat vrati grešku, ta informacija mora otići natrag modelu da može prilagoditi sljedeći korak, a ne samo prekinuti izvršavanje.
Zaključak
Kombinacija LLM-a i RAG-a nije samo trend nego praktičan način da AI sustav bude koristan izvan onoga što je model "zapamtio" tijekom treniranja. Krenite od jednostavne petlje s jednim ili dva alata, izmjerite gdje agent najčešće griješi, i tek onda dodajte složenost. Najbolji agenti u produkciji rijetko su najsloženiji — najčešće su najpouzdaniji.




