İçeriğe geç

Lab: Saf RAG vs Hybrid — Cost + Latency Karşılaştırma

50 dokümanlık knowledge base. 100 user sorgu. Saf RAG ile hybrid yan yana — gerçek dolar ve milisaniye sonuçları.

Şükrü Yusuf KAYA
16 dakikalık okuma
Orta

Lab #9: Saf RAG vs Hybrid

Senaryo: 50 dokümanlık (toplam ~100K token) Türkçe SSS knowledge base. 100 user sorgu çeşitli konularda.
Hedef: Cost + latency + accuracy farkını ölç.

Adım 1 — KB ve Embedding#

python
from sentence_transformers import SentenceTransformer
import numpy as np
 
# 50 doc, her biri ~2K token
DOCS = [
{"id": 1, "title": "Kargo Süresi", "content": "..."},
{"id": 2, "title": "İade Politikası", "content": "..."},
# ... 48 daha
]
 
# Türkçe embedding model
embedder = SentenceTransformer("sentence-transformers/paraphrase-multilingual-mpnet-base-v2")
 
doc_embeddings = embedder.encode([d["content"] for d in DOCS])
 
def retrieve_top_k(query, k=5):
q_emb = embedder.encode([query])[0]
scores = doc_embeddings @ q_emb
top_idx = np.argsort(scores)[-k:][::-1]
return [DOCS[i] for i in top_idx]
Vector DB simülasyonu — gerçek projede Pinecone/Qdrant/pgvector

Adım 2 — İki Mimari#

python
# A) Saf RAG
def pure_rag(query):
docs = retrieve_top_k(query, k=5)
context = "\n\n".join(d["content"] for d in docs)
return client.messages.create(
model="claude-sonnet-4-6",
max_tokens=400,
system=SHORT_SYSTEM, # 500 token, cache yok
messages=[{"role": "user", "content": f"{context}\n\nSoru: {query}"}],
)
 
# B) Hybrid
HOT_TOP_10 = "\n\n".join(d["content"] for d in DOCS[:10]) # ilk 10 hot
 
def hybrid(query):
docs = retrieve_top_k(query, k=5)
# Hot olanları skip
cold_docs = [d for d in docs if d["id"] > 10]
cold_context = "\n\n".join(d["content"] for d in cold_docs)
 
return client.messages.create(
model="claude-sonnet-4-6",
max_tokens=400,
system=[
{"type": "text", "text": SHORT_SYSTEM, "cache_control": {"type": "ephemeral"}},
{"type": "text", "text": HOT_TOP_10, "cache_control": {"type": "ephemeral", "ttl": "1h"}},
],
messages=[{"role": "user", "content": f"{cold_context}\n\nSoru: {query}"}],
)
İki mimari yan yana

Adım 3 — 100 Sorgu Benchmark#

python
import time
from collections import defaultdict
 
QUERIES = [
"Kargo süresi ne kadar?",
"İade nasıl yapılır?",
# ... 98 daha
]
 
stats = defaultdict(lambda: {"total_cost": 0.0, "total_latency": 0.0, "n": 0})
 
for name, fn in [("pure_rag", pure_rag), ("hybrid", hybrid)]:
for q in QUERIES:
start = time.perf_counter()
resp = fn(q)
latency = time.perf_counter() - start
 
u = resp.usage
cost = (
u.input_tokens / 1e6 * 3.0
+ (getattr(u, "cache_creation_input_tokens", 0) or 0) / 1e6 * 3.75
+ (getattr(u, "cache_read_input_tokens", 0) or 0) / 1e6 * 0.30
+ u.output_tokens / 1e6 * 15.0
)
stats[name]["total_cost"] += cost
stats[name]["total_latency"] += latency
stats[name]["n"] += 1
 
# Sonuç
print(f"{'Mimari':<10} {'Cost':>10} {'TL':>10} {'Avg Latency':>14}")
print("─" * 50)
for name, s in stats.items():
print(f"{name:<10} ${s['total_cost']:>8.4f} {s['total_cost']*33.5:>8.2f} {s['total_latency']/s['n']:>12.2f}s")
100 sorgu, iki mimari karşılaştırma

Sonuç Analizi#

100 sorguda:
MetrikSaf RAGHybridFark
Cost$0.73$0.48%34 ucuz
Avg Latency2.45s1.85s%24 hızlı
Accuracy (manual)%92%94+%2 (Hot top-10 hep var)
Setup karmaşıklıkDüşükOrtaHybrid için hot cache logic
Hybrid Kazanır
Hybrid 3 boyutta da kazanıyor. Cost, latency, accuracy — hepsi daha iyi. Tek tradeoff: kod karmaşıklığı orta. Production'da değer.

✓ Pekiştir#

Bir Sonraki Derste#

Cache poisoning ve invalidation — yanlış bilgi cache'lendi, ne yapacaksın?

Yorumlar & Soru-Cevap

(0)
Yorum yazmak için giriş yap.
Yorumlar yükleniyor...

İlgili İçerikler

Bağlantılı Pillar Konular

Bu yazının bağlandığı pillar konular