weaviate kasutamine.md 6.6 KB

Jah, absoluutselt! RAG süsteem kasutab mõlemat baasi paralleelselt:


Kuidas andmeid kasutatakse (Variant A - kaheastmeline süsteem):

1. Weaviate baas → Artikli taseme metaandmed

Mida kasutatakse:

  • summary_et – DeepSeek genereeritud eestikeelne kokkuvõte
  • key_concepts – Märksõnad
  • authors – Autorid
  • transport_context – Transpordikonteksti analüüs (DeepSeek JSON)
  • relevance_score – Relevantsusskoor (1-10)
  • title – Artikli pealkiri

Kus see ilmub:

# src/query_hybrid.py, rida ~40
articles = search_weaviate_articles_all(limit=10000)  # Loeme KÕIK artiklid Weaviate'st

# src/generate_answer.py, rida ~30
context_parts.append("=== ARTICLE SUMMARIES ===\n")
for i, art in enumerate(articles[:5], 1):
    article_text = f"""[Article {i}] {art['title']}
Authors: {', '.join(art['authors'][:3])}
Keywords: {', '.join(art['key_concepts'][:5])}
Summary (Estonian): {art['summary_et'][:350]}...  # <-- WEAVIATE'ST!
"""

Näide kontekstis LLM'ile:

=== ARTICLE SUMMARIES ===

[Article 1] Association between intersection characteristics and perceived crash risk among school-aged children
Authors: Gain Lee
Keywords: subjektiivselt tajutud avarii risk, jalakäija, ristmik, kooliealised lapsed, keskkonnaomadused
Summary (Estonian): **Põhjalik kokkuvõte artiklist: "Association between intersection characteristics and perceived crash risk among school-aged children"**

### 1. ARTIKLI PEAMISED PUNKTID

**Uurimisküsimused ja eesmärgid:**
Artikli peaeesmärk on välja selgitada, millised ristmike ümbruse keskkonnaomadused mõjutavad 10–12-aastaste koolilaste **subjektiivselt tajutud avarii riski**...

2. pgvector (PostgreSQL) → Chunk taseme täpsed tsitaadid

Mida kasutatakse:

  • chunks.text – Täpne tekstilõik PDF-ist (pdfplumber ekstraktitud)
  • chunks.page – Lehekülje number
  • chunks.embedding – bge-small-en-v1.5 vektor (384-dim)
  • chunks.similarity – Cosine similarity query'ga (0.7-0.9)

Kus see ilmub:

# src/query_hybrid.py, rida ~100
chunks = search_pgvector_chunks(query, article_ids, limit=top_chunks)

# src/generate_answer.py, rida ~50
context_parts.append("\n=== TEXT EXCERPTS FROM SOURCES ===\n")
for i, chunk in enumerate(unique_chunks[:15], 1):
    chunk_text = f"""[Excerpt {i}] ({chunk['filename']}, page {chunk['page']})
{chunk['text'][:280]}  # <-- PGVECTOR'IST!
"""

Näide kontekstis LLM'ile:

=== TEXT EXCERPTS FROM SOURCES ===

[Excerpt 1] (Association-between-intersection-characteristics-and-p_2016_Accident-Analysi.pdf, page 2)
the public is broadly correct (Elvik and Bjørnskau, 2005). However, children's ability to accurately assess crash risk is limited by their cognitive development stage. Research shows that school-aged children (10-12 years) can identify dangerous intersections but their perception...

[Excerpt 2] (Association-between-intersection-characteristics-and-p_2016_Accident-Analysi.pdf, page 2)
associated with their risk perception. Hypothetically, the patterns of perceived crash risk for school-aged children at intersections should correlate with actual crash statistics, but this requires empirical validation...

Täielik andmevoog (samm-sammult):

1. Kasutaja küsimus: "young driver accident risk"
         ↓
2. query_hybrid.py: search_weaviate_articles_all()
   → Loeb KÕIK 769 artiklit Weaviate'st (title, summary_et, key_concepts, authors, transport_context)
         ↓
3. query_hybrid.py: search_articles_by_query()
   → Arvutab iga artikli summary_et embedding'u (bge-small)
   → Võrdleb query embedding'uga
   → Sorteerib similarity järgi
   → Tagastab TOP 10 artiklit
         ↓
4. query_hybrid.py: search_pgvector_chunks()
   → Võtab TOP 10 artikli UUID'd
   → Otsib pgvector'ist chunk'e, mis kuuluvad neile artiklitele
   → Sorteerib similarity järgi
   → Tagastab TOP 20 chunk'i
         ↓
5. generate_answer.py: build_context()
   → Kombineerib:
     - Weaviate artiklite metaandmed (summary_et, authors, keywords)
     - pgvector chunk'ide täpsed tekstid (text, page)
   → Loob ühtse konteksti string'i (~5000 märki)
         ↓
6. generate_answer.py: generate_answer()
   → Saadab konteksti + query llama.cpp'le
   → LLM genereerib vastuse, kasutades MÕLEMAT allikat:
     - Weaviate: üldine kontekst, kokkuvõtted, transpordikontekst
     - pgvector: täpsed tsitaadid, leheküljed, konkreetsed väited
         ↓
7. Vastus kasutajale:
   "Noorte juhtide avarii risk on märkimisväärselt kõrgem [Article 1] [Excerpt 3]..."

Kontrolli, et Weaviate andmeid kasutatakse:

Test 1: Vaata konteksti sisu

Lisa generate_answer.py funktsiooni build_context() lõppu:

def build_context(...):
    # ... olemasolev kood
    
    final_context = "\n".join(context_parts)
    
    # DEBUG: salvesta fail
    with open("/tmp/rag_context_debug.txt", "w") as f:
        f.write(final_context)
    
    print(f"📝 Kontekst salvestatud: /tmp/rag_context_debug.txt")
    return final_context

Käivita:

python src/generate_answer.py
cat /tmp/rag_context_debug.txt

Peaks näitama:

  • ARTICLE SUMMARIES sektsioon → Weaviate summary_et
  • TEXT EXCERPTS sektsioon → pgvector chunks.text

Test 2: Kontrolli, et Weaviate'st tulevad summary_et'd

python -c "
from src.query_hybrid import search_weaviate_articles_all

articles = search_weaviate_articles_all(limit=5)
for art in articles[:3]:
    print(f\"Title: {art['title']}\")
    print(f\"Summary: {art['summary_et'][:100]}...\")
    print(f\"Authors: {art['authors']}\")
    print('-'*60)
"

Peaks näitama Weaviate'st tulnud eestikeelseid kokkuvõtteid.


Kokkuvõte:

Allikas Mida annab Kuidas kasutatakse
Weaviate Artiklite metaandmed (DeepSeek analüüs, kokkuvõtted, märksõnad, transpordikontekst) Artikli taseme semantiline otsing + LLM konteksti "üldine taust"
pgvector Täpsed chunk'id PDF-ist (tekst, leheküljed, similarity) Chunk taseme semantiline otsing + LLM konteksti "täpsed tsitaadid"
LLM (unsloth) Genereerib vastuse, kombineerides mõlema allika andmeid Loeb konteksti ja tsiteerib artikleid/lõike numbrite järgi

Jah, Weaviate andmeid kasutatakse! Ilma Weaviate'ta ei oleks:

  • ❌ Eestikeelseid kokkuvõtteid (summary_et)
  • ❌ Märksõnu (key_concepts)
  • ❌ Transpordikonteksti analüüsi (transport_context)
  • ❌ DeepSeek genereeritud metaandmeid

Need on kriitiline osa RAG vastuse kvaliteedist! 🎯 [^1][^2][^3]