AI - SirCrayzyJelly/AI_Tutor GitHub Wiki
AI arhitektura
Ovaj AI modul koristi vektorizaciju teksta, razlaganje (chunkanje) pitanja i FAISS indeksiranje kako bi omogućio brz i precizan odgovor na korisnička pitanja kolegija na fakultetu.
Kada ne postoji dovoljan odgovor u bazi znanja, koristi se Gemini API kao rezervna (fallback) opcija.
initial_data.json → [generator_chunks.py] → initial_chunks.json → [vektorizacija.py] → FAISS indeks → [main.py] FastAPI servis
Generator chunkova
Razlaganje (chunkanje) koristi se kako bi se iz jednog složenog pitanja izdvojilo više jednostavnijih podupita koji su semantički značajni.
Sustav analizira izvorno pitanje i razlaže ga na manje jedinice koristeći ključne riječi i interpunkcijske znakove (poput: i, te, kako, odnosno, točka i sl.).
Na kraju se izvorno pitanje također dodaje kao zasebna jedinica ("chunk").
Svaka jedinica povezana je s pripadajućim odgovorom i, ako postoji, odgovarajućom poveznicom.
Rezultat se pohranjuje u datoteku initial_chunks.json
.
Razlaganjem se povećava razina granularnosti pretraživanja, što povećava vjerojatnost da korisničko pitanje — ili njegov dio — pronađe odgovarajuće podudaranje u bazi znanja.
Primjer:
Pitanje: "Što je proces, kako definiramo procese životnog ciklusa programskog proizvoda te od čega se oni sastoje?"
Chunk: "Što je proces?"
Vektorizacija i FAISS pretraga
Vektorizacija je proces pretvaranja teksta (chunkova) u numeričke vektore pomoću unaprijed treniranog modela SentenceTransformer
.
U ovom projektu koristi se model sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2
, koji podržava više jezika, uključujući i hrvatski.
FAISS indeks
FAISS (Facebook AI Similarity Search) omogućuje brzo pretraživanje sličnosti između vektora korisničkih pitanja i postojećih chunkova u bazi.
Proces:
- Ako indeks već postoji (
faiss.index
iall_vectors.txt
), koristi se postojeći. - Ako ne postoji (ili je
force_rebuild=True
), izračunavaju se novi vektori i gradi se novi FAISS indeks. - Tijekom upita, korisnički unos se također vektorizira i pretražuju se top K najsličnijih chunkova u indeksu.
- Ako je sličnost iznad praga (u našem slučaju
0.75
), vraća se povezani odgovor.
Chatbot API (main.py)
- Prvo se pokušava pronaći odgovor u FAISS bazi znanja.
- Ako nema dovoljno sličnosti (nema odgovora iz baze), koristi se Gemini API (Google Generative AI) kao rezervna opcija.
- Chatbot automatski dodaje upute da se odgovori trebaju davati na hrvatskom jeziku.
U projektu je korišten modelgenai.GenerativeModel("gemini-1.5-flash")
.
Primjer toka
Korisnik pita:
Što je projektni plan?
Sustav:
- Vektorizira pitanje
- Pretraži FAISS indeks
- Ako nađe chunk s visokom sličnosti → vrati odgovarajući odgovor
- Ako ne → koristi Gemini API za generiranje odgovora