Plaan.md 2.6 KB

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