Hızla gelişen Geriye Dönük Üretim (RAG) ortamında, veri işleme hattınızın kalitesi, halüsinasyon gören bir sohbet botu ile güvenilir bir teknik asistan arasındaki farkı belirleyen faktördür. Standart semantik parçalama basit olsa da, bağlamın birden fazla sayfaya yayıldığı veya bölümler arasındaki yapısal ilişkilere dayandığı karmaşık teknik dokümanlarla uğraşırken genellikle başarısız olur.
Bu yazı, bağlam korumayı optimize etmek için iki ileri düzey teknik olan hiyerarşik parçalama ve meta veri bilinçli parçalama üzerine odaklanmaktadır. Bu yöntemler, vektör veritabanı aramalarının, doğru Büyük Dil Modeli (LLM) yanıtları için gerekli olan semantik bütünlüğü korumasını sağlar.
Düz Parçalamanın Sorunları
Geleneksel RAG uygulamaları genellikle belgeleri karakter sayısına veya basit boşluklara dayalı olarak sabit boyutlu parçalara (örneğin, 500 token) böler. Bu yaklaşım kritik bir kusura sahiptir: belge yapısını görmezden gelir. Bir parça oluşturulduğunda, genellikle bir düşüncenin ortasında kesilir veya bir kod bloğunu açıklamasından ayırır. Sonuç olarak, vektör temsili çevresel bağlamı kaybeder ve alakasız aramalara yol açar.
Hiyerarşik Parçalama
Hiyerarşik parçalama, belgenin içerik tablosu yapısını koruyarak bu sorunu ele alır. Düz bir vektör listesi yerine, bu yöntem ebeveyn parçaların çocuk parçaların özetlerini içerdiği ağaç benzeri bir yapı oluşturur. Bir sorgu alındığında, sistem önce geniş bir konu için ebeveyn seviyesinde arama yapar. Ebeveyn alakalıysa, belirli çocuk parçalara iner. Bu çok seviyeli arama, geri çağırma işleminin belgelerin mantıksal akışına saygı duymasını sağlar.
Meta Veri Bilinçli Stratejilerin Uygulanması
Meta veri bilinçli parçalama, her bir parçayı açık yapısal meta verilerle zenginleştirerek bu yaklaşımı güçlendirir. Python dokümantasyonu için bu, yalnızca metni değil, işlev imzasını, ait olduğu sınıfı ve dosya yolunu da saklamak anlamına gelir. Bu meta veriler, geri çağırma sırasında güçlü filtreler olarak hizmet eder ve kosinüs benzerliği hesaplanmadan önce sonuçları daraltmanıza olanak tanır.
Pratik Python Uygulaması
Python dosyalarındaki işlev başlıklarını koruyan özel bir parçalama stratejisi kullanarak basitleştirilmiş bir örneğe bakalım. Meta verilerin parçalara nasıl ekleneceğini göstermek için langchain kütüphanesini kullanıyoruz.
from langchain.text_splitter import RecursiveCharacterTextSplitter
def create_metadata_aware_chunks(doc_text, metadata_map):
# Kod yapısına göre bölünme noktalarını tanımla
splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50,
separators=["\n\nclass ", "\n\ndef ", "\n\n#"]
)
chunks = splitter.split_text(doc_text)
enriched_chunks = []
for chunk in chunks:
# Yapısal meta veri ekle
enriched_chunks.append({
"text": chunk,
"metadata": {
"type": "code_section",
"parent_module": metadata_map.get(chunk, "Unknown")
}
})
return enriched_chunks
Bu örnekte, bölücü belirli kod ilişkili ayırıcılar kullanarak işlev tanımlamalarının keyfi olarak kesilmesini engeller. Meta veriye bir parent_module anahtarı ekleyerek, geri çağırma sistemi sonuçları yalnızca kullanıcının sorduğu belirli kütüphane veya modüle ait olan parçalara kolayca filtreleyebilir.
Teknik Dokümanlar İçin Faydalar
Bu tekniklerin benimsenmesi, teknik RAG uygulamaları için birkaç ayrıcalıklı avantaj sunar. İlk olarak, geri çağırma sonuçlarındaki gürültüyü önemli ölçüde azaltır. Meta verilerden yararlanarak, "method" veya "class" gibi yaygın terimlerdeki semantik benzerlikler nedeniyle aksi takdirde görünebilecek alakasız parçaları hariç tutabilirsiniz. İkinci olarak, oluşturulan yanıtların tutarlılığını artırır. Bir LLM, çevresel kod bloklarını veya ilgili işlev imzalarını içeren bağlam aldığında, daha kapsamlı ve doğru çözümler sunabilir.
Ayrıca, hiyerarşik yapılar daha verimli depolama ve sorgulamaya olanak tanır. Hiyerarşinin üst seviyelerinde özetler depolamak, başlangıçtaki geniş aramayı hızlandırabilir ve belirli teknik detaylara inmeden önce hesaplama yükünü azaltabilir. Bu verimlilik, büyük kod tabanları veya kapsamlı doküman kümeleriyle uğraşırken kritik öneme sahiptir.
Sonuç
RAG sistemlerinde bağlam korumayı optimize etmek, basit metin bölmenin ötesine geçmeyi gerektirir. Hiyerarşik ve meta veri bilinçli parçalama stratejileri uygulayarak geliştiriciler, teknik dokümanlardaki yapıyı ve ilişkileri anlayabilen sistemler oluşturabilir. Bu teknikler yalnızca aramaların doğruluğunu artırmakla kalmaz, aynı zamanda daha alakalı ve tutarlı yanıtlar sağlayarak genel kullanıcı deneyimini de iyileştirir. RAG uygulamaları daha karmaşık hale geldikçe, sofistike veri işleme hatlarına yatırım yapmak, başarılı AI uygulamaları için temel bir ayırt edici faktör olmaya devam edecektir.