🧩 RAG (Retrieval-Augmented Generation) voog Weaviate + LLM + Embedding
📄 PDF-d / artiklid
│
│ ① Ekstraktime teksti (PyMuPDF, PDFPlumber vms)
│
▼
🔤 Tekstilõigud (chunks)
│ Näiteks 500–800 tähemärki iga lõigu kohta
│
│ ② SentenceTransformer -> loob embeddingud
│ (nt nomic-ai/nomic-embed-text-v1.5)
│
▼
🧮 Embeddingud = vektorid [ -0.13, 0.45, ..., 0.88 ]
│
│ ③ Salvestatakse Weaviate’i:
│
│ class: "Article"
│ properties:
│ • content: "textilõik"
│ • file_name: "2012.08388v2.pdf"
│ • source_url: "https://arxiv.org/abs/2012.08388"
│ • page_start: 0
│ • page_end: 800
│ • _vector: [-0.13, 0.45, ..., 0.88]
│
▼
🗄️ **Weaviate** = vektoriandmebaas
│ - Hoiab kõik lõigud ja nende vektoreid
│ - Kasutab HNSW indeksit semantiliste otsingute jaoks
│
│ ④ Kui kasutaja küsib midagi:
│ "Mis on artiklite põhiteema?"
│
│ ⑤ Embedder loob ka küsimusele vektori
│
▼
🔍 **Weaviate otsib lähimad `_vector`-id**
│ - arvutab kosinus-sarnasuse
│ - tagastab 5–10 kõige sarnasemat `content` lõiku
│
▼
🧠 **LLM (nt Mistral, Llama, GPT-4, jms)**
│ ⑥ saab päringu + konteksti:
│ ```
│ KONTEKST:
│ [Lõik 1: "...liiklusohutuse modelleerimine..."]
│ [Lõik 2: "...õnnetuste raskusaste Poissoni regressiooniga..."]
│
│ KÜSIMUS:
│ Mis on artiklite põhiteema?
│ ```
│
│ ⑦ LLM genereerib vastuse:
│ → “Kõik artiklid käsitlevad liiklusõnnetuste raskusastme modelleerimist...”
│
▼
✅ Vastus kasutajale
🧠 Olulisemad seosed
| Etapp |
Roll |
Kus toimub |
| ① PDF → tekst |
Ekstraktsioon |
Python (PyMuPDF, pdfminer) |
| ② Tekst → vektor |
Embedding |
SentenceTransformer |
| ③ Salvestus |
_vector + metaandmed |
Weaviate |
| ④ Päring → embedding |
Embedding |
Sama mudel (nomic-ai/nomic-embed-text-v1.5) |
| ⑤ Vektoriotsing |
Semantiline sarnasus |
Weaviate (HNSW indeks) |
| ⑥ Konteksti liitmine |
Kontekstualiseerimine |
Python / LLM wrapper |
| ⑦ Vastuse genereerimine |
Looduskeelne väljund |
LLM (nt Mistral) |