Giriş
Hızla gelişen Geri Getirme Destekli Üretim (RAG) dünyasında, vektör benzerliği araması bilgi geri getirmenin temel taşı haline gelmiştir. Ancak yalnızca anlamsal benzerliğe güvenmek gürültülü sonuçlara, alakasız bağlama ve hatta güvenlik açıklarına yol açabilir. İşte bu noktada meta veri filtreleme, hassasiyet için kritik bir bileşen olarak devreye girer. Yapılandırılmış veri filtrelerini yapılandırılmamış vektör gömme (embedding) teknikleriyle birleştirerek geliştiriciler, Büyük Dil Modellerinin (LLM) tam olarak ne zaman ve neye ihtiyaç duyduğunu geri getirmesini sağlayabilir.
Neden Meta Veri Filtreleme Temeldir
Vektör gömme teknikleri anlamsal anlamı yakalar ancak yapısal bağlamdan yoksundur. Meta veri filtrelemesi olmadan, "şirket avantajları" sorgusu, benzer anlamsal ağırlığa sahip olmaları durumunda birden fazla farklı departmandan avantaj belgelerini veya hatta dış rakip analizlerini döndürebilir. Meta veriler, arama alanını aşağıdaki kriterlere göre daraltmanıza olanak tanır:
- Erişim Kontrolü: Kullanıcıların yalnızca erişim yetkisi olan verileri görmesini sağlar.
- Güncellik: Belgelerin en son sürümlerini önceliklendirir.
- Kategorizasyon: Sonuçları belirli dosya türleri, yazarlar veya etiketlerle sınırlar.
- Doğruluk: Modelin yalnızca belirli, doğrulanmış kaynakları kullanmasını zorlayarak halüsinasyonları (uydurma) azaltır.
LangChain'de Filtrelerin Uygulanması
LangChain, geri getirici (retriever) arayüzleri aracılığıyla meta veri filtreleme için sağlam destek sağlar. FAISS veya Pinecone gibi vektör depolarını kullanırken, benzerlik arama süreci sırasında meta veri filtrelerini doğrudan geçebilirsiniz.
from langchain.vectorstores import Pinecone
# `pinecone_index` başlatılmış Pinecone indeksiniz olduğunu
# ve `pca` boyut indirgeme tekniğiniz olduğunu varsayalım
def retrieve_with_filter(query, department, doc_id):
# Meta veri filtrelerini tanımla
filters = {
"department": department, # Tam eşleşme
"doc_id": doc_id # Belirli belge kısıtı
}
# Filtrelerle benzerlik araması yap
# k: sonuç sayısı, filter: meta veri sözlüğü
results = pinecone_index.similarity_search_with_relevance_scores(
query, k=3, filter=filters
)
return results
# Kullanım
# results = retrieve_with_filter("PTO nasıl talep edilir?", "İK", "doc_123")
LlamaIndex'de Gelişmiş Filtreleme
LlamaIndex, `MetadataFilters` API'si aracılığıyla daha ince ayarlı kontrol sunar; AND, OR ve karşılaştırma operatörleri (büyük, küçük, listede var) gibi karmaşık mantıksal kombinasyonlara olanak tanır.
from llama_index.vector_stores.pinecone import PineconeVectorStore
from llama_index import VectorStoreIndex, SimpleDirectoryReader
from llama_index.filters import MetadataFilters, FilterCondition, FilterOperator
# Belgeleri yükle
documents = SimpleDirectoryReader("data_dir").load_data()
# İndeks oluştur
index = VectorStoreIndex.from_documents(documents, vector_store=vector_store)
# Karmaşık filtreleri tanımla
filters = MetadataFilters(
filters=[
{
"key": "author",
"value": ["John Doe", "Jane Smith"],
"operator": FilterOperator.IN
},
{
"key": "date_published",
"value": "2023-01-01",
"operator": FilterOperator.GTE # Büyük veya eşit
}
],
condition=FilterCondition.AND
)
# Filtrelerle sorgula
retriever = index.as_retriever(similarity_top_k=5)
query_engine = index.as_query_engine()
response = query_engine.query("Son politika güncellemelerini özetle", filters=filters)
Pratik Örnekler: Çok Kiracılı (Multi-Tenant) SaaS Güvenliği
Kullanıcıların farklı kuruluşlara ait olduğu çok kiracılı bir SaaS platformunu düşünün. Tüm kiracılar için paylaşılan bir vektör deposu kullanıyorsanız, güvenlik için meta veri filtreleme vazgeçilmezdir. Her belge parçasını bir `tenant_id` ile etiketlemeniz gerekir. Geri getirme sırasında uygulama katmanı, mevcut kullanıcının `tenant_id`'sini filtre nesnesine enjekte etmelidir. Bu, anlamsal sorgu mükemmel eşleşse bile Kiracı A'nın gizli verilerinin asla Kiracı B için geri getirilmemesini sağlar.
Sonuç
Meta veri filtreleme, RAG sistemlerini basit anlamsal arama motorlarından hassas, güvenli ve bağlamdan haberdar bilgi geri getirme platformlarına dönüştürür. Yapılandırılmış filtrelerin vektör benzerliğiyle entegrasyonunda ustalaşarak geliştiriciler, LLM yanıtlarının doğruluğunu önemli ölçüde artırabilir, bağlam penceresini sınırlayarak token maliyetlerini düşürebilir ve sıkı veri yönetişimi politikalarını uygulayabilir. RAG mimarileri karmaşıklığını artırdıkça, meta verileri geri getirme hattınızda birinci sınıf bir vatandaş olarak görmek artık isteğe bağlı değil—temeldir.