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
OrtaLab #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 SentenceTransformerimport numpy as np # 50 doc, her biri ~2K tokenDOCS = [ {"id": 1, "title": "Kargo Süresi", "content": "..."}, {"id": 2, "title": "İade Politikası", "content": "..."}, # ... 48 daha] # Türkçe embedding modelembedder = 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 RAGdef 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) HybridHOT_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 timefrom 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:
| Metrik | Saf RAG | Hybrid | Fark |
|---|---|---|---|
| Cost | $0.73 | $0.48 | %34 ucuz |
| Avg Latency | 2.45s | 1.85s | %24 hızlı |
| Accuracy (manual) | %92 | %94 | +%2 (Hot top-10 hep var) |
| Setup karmaşıklık | Düşük | Orta | Hybrid 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
1. Temeller — Context Penceresi Ekonomisi
Bu Eğitim Hakkında ve Prompt Caching Neden Önemli?
Öğrenmeye Başla1. Temeller — Context Penceresi Ekonomisi
Token Ekonomisi 101: Input vs Output Cost Asimetrisi
Öğrenmeye Başla1. Temeller — Context Penceresi Ekonomisi
Context Window Evrimi: 4K'dan 1M'a 5 Yılda Ne Oldu?
Öğrenmeye BaşlaBağlantılı Pillar Konular