RAG akışının tamamı
The full RAG flow
Bu modül için tahmini süre: 8 dakika
Genel bakış
RAG, chunking ve embedding temellerini öğrendikten sonra bu derste tüm pipeline’ı adım adım yürüyoruz. Chunk’lama, embedding üretme, vector database’e yazma, kullanıcı sorgusunu embed etme, cosine similarity ile en alakalı chunk’ı bulma ve final prompt’u oluşturma — RAG’in eksiksiz akışını bir örnek üzerinden göreceksin.
RAG, text chunking ve embedding’in temellerini ele aldığımıza göre, RAG pipeline’ının tamamını adım adım inceleyelim. Bu örnek, tüm parçaların alakalı bilgiyi getirip yanıt üretmek için nasıl birlikte çalıştığını tam olarak gösterecek.
Adım 1: Kaynak metni chunk’lamak
Önce kaynak belgeyi alıp yönetilebilir chunk’lara böleriz. Bu örnek için iki basit text bölümü kullanacağız:
- Section 1: Medical Research — “This year saw significant strides in our understanding of XDR-47, a ‘bug’ we have not seen before.”
- Section 2: Software Engineering — “This division dedicated significant effort to studying various infection vectors in our distributed systems”
Adım 2: Embedding üretmek
Sonra, her text chunk’ını bir embedding model kullanarak sayısal embedding’lere dönüştürürüz. Anlaşılır olması için, her zaman tam olarak iki sayı döndüren mükemmel bir embedding model’imiz olduğunu ve her sayının neyi temsil ettiğini bildiğimizi hayal edelim.

Hayali model’imizde:
- Birinci sayı, metnin medical field hakkında ne kadar konuştuğunu temsil eder
- İkinci sayı, metnin software engineering hakkında ne kadar konuştuğunu temsil eder
Medical research bölümü için [0.97, 0.34] alabiliriz — çok medical odaklı ama “bug” kelimesinden dolayı bir miktar software unsuru içeren. Software engineering bölümü için [0.30, 0.97] alırız — yoğun software odaklı, “infection vectors” ifadesinden gelen medical tonlarla.
Normalization
Embedding API tipik olarak her vektörü magnitude’u 1.0 olacak şekilde ölçeklendiren bir normalization adımı uygular. Buradaki matematik konusunda endişelenmene gerek yok — otomatik halledilir. Bu, [0.944, 0.331] ve [0.295, 0.955] gibi normalize edilmiş vektörler verir.

Bu embedding’leri bir unit circle üzerinde görselleştirebiliriz; her nokta text chunk’larımızdan birini temsil eder.

Adım 3: Vector database’e kaydetmek
Bu embedding’leri bir vector database’e kaydederiz — embedding’lerimiz gibi uzun sayı listelerini saklamak, karşılaştırmak ve aramak için optimize edilmiş özel bir database.

Bu noktada duraklarız. Buraya kadar yapılan tüm iş, önceden gerçekleşen preprocessing’dir. Şimdi bir kullanıcının sorgu göndermesini bekleriz.
Adım 4: Kullanıcı sorgusunu işlemek
Bir kullanıcı “I’m curious about the company. In particular, what did the software engineering dept do this year?” gibi bir soru sorduğunda, sorgusunu aynı embedding model’den geçiririz.

Bu sorgu [0.1, 0.89] gibi bir şekilde embed edilir — düşük medical score, yüksek software engineering score. Normalization sonrasında [0.112, 0.993] elde ederiz.
Adım 5: Benzer embedding’leri bulmak
Kullanıcının sorgu embedding’ini vector database’imize gönderir ve en benzer kayıtlı embedding’leri bulmasını isteriz.

Database, software engineering bölümünü döndürür çünkü bu, kullanıcının sorduğuna en yakın eşleşmedir.
Similarity nasıl çalışır: Cosine similarity
Vector database, hangi embedding’lerin en benzer olduğunu belirlemek için cosine similarity kullanır. Bu, iki vektör arasındaki açının cosine’ını ölçer.

Cosine similarity hakkında temel noktalar:
- Sonuçlar -1 ile 1 arasındadır
- 1’e yakın değerler yüksek benzerlik anlamına gelir
- -1’e yakın değerler çok farklı anlamına gelir
- 0 dik (ilişki yok) anlamına gelir
Örneğimizde, kullanıcı sorgusu ile software engineering chunk’ı arasındaki cosine similarity 0.983 — çok yüksek benzerlik. Medical research chunk’ı ile benzerlik yalnızca 0.398 — çok daha düşük.
Cosine distance
Vector database documentation’larında sıkça “cosine distance” göreceksin. Bu basitçe (1 - cosine similarity) olarak hesaplanır. Cosine distance ile:
- 0’a yakın değerler yüksek benzerlik anlamına gelir
- Daha büyük değerler daha az benzerlik anlamına gelir
Bu ayar, sayıları birçok bağlamda yorumlanması daha kolay hale getirir.
Adım 6: Final prompt’u oluşturmak
Son olarak, kullanıcının sorusunu ve bulduğumuz en alakalı text chunk’ı alır, prompt’ta birleştirir ve yanıt için Claude’a göndeririz.

Prompt şu şekilde olabilir:
Answer the user's question about the financial document.
<user_question>
How many bugs did engineers fix this year?
</user_question>
<report>
## Section 2: Software Engineering
This division dedicated significant effort to studying various infection vectors in our distributed systems
</report>
İşte komple RAG pipeline’ı! Sistem, semantic similarity’ye dayanarak en alakalı bilgiyi başarıyla getirdi ve doğru bir yanıt üretmek için context olarak sundu.
Temel çıkarımlar
- RAG pipeline’ı chunk → embed → store → query embed → similarity search → prompt adımlarından oluşur
- Embedding API’leri vektörleri otomatik olarak normalize eder; magnitude 1.0 olur
- Vector database’ler embedding’leri saklamak ve karşılaştırmak için optimize edilmiştir
- Cosine similarity (-1..1) vektörler arasındaki açıya bakar; 1’e yakın = çok benzer
- Cosine distance = 1 − cosine similarity; küçük değer daha benzer anlamına gelir
- Final prompt, kullanıcı sorusu ve retrieved chunk’tan oluşur; Claude bu context’le yanıt üretir