|
Ana Sayfa Projeler Blog İletişim

YAZILARIM

Blog

AI, otomasyon ve finans dünyasındaki deneyimlerimi paylaştığım yazılar

← Blog

RAG Chatbot: Kendi Bilgi Tabanınızla AI Asistan

Kişisel web siteme bir yapay zekâ asistanı eklemek istediğimde, hazır bir ChatGPT entegrasyonunun yetmeyeceğini biliyordum. Asistanın benim hakkımda doğru bilgi vermesi, projelerimi tanıması ve bilmediği bir şey sorulduğunda uydurmaması gerekiyordu. Çözüm RAG mimarisiydi. Bu yazıda hem RAG'ın ne olduğunu hem de kendi sitemde nasıl kurduğumu anlatıyorum.

Problem: dil modelleri sizi tanımıyor

Büyük dil modelleri, eğitim verilerinde olmayan bir konuda soru aldıklarında susmazlar — makul görünen bir cevap üretirler. Kişisel veya kurumsal bir asistan için bu kabul edilemez. "Gürkan Karaca hangi projeleri yaptı?" sorusuna modelin kendi bilgisiyle vereceği cevap, en iyi ihtimalle boş, en kötü ihtimalle yanlış olur.

İki çözüm yolu var: modeli kendi verinizle yeniden eğitmek (fine-tuning) veya modele cevap üretirken doğru belgeleri elinin altına vermek. İkincisi hem çok daha ucuz hem de bilgi değiştiğinde güncellemesi kolay. Buna Retrieval-Augmented Generation, kısaca RAG deniyor.

RAG nasıl çalışır?

Mantık aslında sade. Sistem, kullanıcıdan bir soru geldiğinde önce cevabı üretmez; önce arar.

  • Hazırlık aşaması: Elinizdeki belgeler anlamlı parçalara bölünür, her parça bir embedding (sayısal vektör) haline getirilir ve vektör veritabanına yazılır.
  • Soru geldiğinde: Sorunun kendisi de aynı yöntemle vektöre çevrilir ve veritabanında anlamca en yakın parçalar bulunur.
  • Cevap üretimi: Bulunan parçalar, soruyla birlikte dil modeline bağlam olarak verilir. Model artık tahmin etmez, önüne konan metinden cevap yazar.

Kritik nokta şu: model yalnızca kendisine verilen bağlamdan cevap üretmeye yönlendirilir. Bağlamda cevap yoksa "bu bilgi elimde yok" demesi gerekir. Bunu sağlamak mimarinin en önemli parçası.

Sitemdeki kurulum

Kendi asistanımda kullandığım bileşenler:

  • Vektör veritabanı: Pinecone — profil bilgilerimi, sık sorulan soruları ve proje detaylarını embedding olarak saklıyor
  • Embedding modeli: OpenAI text-embedding-3-small — metinleri vektöre çeviriyor
  • Dil modeli: GPT-4o-mini — bağlamı alıp doğal bir yanıt üretiyor
  • Sunucu tarafı: Cloudflare Pages Functions — API uçlarını serverless olarak çalıştırıyor, API anahtarları tarayıcıya hiç inmiyor

Bilgi tabanının kaynağı olarak ayrı bir doküman seti tuttum: profil bilgileri, proje açıklamaları ve soru-cevap formatında hazırlanmış bir SSS dosyası. Bunları sitenin içeriğinden ayrı tutmak, chatbot'un ne bileceğini kontrol edebilmemi sağlıyor.

Uygulamada öğrendiklerim

Parçalama (chunking) sonucu doğrudan etkiliyor. Belgeleri çok büyük parçalara bölerseniz modele alakasız bilgi de gidiyor ve cevap dağılıyor. Çok küçük parçalara bölerseniz bu sefer bağlam kopuyor. Konu başlığı bütünlüğünü koruyacak şekilde bölmek en iyi sonucu verdi.

Bilgi tabanı, sitenin kendisinden daha kritik. Chatbot ne kadar iyi kurulursa kurulsun, beslediğiniz belge eksikse cevaplar da eksik oluyor. Zamanın büyük bölümü kod yazmaya değil, bilgi tabanını düzenlemeye gidiyor.

Çok dillilik baştan planlanmalı. Sitem Türkçe ve İngilizce çalışıyor. Bilgi tabanını iki dilde ayrı ayrı hazırlamak, tek dilde tutup çeviri yaptırmaktan çok daha tutarlı sonuç veriyor.

Sınırları yazılı olarak koymak gerekiyor. Sistem talimatında modelin neyi yapmayacağını açıkça belirtmezseniz, bağlam dışına çıkıp genel bilgi vermeye başlıyor.

Kimler için mantıklı?

RAG, elinde okunması zor miktarda belge olan herkes için anlamlı: mevzuat ve prosedür dokümanları, toplantı kararları, ürün kataloğu, teknik kılavuzlar, proje arşivi. Özellikle "bu bilgi bir yerde yazıyordu ama nerede olduğunu kimse bilmiyor" cümlesinin sık kurulduğu yerlerde geri dönüşü yüksek oluyor.

Kendi belgelerinizle çalışan bir asistan kurmayı düşünüyorsanız iletişim bölümünden yazabilirsiniz. Bu tür sistemleri birbirine bağlayan otomasyon tarafını n8n yazısında anlattım.

RAG Chatbot: AI Assistant with Your Own Knowledge Base