RAG (Retrieval-Augmented Generation) on arhitektuur, kus LLM-i vastused tehakse täpsemaks, andes talle enne vastamist juurde infot välisest teadmisteallikast (nt vektoriandmebaas, failid, API). [3][6][14]
Lühidalt: RAG = vektorotsing (retrieval) + LLM-i vastuse genereerimine (generation), kus vektorid on tehniline viis teksti tähendust numbritena esitada ja kiiresti “sama mõttega” tekste üles leida. [5][9][12][14]
Citations: [1] Tootmisküpsete RAG-põhiste AI-rakenduste ehitamine - Acceli https://www.acceli.ee/blog/building-production-ready-ai-applications-with-rag [2] Mis on RAG-süsteem ja kuidas see töötab? Põhjalik ... - Tecnoloblog https://www.tecnoloblog.com/et/sistemas-rag/ [3] retrieval-augmented generation - AKIT https://akit.cyber.ee/term/17003-retrieval-augmented-generation [4] Henrik Aavik's Post - LinkedIn https://www.linkedin.com/posts/henrikaavik_mis-on-rag-ja-miks-see-oluline-on-k%C3%B5ik-activity-7403442746532708352-7GHf [5] RAG ja Ai4Value älytietokanta - Ai4Value https://ai4value.com/fi/rag-ja-ai4value-alytietokanta/ [6] Mikä on RAG? - alci.dev https://www.alci.dev/fi/que-es/rag [7] Rag vs. Vektor-Datenbank https://www.reddit.com/r/LocalLLaMA/comments/17qse19/rag_vs_vector_db/ [8] RAG - Tekoälyn sanakirja https://ai-sanakirja.fluentia.fi/rag.html [9] RAG és vektoros termékkeresés az ágens alapú ... - ventic https://ventic.ai/hu/faq/rag-s-vektoros-termkkeress-az-gens-alap-kereskedelemben [10] Mikä on RAG? https://arjenai.fi/blog/mik--on-rag [11] Oman datan ja tekoälyn yhdistäminen – RAG-mallin anatomia https://arena.jamk.fi/fi/arena-pro/oman-datan-ja-tekoalyn-yhdistaminen-rag-mallin-anatomia/ [12] RAG (Retrieval Augmented Generation) — простое и ... https://habr.com/ru/articles/779526/ [13] Mis on RAG - AppStar https://appstar.com.ru/et/glossary/rag/ [14] Mis on AI RAG? Selge ja konkreetne juhend Retrieval-Augmented ... https://sider.ai/et/blog/other/what-is-ai-rag-a-clear-no-fluff-guide-to-retrieval-augmented-generation [15] Why vector search RAG fails (try these methods instead) https://www.youtube.com/watch?v=AwwCY4wqGyQ
Kuidas ehitada lihtsat RAG süsteemi
Lihtsa RAG-süsteemi jaoks piisab neljast sammust: andmete laadimine, embedding’ute loomine, vektorotsing ja vastuse genereerimine. [1][2][3][4]
Lihtne näide: üks Markdown-fail, mille jagad lõikudeks tühjade ridade või maks-pikkuse järgi. [1][4]
Kontseptsioonina piisab isegi Python-klassist VectorDatabase, mis hoiab listi {"id", "vector", "metadata"} ja teeb kosinus-sarnasuse otsingu. [2]
prepare_data.py: loeb failid, tükeldab. [1][4]create_embeddings.py: teeb embeddingud dokulõikudele ja salvestab. [1][2][4]store_faiss.py või oma vector_db.py: ehitab vektorindeksi. [1][2][4]generate_answer.py: teeb query → retrieve → prompt → LLM. [1][3][5][4]Kui tahad, võin järgmises sammus visata sulle konkreetse, võimalikult lühikese Python-näite: üks skript, mis loeb .txt-faili, ehitab mälus vektorindeksi (nt sentence-transformers + faiss või puhas numpy) ja laseb käsurealt küsida.
Citations: [1] How to Build a RAG System Step by Step (New Guide) https://www.designveloper.com/blog/how-to-build-rag/ [2] Build A Vector Database From Scratch To Understand RAG In Depth https://www.intoai.pub/p/build-a-vector-database-from-scratch [3] Code a simple RAG from scratch - Hugging Face https://huggingface.co/blog/ngxson/make-your-own-rag [4] 7 Steps to Build a Simple RAG System from Scratch - KDnuggets https://www.kdnuggets.com/7-steps-to-build-a-simple-rag-system-from-scratch [5] Build a Simple RAG Pipeline in 30 Minutes! https://www.youtube.com/watch?v=gcqp3Fbv4_o [6] How to Use Vector Databases for RAG - LangChain Tutorials https://langchain-tutorials.com/lessons/rag-applications/lesson-12 [7] Peale põhilise toomise-liitmise põlvkonna (RAG) https://tilde.ai/et/blog/going-beyond-simple-rag/ [8] 2-Build RAG Pipeline From Scratch-Data Ingestion to Vector DB Pipeline-Part 1 https://www.youtube.com/watch?v=MykcjWPJ6T4 [9] Kokkama Ragnega https://www.kokkama.ee [10] Kokkama - Ragne Värk (@kokkamaragnega) https://www.facebook.com/kokkamaragnega/?locale=et_EE [11] Nii kreemine, nii lihtne, nii hea☺️ Pastaroog 15 minutiga ... https://www.facebook.com/kokkamaragnega/videos/nii-kreemine-nii-lihtne-nii-hea%EF%B8%8F-pastaroog-15-minutigasee-retsept-ei-vea-alt-kui/1255769306524762/ [12] Raglan shrnutí, líný raglán https://www.youtube.com/watch?v=3lZdEHEKTjc [13] Good lint-free rags https://www.reddit.com/r/finishing/comments/1d4jvfc/good_lintfree_rags/ [14] Meet the RagLite, a Light You Can Roll Up, Beat Up, & Hang Up Anywhere https://nofilmschool.com/2014/05/raglite-light-you-can-roll-up-beat-up-hang-up-anywhere [15] rag company products https://www.reddit.com/r/AutoDetailing/comments/y5gujm/rag_company_products/
Millised on parimad embeddingu mudelid RAG jaoks
RAG-i jaoks on praegu levinumad “parimad” embeddingu mudelid perekondadena: E5, BGE, GTE jms, kus konkreetne valik sõltub keelest, kiirusest ja riistvarast. [1][2][3][4]
intfloat/e5-base-instruct või väiksem e5-small – hea täpsuse/kiiruse suhe, spetsiaalselt query–doc retrieval’i jaoks. [2][3][4][5]bge-base-en-v1.5 või uuem bge-m3 – väga tugevad RAG benchmarkidel, hästi fine-tunitavad. [1][6][4][5]e5-large-instruct – kõrgem recall ja parem semantika, aga aeglasem. [2][3]e5-small – väga kiire, sobib suure indeksi ja reaalaja RAG jaoks, Top-5 recall endiselt väga hea. [2]text-embedding-3 seeria, Cohere Embed v3, Voyage-multilingual-2 – hästi optimeeritud RAG jaoks, kui vendor-lock ei sega. [1][6][5][8]Kui ütled, mis keeled ja mis riistvaral (CPU/GPU, single-node vms) tahad jooksutada, võin soovitada 1–2 väga konkreetset mudelit ja isegi anda valmis sentence-transformers mudelinimed.
Citations: [1] 5 Best Embedding Models for RAG: How to Choose the ... https://greennode.ai/blog/best-embedding-models-for-rag [2] Benchmark of 16 Best Open Source Embedding Models for RAG https://research.aimultiple.com/open-source-embedding-models/ [3] Embedding Model | Sai's Notebook https://sai-tai.com/ai/agentic-system/embedding-model/ [4] Best Open-Source Embedding Models Benchmarked and Ranked https://supermemory.ai/blog/best-open-source-embedding-models-benchmarked-and-ranked/ [5] Choosing the Best Embedding Models for RAG and Document ... https://www.beam.cloud/blog/best-embedding-models [6] Top Embedding Models in 2025 — The Complete Guide - Artsmart.ai https://artsmart.ai/blog/top-embedding-models-in-2025/ [7] Leading open-source embedding model https://www.reddit.com/r/LocalLLaMA/comments/1fl6hl3/leading_opensource_embedding_model/ [8] Best Embedding Models for RAG (2025) | Performance Benchmarks ... https://agentset.ai/leaderboard/embedding-models [9] 9 Best Embedding Models for RAG to Try This Year - ZenML Blog https://www.zenml.io/blog/best-embedding-models-for-rag [10] Open-source embedding models: which one's the best? https://www.reddit.com/r/Rag/comments/1nro65j/opensource_embedding_models_which_ones_the_best/ [11] Which embedding model should I use??? NEED HELP!!! https://www.reddit.com/r/Rag/comments/1hdd3u2/which_embedding_model_should_i_use_need_help/ [12] Top embedding models on the MTEB leaderboard - Modal https://modal.com/blog/mteb-leaderboard-article [13] embeddings-benchmark/leaderboard: Code for the MTEB ... https://github.com/embeddings-benchmark/leaderboard [14] MTEB Leaderboard - a Hugging Face Space by mteb https://huggingface.co/spaces/mteb/leaderboard [15] NexGen Technologies (nexgencompany.ai) - GenAI Leaderboard https://leaderboard.nexgencompany.ai/mteb
Kui ütled, mis keeled ja mis riistvaral (CPU/GPU, single-node vms) tahad jooksutada, võin soovitada 1–2 väga konkreetset mudelit ja isegi anda valmis sentence-transformers mudelinimed.
Arvuti on 128gb ühine mälu (32cpu/96 gpu). keeled inglise (põhiline) ja Eesti.
Sinu raua ja keelte jaoks soovitaks kahte varianti: BGE-M3 (multilingual, SOTA-ish) ja multilingual-E5 (lihtne, väga tugev recall). [1][2][3][4][5]
BAAI/bge-m3. [2][3]"BAAI/bge-m3" – kasutad otse sentence_transformers.SentenceTransformer("BAAI/bge-m3"). [2][4]intfloat/multilingual-e5-base või suurem intfloat/multilingual-e5-large. [7][6][8]"intfloat/multilingual-e5-base" (või -large) töötab otse SentenceTransformer klassiga. [7][6][8]Sul on GPU ja palju RAM-i, nii et mõlemad on täiesti jooksutatavad; pigem otsustad arenduskogemuse ja hilisemate feature’ite (nt multi-vector/hybrid retrieval) järgi. [2][11][5][6]
Citations: [1] Best open source embedding models for EU languages https://www.reddit.com/r/LocalLLaMA/comments/1chqkph/best_open_source_embedding_models_for_eu_languages/ [2] BAAI/bge-m3 https://huggingface.co/BAAI/bge-m3 [3] BGE-M3 — BGE documentation https://bge-model.com/bge/bge_m3.html [4] hffei/bge-m3-api https://github.com/hffei/bge-m3-api [5] bge-m3 - JuheNext https://www.juhenext.com/model/bge-m3/ [6] Top 10 Multilingual Embedding Models for RAG https://research.aimultiple.com/multilingual-embedding-models/ [7] 5 Best Embedding Models for RAG: How to Choose the ... https://greennode.ai/blog/best-embedding-models-for-rag [8] Multilingual E5 Large | Generative AI on Vertex AI https://docs.cloud.google.com/vertex-ai/generative-ai/docs/maas/e5/multilingual-e5-large [9] What embedding models are best for multilingual ... https://zilliz.com/ai-faq/what-embedding-models-are-best-for-multilingual-applications [10] BAAI/bge-m3 · list of languages supported https://huggingface.co/BAAI/bge-m3/discussions/29 [11] BGE m3 | Products https://docs.ionos.com/cloud/ai/ai-model-hub/models/embedding-models/bge-m3 [12] Estonia | EF English Proficiency Index https://www.ef.com/wwen/epi/regions/europe/estonia/ [13] Language proficiency level - Integratsiooni Sihtasutus https://www.integratsioon.ee/en/keeleoskustase [14] megavn/bge-m3-embeddings · Hugging Face https://huggingface.co/megavn/bge-m3-embeddings [15] Mike0307/multilingual-e5-language-detection - Hugging Face https://huggingface.co/Mike0307/multilingual-e5-language-detection
Kuidas integreerida pgvector FastAPI RAG rakendusse
Integreerimine käib kolmes kihis: pgvectori tabel + Python vektor-store + FastAPI RAG endpoint. [1][2][3][4]
PostgreSQL-s:
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE documents (
id bigserial PRIMARY KEY,
content text NOT NULL,
metadata jsonb,
embedding vector(1536) -- vasta sinu embeddingu dimensioonile
);
Selline skeem on tüüpiline RAG jaoks: tekst + meta + embedding. [5][1]
Näide eraldi moodulis vector_store.py:
# vector_store.py
import asyncpg
from typing import List, Optional
import json
class VectorStore:
def __init__(self, pool: asyncpg.Pool):
self.pool = pool
async def insert_document(self, content: str, embedding: List[float], metadata: Optional[dict] = None) -> int:
emb_str = f"[{','.join(map(str, embedding))}]"
query = """
INSERT INTO documents (content, embedding, metadata)
VALUES ($1, $2::vector, $3)
RETURNING id
"""
async with self.pool.acquire() as conn:
row = await conn.fetchrow(query, content, emb_str, json.dumps(metadata or {}))
return row["id"]
async def search_similar(self, query_embedding: List[float], limit: int = 5) -> List[dict]:
emb_str = f"[{','.join(map(str, query_embedding))}]"
query = """
SELECT id, content, metadata,
1 - (embedding <=> $1::vector) AS similarity
FROM documents
ORDER BY embedding <=> $1::vector
LIMIT $2
"""
async with self.pool.acquire() as conn:
rows = await conn.fetch(query, emb_str, limit)
return [
{
"id": r["id"],
"content": r["content"],
"metadata": r["metadata"],
"similarity": float(r["similarity"]),
}
for r in rows
]
Struktuur järgib sama mustrit, mida soovitatakse prod-integreerimisel pgvectoriga. [1][2][6]
Näide rag_service.py (pseudokood, pane siia oma embedding/LLM kliendid):
# rag_service.py
from typing import List
from vector_store import VectorStore
vector_store: VectorStore # injekteeritakse startupis
embed_model = ... # sinu embedding mudel
llm_client = ... # sinu LLM (OpenAI, Ollama, vllm, jne)
async def rag_answer(question: str) -> str:
# 1) küsimuse embedding
q_emb: List[float] = await embed_model.embed(question)
# 2) vektorotsing pgvectorist
docs = await vector_store.search_similar(q_emb, limit=5)
context = "\n\n".join(d["content"] for d in docs)
prompt = f"""Sa oled abivalmis assistent.
Kontekst:
{context}
Küsimus: {question}
Vasta ainult konteksti põhjal. Kui vastust ei leia, ütle, et andmetest ei piisa.
"""
# 3) vastus LLM-ist
answer = await llm_client.complete(prompt)
return answer
Sarnane muster on kasutusel FastAPI + pgvector RAG näidistes (retriever eraldi klass, mida RAG kasutab). [4][7][8]
main.py:
# main.py
import asyncpg
from fastapi import FastAPI, Depends
from pydantic import BaseModel
from vector_store import VectorStore
from rag_service import rag_answer, vector_store as vs_ref
app = FastAPI()
class Query(BaseModel):
question: str
class Answer(BaseModel):
answer: str
@app.on_event("startup")
async def startup():
pool = await asyncpg.create_pool(dsn="postgresql://user:pass@host:5432/db")
vs_ref.__class__ = VectorStore # või lihtsalt seti globaalne
vs_ref.__init__(vs_ref, pool) # lihtsuse mõttes; päriselus DI
@app.post("/query", response_model=Answer)
async def query_rag(body: Query):
result = await rag_answer(body.question)
return Answer(answer=result)
FastAPI näidetes kasutatakse sama mustrit: loe asyncpg/pgvector pool startupis, loo vektor-store ja kasuta seda RAG endpoint’is. [9][10][3]
asyncpg, embedding/LLM kliendid ja FastAPI endpoint’id. [1][6][4]vector vs real[]: kasuta päris vector tüüpi ja <=> operaatorit (cosine/euclidean), mitte ise käsitsi JSON/array’ga mässamist. [5][1][2]metadata JSONB ja kasuta metadata @> '{"key":"value"}' kui vajad RAG-is filtereid. [1][6]Kui tahad, võin järgmise sammuna teha väga konkreetse “minimum viable” stack’i kirjelduse: docker-compose.yml (Postgres + FastAPI), CREATE TABLE, ja minimal embedding/LLM stub’idega, mille saad ise OpenAI/Ollama peale asendada.
Citations: [1] How to Build pgvector Integration - OneUptime https://oneuptime.com/blog/post/2026-01-30-pgvector-integration/view [2] pgvector support for Python - GitHub https://github.com/pgvector/pgvector-python [3] Using pgvector-python in FastAPI to get most similar data https://stackoverflow.com/questions/77697282/using-pgvector-python-in-fastapi-to-get-most-similar-data [4] Python RAG API Tutorial with LangChain & FastAPI – Complete Guide https://www.vitaliihonchar.com/insights/python-rag-api [5] Building an AI-Powered Image Similarity Search with FastAPI ... https://blog.devgenius.io/building-an-ai-powered-image-similarity-search-with-fastapi-and-pgvector-eaee8e5c704a [6] Asyncpg Integration | pgvector/pgvector-python | DeepWiki https://deepwiki.com/pgvector/pgvector-python/4.3-asyncpg-integration [7] Local RAG tutorial - FastAPI & Ollama & pgvector - Reddit https://www.reddit.com/r/Rag/comments/1oavnif/local_rag_tutorial_fastapi_ollama_pgvector/ [8] Architecture and code for a Python RAG API using LangChain, FastAPI, and pgvector https://www.reddit.com/r/Python/comments/1ky5bgs/architecture_and_code_for_a_python_rag_api_using/ [9] AI-Powered Image Search with CLIP, pgvector, and Fast API https://dev.to/mattfergoda/ai-powered-image-search-with-clip-pgvector-and-fast-api-1f1d [10] PGVector와 Python FastAPI를 연동하여 벡터 데이터 저장 및 유사도 ... https://lsjsj92.tistory.com/677 [11] Local RAG tutorial - FastAPI & Ollama & pgvector : r/PostgreSQL https://www.reddit.com/r/PostgreSQL/comments/1oavhi4/local_rag_tutorial_fastapi_ollama_pgvector/ [12] alexandrughinea/python-fastapi-postgres-vector-scraper https://github.com/alexandrughinea/python-fastapi-postgres-vector-scraper [13] Local RAG tutorial - FastAPI & Ollama & pgvector https://www.reddit.com/r/ollama/comments/1obn0nj/local_rag_tutorial_fastapi_ollama_pgvector/ [14] Deep Dive with Postgres PGVector, LlamaIndex, FastAPI ... https://www.linkedin.com/pulse/advanced-guarded-rag-deep-dive-postgres-pgvector-fastapi-zahir-shaikh-bcnff [15] Build an Optimized RAG System with Reranking & Recall/MRR Evaluation | PgVector, LangSmith, FastAPI https://www.youtube.com/watch?v=OeFlBSqasqU