RAG Nedir? 30 Dakikada Dokümanlı AI Chatbot
RAG nedir öğrenin: Kendi PDF/dokümanlarınızla doğru cevap veren AI chatbot’u 30 dakikada kurun. Adım adım, kodlu anlatım.
RAG Nedir? 30 Dakikada Dokümanlı AI Chatbot
Meta Description
RAG nedir? Kendi dokümanlarınızdan doğru cevap üreten AI chatbot’u 30 dakikada kurun. Adım adım mimari, kod ve ipuçları.
Giriş (Introduction)
Bir AI chatbot yaptınız ama kullanıcı “Şirket iade politikası ne?” diye sorunca model ya hayal ürünü cevap veriyor ya da “Bilmiyorum” diyor. Çünkü LLM’ler, sizin özel dokümanlarınızı doğrudan bilmez; bildiğini de bazen uydurabilir.
İşte bu noktada RAG (Retrieval-Augmented Generation) devreye girer: Model, cevap üretmeden önce ilgili doküman parçalarını “bulur”, sonra yalnızca o kaynaklara dayanarak yanıtlar.
Bu yazıda RAG nedir sorusunu netleştirip, bir PDF/doküman klasöründen beslenen dokümanlı AI chatbot’u 30 dakikada ayağa kaldırmanız için pratik bir yol haritası ve örnek kod paylaşacağım.
Ana İçerik
RAG Nedir? (Retrieval-Augmented Generation)
RAG, özetle iki aşamalı bir yaklaşımdır:
- Retrieval (Getirme): Kullanıcı sorusuna en yakın doküman parçaları (chunk) bulunur.
- Generation (Üretim): LLM, bulunan kaynakları “context” olarak alır ve bu bağlama dayanarak cevap üretir.
RAG’in en büyük faydası: halüsinasyonu azaltmak ve kurumsal/özel bilgiyle doğru yanıt verebilmektir.
RAG ne zaman şart olur?
- Sık değişen bilgiler: fiyatlar, kampanyalar, süreç dokümanları
- Kapalı bilgi: iç wiki, sözleşme, teknik doküman
- Denetlenebilirlik: “Cevabın kaynağı ne?” sorusuna yanıt
RAG Mimarisi: Parçalar ve Akış
Aşağıdaki bileşenler tipik bir RAG sistemini oluşturur:
| Bileşen | Ne yapar? | Örnekler |
|---|---|---|
| Doküman kaynağı | PDF, HTML, Notion, Drive | PDF, Markdown, web sayfası |
| Chunking | Metni parçalara böler | 300–800 token aralığı |
| Embedding modeli | Metni vektöre çevirir | text-embedding-3-large vb. |
| Vektör veritabanı | Benzerlik araması yapar | pgvector, Pinecone, Milvus |
| Retriever | En alakalı parçaları seçer | top-k, MMR |
| LLM | Cevabı üretir | GPT-4.1, Claude, Llama |
Akış:
- Dokümanları al → 2) Parçala → 3) Embedding üret → 4) Vektör DB’ye yaz → 5) Soru gelince benzer parçaları çek → 6) LLM ile yanıt üret
“Bunu neden yapmalıyım?”: RAG’in İş Değeri
RAG, sadece “havalı AI” değil; doğrudan ürün metriğini etkiler:
- Daha doğru cevap → daha az destek talebi
- Kaynak gösterme (citations) → güven artışı
- Tek noktadan güncelleme → doküman değişince model eğitmeden güncel kalma
- Regülasyon uyumu → “Bu cevabı nereden çıkardın?” sorusuna kanıt
Gerçek hayattan örnek
Bir e-ticaret ekibinde “iade süresi” 14 günden 30 güne çıktı. Fine-tune edilmiş bir model haftalarca eski bilgiyi söyleyebilir. RAG’de ise doküman güncellenir, chatbot aynı gün yeni politikayı kaynaklı şekilde yanıtlar.
Adım Adım: Basit Bir RAG Chatbot Kurulumu
Aşağıdaki örnek, Python + LangChain + FAISS (lokal vektör indeks) ile hızlıca POC yapmanız içindir. Üretimde pgvector/Pinecone gibi kalıcı bir store tercih edebilirsiniz.
1) Kurulum
pip install -U langchain langchain-community langchain-openai faiss-cpu pypdf python-dotenv
.env:
OPENAI_API_KEY=xxxxx
2) Dokümanı yükle ve parçala
from dotenv import load_dotenv
load_dotenv()
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
loader = PyPDFLoader("docs/iade-politikasi.pdf")
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(
chunk_size=900,
chunk_overlap=150
)
chunks = splitter.split_documents(docs)
print("Chunk sayısı:", len(chunks))
İpucu: chunk_size çok küçük olursa bağlam bölünür, çok büyük olursa arama kalitesi düşer. Genelde 600–1200 token aralığı iyi başlar.
3) Embedding oluştur ve vektör indeksine yaz
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import FAISS
embeddings = OpenAIEmbeddings(model="text-embedding-3-large")
vectorstore = FAISS.from_documents(chunks, embeddings)
vectorstore.save_local(".faiss_index")
4) Retriever + LLM ile soru-cevap
from langchain_openai import ChatOpenAI
from langchain.chains import RetrievalQA
llm = ChatOpenAI(model="gpt-4.1-mini", temperature=0)
retriever = vectorstore.as_retriever(search_kwargs={"k": 4})
qa = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=retriever,
return_source_documents=True
)
query = "İade süresi kaç gün ve hangi koşullarda geçerli?"
result = qa.invoke({"query": query})
print("Yanıt:\n", result["result"])
print("\nKaynaklar:")
for i, doc in enumerate(result["source_documents"], 1):
print(f"- {i}) sayfa={doc.metadata.get('page')} | {doc.page_content[:120]}...")
5) Basit prompt ile “kaynak dışına çıkma”yı azalt
RAG’de kaliteyi artıran en kritik şeylerden biri sistem talimatıdır. Eğer kendi chain’inizi kuruyorsanız şu minvalde bir yönerge kullanın:
- Yalnızca verilen kaynaklara dayan
- Kaynak yoksa “dokümanlarda bulamadım” de
- Cevabın altında alıntı/kaynak belirt
Kaliteyi Artıran 7 Pratik İpucu (Üretime Yakınlaştır)
1) Chunk stratejisini doküman tipine göre seç
- Sözleşme/politika: başlık bazlı bölme + daha büyük chunk
- Teknik doküman: daha küçük chunk + daha fazla overlap
2) “Top-k” yerine MMR dene
Benzer parçalar birbirinin aynısıysa LLM tek açıdan beslenir. MMR çeşitlilik getirir.
3) Metadata ekle (sayfa, bölüm, url)
Son kullanıcıya “Kaynak: Sayfa 4” demek güveni artırır.
4) Reranking kullan (mümkünse)
Önce embedding ile 20 parça çekip, sonra bir reranker ile en iyi 5’i seçmek kaliteyi ciddi artırır.
5) Guardrail: doküman dışına taşmayı engelle
- “Emin değilsen söyleme” prensibi
- Hassas alanlarda (hukuk/sağlık) ekstra kontrol
6) Cache ekle
Aynı sorular tekrar gelir. Soru+retrieval sonuçlarını cache’lemek maliyeti düşürür.
7) Değerlendirme seti oluştur
En az 20–50 gerçek soru:
- doğru cevap var mı?
- yanlış/uydurma var mı?
- kaynaklar gerçekten ilgili mi?
Vektör Veritabanı Seçimi: Hangisi Ne Zaman?
Aşağıdaki mini tablo karar vermeyi hızlandırır:
| Seçenek | Ne zaman iyi? | Not |
|---|---|---|
| FAISS (lokal) | POC, hızlı deneme | Kalıcılık/ölçek sınırlı |
| pgvector (PostgreSQL) | Ürünleştirme, mevcut Postgres varsa | Operasyonu kolay |
| Pinecone / Milvus | Büyük ölçek, çoklu tenant | Yönetimli servis avantajı |
Sık Sorulan Sorular (FAQ)
1) RAG nedir, fine-tuning yerine geçer mi?
RAG, özel bilgiye erişimi sağlar; fine-tuning ise modelin davranışını/üslubunu iyileştirir. Çoğu üründe önce RAG daha hızlı değer üretir.
2) RAG halüsinasyonu tamamen bitirir mi?
Hayır. Ama doğru prompt + doğru retrieval + kaynak gösterme ile ciddi ölçüde azaltır.
3) Hangi doküman türleriyle çalışır?
PDF, Word, Markdown, HTML, Confluence/Notion export’ları… Önemli olan iyi parse etmek ve temiz metin çıkarmaktır.
4) Chunk size kaç olmalı?
Tek bir doğru yok. Başlangıç için 700–1000 aralığı ve %15–20 overlap iyi bir ilk denemedir; sonra ölçerek optimize edin.
5) RAG pahalı mı?
Embedding maliyeti ilk indekslemede gelir; asıl maliyet sorgu başına retrieval + LLM cevabıdır. Cache ve doğru top-k ile düşürülür.
Sonuç
RAG nedir? Kısaca: LLM’e cevap üretmeden önce doğru doküman parçalarını buldurup, yanıtı bu kaynaklara dayandırma yaklaşımıdır. Böylece özel dokümanlarla çalışan, daha güvenilir ve güncel bir AI chatbot elde edersiniz.
Bir sonraki adım olarak: kendi ürününüzden 1–2 kritik PDF seçin, bu yazıdaki akışla indeksleyin ve 20 gerçek kullanıcı sorusuyla test edin. Sonuçları (hangi sorularda zorlandı, hangi chunk ayarı daha iyi oldu) yorumlarda paylaşın; birlikte iyileştirelim.