# Project: RAG Document Q&A System

> Source: https://sukruyusufkaya.com/en/learn/claude-ustaligi/rag-projesi
> Updated: 2026-05-11T13:48:36.606Z
> Category: Claude Ustalığı
> Module: 11. Real-World Projects
**TLDR:** RAG over company docs: chunking, embedding, retrieval, re-ranking, anchored answers.

# RAG'ın 6 Adımı

1. **Ingest:** PDF, Markdown, HTML toplanır.
2. **Chunk:** 300-1000 token parçalar (overlap 10-20%).
3. **Embed:** Embedding modeli ile vektör.
4. **Index:** Vector DB.
5. **Retrieve:** Sorgu için top-K.
6. **Rerank + answer:** Cross-encoder ile yeniden sırala, Claude'la cevapla.

![RAG akışı: ingest → chunk → embed → index → retrieve → rerank → answer](/images/learn/claude-ustaligi/diagram-rag-flow.svg)

_RAG pipeline'ı._

### Chunking stratejisi

- Sabit token bazlı (basit)
- Cümle / paragraf bazlı (önerilen)
- Semantic (embedding similarity ile bölme)
- Hierarchical (parent-child chunk)

Chunk başlığı / kaynak url'si **metada olarak** sakla.

### Re-ranking

Top-50 retrieval'dan top-5'e indirmek için cross-encoder kullan. Bu, cevap kalitesini ve halüsinasyonu hatrı sayılır oranda iyileştirir.

### Anchored answer

Cevabın her cümlesini kaynak chunk_id ile bağla. Modül 6.5'teki disipline uy.

### Eval seti

Soru-cevap-kaynak üçlülerinden oluşan 200-500 örnek. Kaynak doğruluğu, faithfulness, latency, maliyet ölçülür.

```python
# Yüksek seviye RAG fonksiyonu
def answer_with_rag(question: str, k: int = 5):
    q_emb = embed(question)
    candidates = vector_db.search(q_emb, top_k=50)
    top = rerank(question, candidates)[:k]
    context = "\n\n".join(f"[{c.id}] {c.text}" for c in top)
    return claude_answer(question, context, citations_required=True)
```

**Boşluk doldurma egzersizi (text):**
```text
RAG'ın 6 adımı: ingest, _____ , embed, index, _____ ve rerank+answer. Top-K daraltma için _____ kullanılır. Cevabın her cümlesi _____ ile bağlanır.
```

> ✋ Kontrol noktası: `q-1102-mc1`