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:

  1. Ako indeks već postoji (faiss.index i all_vectors.txt), koristi se postojeći.
  2. Ako ne postoji (ili je force_rebuild=True), izračunavaju se novi vektori i gradi se novi FAISS indeks.
  3. Tijekom upita, korisnički unos se također vektorizira i pretražuju se top K najsličnijih chunkova u indeksu.
  4. Ako je sličnost iznad praga (u našem slučaju 0.75), vraća se povezani odgovor.

Chatbot API (main.py)

  1. Prvo se pokušava pronaći odgovor u FAISS bazi znanja.
  2. Ako nema dovoljno sličnosti (nema odgovora iz baze), koristi se Gemini API (Google Generative AI) kao rezervna opcija.
  3. Chatbot automatski dodaje upute da se odgovori trebaju davati na hrvatskom jeziku.
    U projektu je korišten model genai.GenerativeModel("gemini-1.5-flash").

Primjer toka

Korisnik pita:
Što je projektni plan?

Sustav:

  1. Vektorizira pitanje
  2. Pretraži FAISS indeks
    • Ako nađe chunk s visokom sličnosti → vrati odgovarajući odgovor
    • Ako ne → koristi Gemini API za generiranje odgovora