// Veriyle Konusan Analitik Asistan
RAG = Schema
Retrieval
Ders 3 · Dogru semayi getir (schema linking)
01 / Temsil
02 / Text-to-SQL
03 / Schema-RAG
04 / Agent
05 / Guvenlik
06 / Deploy
Problem: Buyuk Sema
Ders 2'de 4 tablomuz vardi, prompt'a sigdi.
Gercekte: yuzlerce tablo, binlerce kolon.
Hepsini prompt'a koymak = imkansiz (token) +
model kaybolur (yanlis tablo secer).
500 tablo × 20 kolon
↓ hepsi prompt'a?
✗ 100k+ token
✗ pahali + yavas
✗ model saskin
Cozum: RAG
RAG = Retrieval-Augmented Generation. Soruyla ilgili
parcayi bul, sadece onu modele ver.
Analoji
Kutuphanenin tum kitaplarini masaya yigmazsin.
Dogru kitabi bulur, o sayfayi acarsin.
Text-to-SQL'de RAG = schema linking: soruyla ilgili tablo/kolonlari getirmek.
Bu, text-to-SQL dogrulugunun en belirleyici parcasi.
RAG'in 4 Adimi
1 · CHUNK — her tabloyu bir "belge" yap (ad + aciklama)
2 · EMBED — bu belgeleri vektorle (Ders 1'deki embedding!), sakla
3 · RETRIEVE — soruyu vektorle, en yakin tablolari bul
4 · GENERATE — sadece o tablolarin semasiyla SQL yazdir
Adim 2-3 tam da Ders 1'de yaptigimiz benzerlik isi. Embedding burada is basinda.
Adim 1-2: Chunk + Embed + Store (Chroma)
import chromadb
# Her tablo bir "belge". 4 gercek + gurultu (buyuk veri ambarini taklit)
SCHEMA_DOCS = {"customers":..., "products":..., "orders":..., "order_items":...,
"shipping_logs":..., "employees":..., "suppliers":..., # gurultu
"payments":..., "product_reviews":..., "warehouses":...} # gurultu
client = chromadb.PersistentClient(path="chroma_db") # kalici, sunucu yok
col = client.get_or_create_collection("schema_catalog",
metadata={"hnsw:space": "cosine"})
col.upsert(ids=names, documents=docs,
embeddings=embedder.encode(docs).tolist()) # cok dilli embedding
Chroma = gercek vektor DB (embedded, kalici). Gurultu tablolar (suppliers, payments...)
retrieval'da elenmeli. Embedding'i biz uretiyoruz — cok dilli (Turkce) icin.
Adim 3: Retrieve — Vektor DB Sorgusu
def relevant_schema(question, k=3):
q_emb = embedder.encode([question]).tolist()
res = col.query(query_embeddings=q_emb, n_results=k) # Chroma ANN
return "Tables:\n" + format(res["ids"], res["documents"])
print(relevant_schema("Hangi urun en cok satildi?"))
Tables:
- products: Urun katalogu...
- order_items: Siparis satirlari...
- product_reviews: Urun yorumlari... (sinirda)
Alakasiz tablolar (employees, warehouses, suppliers...) elendi; model yine de ilgili olani secer.
Adim 4: Generate — Ilgili Semayla SQL
# Sadece ilgili semayla SQL uret (Ders 2'nin generate_sql'i)
schema = relevant_schema(soru) # gurultu elendi
sql = generate_sql(soru, schema=schema) # dar, isabetli sema
db.sql(sql) # dogru sonuc
Soru
→
retrieve (3 tablo)
→
generate_sql
→
dogru SQL
Gurultu elendi, model sadece ilgili semayla daha isabetli SQL yazdi.
RAG Turleri
Tek bir "RAG" yok — probleme gore turler:
Naive RAG — getir → prompt'a doldur → uret
Schema-linking — bizim yaptigimiz (text-to-SQL'e ozel)
Hybrid search — anahtar kelime (BM25) + vektor
Reranking — aday'lari cross-encoder ile yeniden sirala
Agentic RAG — agent retrieval'i ARAC olarak cagirir
GraphRAG — bilgi grafigi + topluluk ozetleri uzerinden
Kotu retrieval = kotu SQL. Retrieval kacirirsa model uydurur → schema linking, text-to-SQL
dogrulugunun en belirleyici faktoru. (Buyuk semada: agent get_schema araciyla RAG'i cagirir — agentic RAG.)
Vektor DB'ler — Avantaj / Dezavantaj
| Arac | Tip | Avantaj | Dezavantaj |
| FAISS | Kutuphane (Meta) | En hizli ANN, in-process, ucretsiz | DB degil: kaliciligi elle yonet; metadata filtre / otomatik CRUD / cok-kullanici yok |
| ChromaDB | Embedded DB | Kurulumsuz, kalici, metadata filtre — demo/dev ideal (bizimki) | Buyuk olcek + cok kullanicida zayif |
| Qdrant / Weaviate / Milvus | Dedicated (self-host) | Prod-grade, hizli, guclu filtre, olceklenir | Ayri servis: kurulum + operasyon yuku |
| pgvector | Postgres eklentisi | Mevcut Postgres'te SQL+vektor bir arada, transactional | Devasa olcekte ozel DB kadar hizli degil |
| OpenSearch Serverless | AWS yonetilen | AWS-native, olceklenir, hybrid (BM25+vektor) | Maliyet + AWS'e baginlilik |
| Bedrock Knowledge Bases | AWS yonetilen RAG | Uctan uca yonetilen (chunk+embed+retrieve), cok az kod | Esneklik az, maliyet, saticiya kilit |
| Pinecone | Managed SaaS | Sifir ops, olceklenir | Ucretli 3. parti, veri disarida |
📦 Olcege gore sec: 6-10 tabloda Chroma/in-memory yeter; sema yuzlerce tabloya
cikinca OpenSearch/pgvector. Kod ayni, sadece depo degisir (bkz. aws_rag_pgvector.py).
Ders 3 — Ozet
Buyuk semadan sadece ilgili parcayi getirip prompt'a koyduk → schema linking.
Chunk
→
Embed
→
Retrieve
→
Generate
Sonraki ders: SQL hala metin — calistirmiyor. Asistana elini veriyoruz:
calistiran, hata duzelten agent.