Suurepärane küsimus! Sul on kaks paralleelset süsteemi sama eesmärgiga (teadusartiklite analüüs ja RAG), aga erineva tehnoloogiaga. Teeme strateegilise plaani, kuidas neid integreerida.
| Aspekt | Praegune süsteem (pgvector) | Weaviate süsteem (DeepSeek) |
|---|---|---|
| Vektorbaas | PostgreSQL + pgvector | Weaviate |
| Embeddings | bge-small-en-v1.5 (384-dim, lokaalne) | ? (tõenäoliselt DeepSeek/OpenAI API) |
| Teksti ekstrakt | pdfplumber → structured JSON → chunks | ? (tõenäoliselt sarnane või lihtsam) |
| Metaandmed | raw_documents, processed_documents, chunks (lehekülg, hash, timestamps) | Weaviate properties: title, authors, year, doi, abstract_en, summary_et, key_concepts, methods_used, transport_context, relevance_score |
| Analüüs | Puudub (ainult tekst + chunkid) | DeepSeek API genereerib: kokkuvõtte (summary_et), märksõnad, meetodid, transpordikonteksti, relevantsusskoor |
| Kasutus | Semantiline otsing chunkide tasemel | Semantiline otsing artiklite tasemel + rikkalikud metaandmed |
pgvector süsteem:
✅ Täielik kontroll, lokaalne, odav.
✅ Chunk-taseme granulaarsus (täpne tsiteerimine).
✅ Kõva seos PDF-failiga (file_hash, lehekülg).
❌ Puudub artikli-taseme semantiline analüüs (meetodid, järeldused, transpordikontekst).
Weaviate + DeepSeek süsteem:
✅ Rikkalikud metaandmed (automaatselt genereeritud kokkuvõtted, märksõnad, transpordikontekst).
✅ Artikli-taseme otsing (nt "leia artiklid, mis käsitlevad noorte juhtide riski").
❌ Ei pruugi olla chunk-taseme täpsust (raske tsiteerida konkreetset lõiku).
❌ API kulud (DeepSeek), sõltuvus välisest teenusest.
Idee: Kasuta mõlemat baasi paralleelselt erinevate otsingutasemete jaoks.[weaviate]
text
Kasutaja päring ↓ 1. Weaviate otsing (artikli tase) - Leia 5–10 asjakohasemat artiklit - Kasuta rikkalikke metaandmeid (transport_context, methods_used, key_concepts) ↓ 2. pgvector otsing (chunk tase) - Võta Weaviate'st leitud artiklite file_hash'd - Otsi nende artiklite chunkidest täpsemaid lõike ↓ 3. LLM vastus (unsloth 120B) - Kontekst: Weaviate metaandmed + pgvector chunkid - Genereeri põhjalik vastus
Eelised:
Parim mõlemast maailmast: artikli-taseme rikkalikkus + chunk-taseme täpsus.[galileo]
Saad kasutada DeepSeeki analüüsi kui "filtrit" ja pgvectorit kui "sügavat otsingut".
Weaviate'i kulud on madalamad (ainult artiklite tase, mitte chunkid).
Kuidas implementeerida:
Lisa Weaviate artikli ID pgvector baasi:
raw_documents tabelisse uus veerg weaviate_article_id UUID.
Kui PDF on töödeldud, kontrolli Weaviate'st kas artikkel on olemas (source_file või file_hash järgi).
Kui on, salvesta selle article_id pgvector tabelisse.
Loo hübriidpäringu skript (src/query_hybrid.py):
python
# 1. Otsi Weaviate'st artikleid weaviate_results = weaviate_client.query.get("ScientificArticle", ["title", "article_id", "summary_et"]) \ .with_near_text({"concepts": [user_query]}) \ .with_limit(10) \ .do() # 2. Võta article_id'd article_ids = [r["article_id"] for r in weaviate_results] # 3. Leia pgvectorist nende artiklite chunkid query_emb = get_embedding(user_query) pg_results = cur.execute(""" SELECT c.id, c.text, c.page, r.filename, r.weaviate_article_id FROM chunks c JOIN raw_documents r ON c.raw_doc_id = r.id WHERE r.weaviate_article_id = ANY(%s) ORDER BY c.embedding <=> %s::vector LIMIT 20 """, (article_ids, query_emb)) # 4. Kombineeri kontekst ja saada unsloth'ile context = { "articles": weaviate_results, # üldised metaandmed "chunks": pg_results, # täpsed tsitaadid } answer = generate_with_unsloth(user_query, context)
Idee: Loobud pgvectorist, migreerid kõik praegused chunkid Weaviate'i, kasutad ainult Weaviate'i.[luminary]
Plussid:
Üks baas, lihtsam hooldada.
Weaviate on võimsam kui pgvector (HNSW indeks, parem skaleerumine).[github]
Miinused:
Kaotad PostgreSQL eelised (ACID, relatsionaalsed seosed, tuttav SQL).
Weaviate'i hosting kulukas (kui kasutad pilve) või vajalik ise haldamine (Docker).
Kui valid selle: loo Weaviate'is kaks klassi:
ScientificArticle (juba olemas)
ArticleChunk (uus):
python
{ "class": "ArticleChunk", "properties": [ {"name": "text", "dataType": ["text"]}, {"name": "page", "dataType": ["int"]}, {"name": "chunk_index", "dataType": ["int"]}, {"name": "article", "dataType": ["ScientificArticle"]}, # cross-reference ], "vectorizer": "text2vec-transformers" # või text2vec-openai }
Idee: Kopeeri Weaviate'st metaandmed (summary_et, key_concepts, transport_context jne) PostgreSQL'i ja kasuta ainult pgvectorit.[tigerdata]
Plussid:
Üks baas (PostgreSQL), lihtne hooldada.
Säilid täielik kontroll ja sõltumatus.
Miinused:
Kaotad Weaviate'i semantilise otsingu eelised artikli tasemel (nt "leia artiklid transport_context järgi").
Pead ise tegema DeepSeek API kutsed PostgreSQL'i (nt trigger või cronjob).
Kui valid selle:
Lisa raw_documents tabelisse JSONB veerud:
sql
ALTER TABLE raw_documents ADD COLUMN metadata JSONB;
Loo skript, mis:
loeb Weaviate'st kõik artiklid,
leiab pgvectorist vastava raw_documents rea (file_hash järgi),
uuendab metadata veergu Weaviate andmetega.
Parim täpsus: artikli-taseme metaandmed (Weaviate) + chunk-taseme tsitaadid (pgvector).[greennode]
Paindlikkus: kasutaja saab valida, kas tahab "laia ülevaadet" (Weaviate) või "süvitsi tsitaate" (pgvector).
Kulude optimeerimine: Weaviate ainult artiklitele (~50–200 kirjet), pgvector chunkidele (~1000–5000 kirjet).
| Samm | Tegevus | Tulemus |
|---|---|---|
| 1. Skeemi muutmine | Lisa raw_documents tabelisse weaviate_article_id UUID |
Seos pgvector ↔ Weaviate |
| 2. Sync skript | Loo src/sync_weaviate.py: loe Weaviate, matchi source_file või file_hash, uuenda weaviate_article_id |
Seosed täidetud |
| 3. Hübriidpäringu skript | Loo src/query_hybrid.py: 1) Weaviate artikli otsing, 2) pgvector chunk otsing nende artiklite pealt |
Töötav hübriidotsing |
| 4. LLM integratsioon | Lisa unsloth 120B vastuse genereerimine: võta kontekst Weaviate + pgvector, saada llama.cpp'le | Täielik RAG |
| 5. Test ja hindamine | Tee 10–20 testpäringut, kontrolli kas vastused on täpsemad kui ainult ühe baasiga | Valideerimine |
Kui DeepSeeki genereeritud metaandmed pole vajalikud iga päring jaoks:
Kasuta ainult pgvectorit päringuteks.
Säilita Weaviate'i kui "raamatu ülevaade" või "admin dashboard" artiklite metaandmete vaatamiseks.
Ühenda need UI tasemel: nt kui kasutaja vaatab pgvectorist leitud chunki, näita talle ka Weaviate'st artikli summary_et ja transport_context.
Milline variant sobib sulle paremini? Kui valid Variandi A, saame kohe alustada sync_weaviate.py ja query_hybrid.py skriptide kirjutamisega.