## 🧩 **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) |