İLETİŞİME GEÇİN
Parçalama, embedding seçimi, pgvector, hibrit arama, yeniden sıralama, yetkiye duyarlı sorgular ve değerlendirme: Üretimde güvenilir bir RAG sistemi kurmanın adımları.

Büyük dil modelleri (LLM) genel bilgide güçlüdür ama şirketinizin ürün kataloğunu, iç prosedürlerini ya da geçen ay güncellenen sözleşme şartlarını bilmez. Bilmediği bir soruda da çoğu zaman "bilmiyorum" demek yerine makul görünen bir cevap üretir. Retrieval-Augmented Generation (RAG), modele soruyu sormadan önce ilgili belgeleri kendi kaynaklarınızdan bulup bağlam olarak vermeye dayanan bir mimaridir. Doğru kurulduğunda cevapları güncel ve kaynağa dayalı hâle getirir, uydurma cevap riskini azaltır; ancak ortadan kaldırmaz. Bu yazıda bir RAG sisteminin bileşenlerini ve üretim ortamında her birinde verilmesi gereken kararları ele alıyoruz.
Bir RAG sistemi iki ayrı akıştan oluşur:
Cevap kalitesinin büyük kısmı modelden önce, yani doğru parçaların bulunup bulunmadığında belirlenir. Model, kendisine verilmeyen bilgiyi kullanamaz.
PDF, Word ve web sayfalarından çıkarılan metin çoğu zaman sayfa numaraları, üst bilgiler ve bozuk tablolarla doludur. Parçalamadan önce bu gürültüyü temizlemek, sonraki her adımı iyileştirir.
Parça (chunk) boyutu için evrensel bir doğru değer yoktur. Çok küçük parçalar anlamı böler; "bu ürünün iade süresi" cümlesi bir parçada, ürünün adı başka bir parçada kalabilir. Çok büyük parçalar ise ilgisiz metni de bağlama taşır ve embedding'in anlamını bulanıklaştırır. Pratik bir başlangıç:
Hangi boyutun sizin belgelerinizde iyi çalıştığını, aşağıda anlatılan değerlendirme setiyle birkaç farklı ayarı karşılaştırarak bulun.
Embedding modeli, metni anlamını temsil eden bir sayı vektörüne dönüştürür. Seçimde dikkat edilecek noktalar:
Ayrı bir vektör veritabanı her zaman gerekli değildir. Uygulamanız zaten PostgreSQL kullanıyorsa pgvector eklentisi vektörleri ilişkisel verilerin yanında saklamayı, aynı sorguda yetki ve metadata filtresi uygulamayı ve mevcut yedekleme düzeninizi korumayı sağlar.
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE belge_parcalari (
id bigserial PRIMARY KEY,
belge_id bigint NOT NULL,
kiraci_id bigint NOT NULL,
icerik text NOT NULL,
model text NOT NULL,
embedding vector(1024) NOT NULL,
icerik_tsv tsvector
GENERATED ALWAYS AS (to_tsvector('turkish', icerik)) STORED
);
CREATE INDEX ON belge_parcalari USING hnsw (embedding vector_cosine_ops);
CREATE INDEX ON belge_parcalari USING gin (icerik_tsv);
Vektör boyutu (örnekteki 1024) seçtiğiniz modelin çıktı boyutuyla aynı olmalıdır. HNSW indeksi yaklaşık en yakın komşu araması yapar: Çok hızlıdır ama sonuçlar kesin değil, yaklaşıktır. <=> operatörü kosinüs mesafesini verir:
SELECT id, icerik
FROM belge_parcalari
WHERE kiraci_id = $2
ORDER BY embedding <=> $1
LIMIT 20;
Filtre ile yaklaşık arama birlikte kullanıldığında, indeksin bulduğu adayların bir kısmı filtreye takılacağı için beklenenden az sonuç dönebilir. pgvector'ın güncel sürümlerindeki iteratif indeks taraması bu durumu hafifletir; çok seçici filtrelerde kiracıya göre bölümleme (partitioning) de seçenekler arasındadır. Çok büyük ölçeklerde ya da yoğun vektör iş yüklerinde özel vektör veritabanları değerlendirilebilir, ancak bu karar ölçüme dayanmalıdır.
Vektör araması anlam benzerliğinde güçlüdür ama ürün kodu, sipariş numarası ya da özel bir terim gibi birebir eşleşme gereken sorgularda zayıf kalabilir. Tam metin araması ise tam tersi bir profile sahiptir. İkisini birlikte çalıştırıp sonuç listelerini birleştirmek (örneğin Reciprocal Rank Fusion yöntemiyle, her listedeki sıraya göre puan vererek) iki yaklaşımın güçlü yanlarını bir araya getirir. Yukarıdaki tablodaki icerik_tsv sütunu bu amaçla eklenmiştir.
İlk aşamada hızlı yöntemlerle geniş bir aday listesi (örneğin 20–50 parça) toplanır; ardından bir cross-encoder modeli soru ile her parçayı birlikte değerlendirerek daha isabetli bir sıralama üretir. Cross-encoder'lar daha yavaş olduğu için yalnız bu küçük aday kümesine uygulanır. Modele de en üstteki birkaç parça gönderilir.
RAG sistemlerinde bir değişikliğin işe yarayıp yaramadığını birkaç soruyu elle deneyerek anlamak yanıltıcıdır. Bunun yerine gerçek kullanıcı sorularından ve beklenen kaynak belgelerden oluşan bir değerlendirme seti hazırlayın ve her değişikliği bu sete karşı ölçün:
İyi bir RAG sistemi tek bir akıllı bileşenden değil, birbirine bağlı sıradan kararların özenle verilmesinden doğar: temiz belgeler, anlamlı parçalar, tutarlı embedding'ler, hibrit arama, yeniden sıralama, yetkiye duyarlı sorgular ve sürekli ölçüm. İşe küçük bir belge kümesi ve bir değerlendirme setiyle başlamak, hangi adımın sizin verinizde gerçekten fark yarattığını görmenin en güvenilir yoludur.
Yorumlar yakında etkinleştirilecek.

Yapay zekâ destekli müşteri asistanlarının ne olduğunu, hangi sorunları çözdüğünü ve işletmenize nasıl entegre edebileceğinizi adım adım anlatan kapsamlı bir rehber.

Request ve limit'lerden probe'lara, Pod Security Standards'tan NetworkPolicy ve HPA/VPA'ya: Bir workload'u üretime hazır hâle getiren Kubernetes ayarları.

pg_stat_statements ve EXPLAIN ile ölçümden doğru indekse, N+1 sorgulardan keyset sayfalamaya ve vacuum ayarlarına: Yavaş PostgreSQL sorgularını hızlandırmanın 7 yolu.