Büyük dil modellerinin (LLM) var olmayan bir gerçeği güvenle yanlış anlaması gibi bir durumla karşılaştıysanız, Retrieval-Augmented Generation (RAG) modelinin çözmeye çalıştığı temel sorunu anlayacaksınız. LLM’ler mükemmel genelciler, ancak bir zaman diliminde donmuş durumdalar ve özel verilerinizi göremezler. RAG, bu durumu tamamen değiştiriyor ve bir vektör veritabanıyla birleştirildiğinde, yalnızca akıcı değil, gerçekten bilgili sohbet botları elde ediyorsunuz.
<p>Bu makalede, bir RAG destekli sohbet botunun mimarisine göz atacağız, ana bileşenleri gerçek kodlarla uygulayacağız ve bu yaklaşımın üretim ortamlarında nerelerde öne çıktığını tartışacağız.</p>
<h2>
<a name="what-is-rag-and-why-does-it-matter" href="#what-is-rag-and-why-does-it-matter"></a>
RAG Nedir ve Neden Önemlidir?
</h2>
<p>Retrieval-Augmented Generation, yalnızca LLM'nin önceden eğitilmiş bilgisine bağlı kalmak yerine, önce dış bir bilgi kaynağından ilgili bağlamı almak ve bunu isteme eklemek için kullanılan bir modeldir. Model, bu alınan bilgilere dayalı bir yanıt üretir.</p>
<p>Bu, üç gerçek sorunu çözer:</p>
<ul>
<li>
<strong>Hallucination</strong> — Model, tahminde bulunmak yerine alınan gerçeği kullanarak akıl yürütür.
</li>
<li>
<strong>Knowledge cutoff</strong> — Sohbet botunuz, modelin eğitiminden sonraki olaylar veya belgeler hakkında soruları yanıtlayabilir.
</li>
<li>
<strong>Private data</strong> — İçi boşlamadan, iç dokümantasyon, destek biletleri veya ürün katalogları üzerine sohbet botları kurabilirsiniz.
</li>
</ul>
<h2>
<a name="the-core-architecture" href="#the-core-architecture"></a>
Temel Mimari
</h2>
<p>Bir RAG süreci iki ayrı aşamadan oluşur:</p>
<ol>
<li>
<strong>Indexing</strong> — Belgeler parçalara ayrılır, vektör gömme yapılır ve bir vektör veritabanında saklanır.
</li>
<li>
<strong>Querying</strong> — Çalışma sırasında, kullanıcının sorgusu gömülür, benzerlik araması en ilgili parçaları alır ve bunlar LLM'ye bağlam olarak geçirilir.
</li>
</ol>
<div class="highlight js-code-highlight">
<pre class="highlight plaintext"><code>User Query → Embed Query → Vector Search → Top-K Chunks → LLM Prompt → Response<h2>
<a name="setting-up-the-vector-database" href="#setting-up-the-vector-database"></a>
Vektör Veritabanını Kurma
</h2>
<p>Bu örnekte, vektör deposu olarak <strong>Qdrant</strong> ve gömme için OpenAI'nin <code>text-embedding-3-small</code> modelini kullanacağız. Qdrant, açık kaynak kodlu, temiz bir REST API'ye sahip ve Docker'da çalışması kolay bir seçenek.<br/></p>
<div class="highlight js-code-highlight">
<pre class="highlight shell"><code>docker run -p 6333:6333 qdrant/qdrant

