İçeriğe geç
Kaynak kütüphanesi
GOCUX / Makalelerknowledge

Arama API'si mi, kendi vektör dizininiz mi: RAG için erişim seçimi

Bir arama API'si üzerinden erişimin kendi vektör dizininizi işletmekten ne zaman iyi olduğu, ne zaman olmadığı ve kaynak denetimini kaybetmeyen karma tasarımlar.

Erişimle desteklenmiş üretim (RAG) için akla gelen ilk tasarım genellikle bir vektör veritabanıdır: belgeleri parçalara bölersiniz, vektörleştirirsiniz, vektörleri saklarsınız ve soru anında benzerlik araması yaparsınız. Bu çalışır; ama size bakımı gereken bir hat da bırakır. Geniş bir soru sınıfı için daha basit bir seçenek vardır: soruyu ya da yeniden yazılmış halini bir arama API'sine gönderirsiniz, ilk sonuçları indirir ve çıkarılan metni modele verirsiniz. Bu yazı ikisi arasında nasıl seçim yapılacağını ve ekiplerin çoğunun sonunda vardığı karma tasarımları ele alıyor. Anlamsal arama ve web arama API'leri hakkında temel bilgiye sahip olduğunuzu varsayıyor.

Yan yana iki hat

Kendi dizininize dayanan hat belgeleri edinir, metni çıkarır, parçalar, vektörleştirir ve saklar. Soru anında sorguyu vektörleştirir, en yakın parçaları getirir, isterseniz yeniden sıralar ve yanıtı üretir. Derlem, sıralama ve hata biçimleri sizindir.

Arama API'sine dayanan hat işini soru anında yapar. Soruyu bir ya da birkaç sorguya dönüştürür, arama API'sini çağırır, ilk sayfaları indirip metinlerini çıkarır (ya da API'nin döndürdüğü özetleri veya sayfa metnini kullanır), isterseniz yeniden sıralar ve yanıtı üretir. Dizin ve sıralama başkasınındır. Sorgunun nasıl kurulacağı, hangi sayfaların seçileceği ve metinle ne yapılacağı sizindir.

"Kendi dizininiz" yalnızca vektör demek zorunda değildir. BM25 sıralamalı bir anahtar kelime dizini ya da anahtar kelime ile vektör puanlarını birleştiren karma bir dizin, özellikle adlar, kodlar ve birebir ifadeler için çoğu zaman saf bir vektör deposundan daha iyi bir başlangıçtır. Asıl seçim, kendi kurduğunuz bir dizin ile kiraladığınız bir dizin arasındadır.

Arama API'si ne zaman daha iyi bir getiricidir

  • Derlem açık web'in kendisiyse. Web'i anlamlı bir ölçüde kendiniz dizinleyemezsiniz; onu zaten tarayan bir sağlayıcı çok daha geniş bir alanı kapsar. Bkz. web dizini nedir.
  • Tazelik önemliyse. Haberler, ürün sayfaları ve duyurular çoğu ekibin yeniden tarayıp vektörleştirebileceğinden daha hızlı değişir. Tazelik konusunu canlı web verisiyle RAG rehberi ayrıntılı ele alıyor.
  • Sorular geniş ve öngörülemezse. Kaynakları önceden sayamıyorsanız önceden dizinleyemezsiniz.
  • Henüz başlangıçtaysanız. Aramaya dayalı bir prototip, edinme, parçalama stratejisi ve dizin işletimine yatırım yapmadan önce özelliğin işe yarayıp yaramadığını gösterebilir.
  • Üçüncü taraf içeriğinin kopyasını tutmak istemiyorsanız. Soru anında indirip sonra atmak, başkalarının sayfalarından uzun ömürlü bir kopya oluşturmanızı önler; ancak indirdiğiniz içerik için kullanım koşulları yine geçerlidir.

Kendi dizininiz ne zaman daha iyi bir getiricidir

  • İçerik özelse. Kurum içi belgeler, sözleşmeler, destek kayıtları ve wikiler herkese açık aramada görünmez. Şirket içi kullanımların çoğunda bu tek başına kararı verir.
  • Erişim denetimi önemliyse. Kendi dizininiz soruyu kimin sorduğuna göre süzebilir. Belge düzeyindeki izinleri başkasının sıralaması üzerinden uygulamak zordur.
  • Tekrarlanabilirlik gerekiyorsa. Aynı soru yarın da aynı pasajları getirmeli ki yanıt denetlenebilsin ya da bir regresyon testi geçebilsin. Herkese açık arama sonuçları dizin ve sıralama değiştikçe kayar.
  • Derlem kararlı ve iyi tanımlıysa. Bir ürünün dokümantasyonu, bir mevzuat seti ya da bir araştırma koleksiyonu, bilerek yeniden dizinleyebileceğiniz belirli sürümlerle değişir.
  • Kullanılan dil uzmanlık gerektiriyorsa. Parça numaraları, hukuki atıflar ve kurum içi proje adları genel aramada çoğu zaman kötü, ayarlanmış bir anahtar kelime dizininde ise iyi sıralanır.
  • Hacim ve maliyet öngörülebilir olmalıysa. Sorgu başına ücretler trafikle birlikte büyür; kendi dizininizin maliyeti büyük ölçüde sabittir, artı mühendislik zamanı. Hangisinin daha ucuz olduğu tamamen sizin hacimlerinize bağlıdır; ikisini de kendi rakamlarınızla modelleyin.
  • Sorular sistemlerinizin dışına çıkmamalıysa. Her soruyu harici bir sağlayıcıya göndermek hassas işlerde kabul edilemez olabilir.

Kendi durumunuz için doldurulacak bir karşılaştırma

KonuArama API'siKendi dizininiz
KapsamSağlayıcı neyi dizinliyorsaTam olarak sizin aldığınız içerik
TazelikSağlayıcının tarama döngüsüSizin yenileme döngünüz
Özel içerikErişilemezEvet
Kullanıcı bazında izinUygulanamazKullanıcıya göre süzülebilir
TekrarlanabilirlikSonuçları kaydetmezseniz düşükDizini sürümlerseniz yüksek
Sıralama denetimiSorgu parametreleri ve alan adı süzgeçleriTam
İşletimSağlayıcı bağımlılığı, kotalar, koşullarEdinme, vektörleştirme, dizin bakımı
Soruların gittiği yerSağlayıcıyaKendiniz barındırıyorsanız sizde kalır

Tabloyu kendi durumunuz için doldurun, ardından adayları demolar yerine gerçek sorgular üzerinde puanlayın. Bu test kümesinin nasıl kurulacağını web aramasını kendi sorgularınızla değerlendirmek yazısı anlatıyor.

Ayakta kalan karma tasarımlar

Uzun ömürlü sistemler genellikle ikisini birleştirir. Dört kalıp ihtiyaçların çoğunu karşılar:

  1. Soruya göre yönlendirin. Basit kurallar ya da küçük bir sınıflandırıcı, kurum içi konulardaki soruları kendi dizininize, dış dünyaya dair soruları aramaya gönderir. Hatalı yönlendirmeler incelenebilsin diye her yönlendirme kararını kaydedin.
  2. İkisinden de getirin, sonra yeniden sıralayın. Her iki kaynağı da sorgulayın, sıra birleştirme yöntemiyle ya da bir yeniden sıralama modeliyle harmanlayın ve her pasajı kökeniyle etiketleyin; böylece yanıt hangisinin nereden geldiğini söyleyebilir.
  3. Arayın, sonra önbelleğe alın. Arama yoluyla indirilen sayfalar, yaşam süresi tanımlı kısa ömürlü bir dizine dönüşür. Tekrarlanan sorular önbellekten yanıtlanır; süresi dolan kayıtlar yeniden indirilir. Bu aynı zamanda modelin tam olarak neyi gördüğünün kaydını da bırakır.
  4. Seçin, sonra geri çekilin. En çok güvendiğiniz kaynaklar (resmî dokümantasyon ya da düzenleyici kurumlar gibi) için kendi dizininizi tutun; aramayı yalnızca o dizinde ilgili bir şey olmadığında ve mümkünse bir alan adı izin listesiyle sınırlayarak kullanın.
def retrieve(question, user):
    route = classify(question)          # "internal", "external" ya da "both"
    passages = []
    if route in ("internal", "both"):
        passages += owned_index.search(question, allowed_for=user)
    if route in ("external", "both"):
        for page in search_api.query(rewrite(question), domains=ALLOWLIST):
            passages += extract_and_chunk(page, retrieved_at=now())
    ranked = rerank(question, passages)
    log_retrieval(question, route, ranked)   # modelin gerçekte gördüğü
    return ranked[:TOP_K]

Kayıt satırı isteğe bağlı değildir. Neyin getirildiğine dair bir kayıt yoksa, aramaya dayalı bir yanıt sonradan açıklanamaz; çünkü o zamana kadar arama sonuçları çoktan değişmiş olur.

Nelerden vazgeçersiniz, nasıl geri kazanırsınız

Aramaya dayalı erişim denetimden ödün verir. Üç alışkanlık bunun büyük kısmını geri kazandırır.

Birincisi, hangi kaynakların yanıt verebileceğine karar verin: soru türü başına alan adı izin ya da engel listeleri, ima edilmek yerine yazıya dökülmüş olarak. Hangi kaynakların yanıt verebileceğine karar vermek notu bunu açık hale getirmenin gerekçesini anlatıyor.

İkincisi, kullandığınızın anlık görüntüsünü alın: bir yanıta katkıda bulunan her sayfanın çıkarılmış metnini, URL'sini ve alınma zamanını saklayın; böylece yanıt daha sonra modele gerçekte verilen malzemeye karşı kontrol edilebilir.

Üçüncüsü, boş sonucu bir yanıt olarak kabul edin: iki kaynak da ilgili bir şey döndürmediğinde, modelin boşluğu kendi belleğinden doldurmasına izin vermek yerine bunu açıkça söyleyin.

GoCux nerede devreye girer

GoCux bu seçimin kendi derleminize dayanan tarafında durur. Bir web arama API'si değildir ve açık web'i okumaz. Bilgi arama, tek bir projenin belgeleriyle sınırlı bir soruyu alır ve pasajları atıflarıyla birlikte döndürür. Tam metin erişim malzeme içe aktarılır aktarılmaz çalışır; anlamsal erişim ise kullanılabilir olduğunda katkı verir. Boş bir sonuç geçerli bir yanıt sayılır; çalışamayan bir arama ise "hiçbir şey bulunamadı" olarak değil, kullanılamıyor olarak bildirilir. Bu ayrım her hatta kopyalanmaya değer.

Web malzemesi gerektiğinde, yetkilendirilmiş bir tarama ya da dışa aktarma adımıyla içeri girer ve sayfa referansını ve alınma tarihini korur; böylece projenin derlemine kaynak bilgisi bozulmadan katılır. Araştırma, kaynak izin listesi içeren onaylanmış bir plandan yürür ve boş bırakılmış bir izin listesi hiçbir kaynağa izin vermez. Erişim kalitesinin nasıl değerlendirileceği için aramayı değerlendirme belgelerine bakın.

Karar kontrol listesi

  • Soru türlerinizi listeleyin; hangilerinin özel içerik, hangilerinin tazelik, hangilerinin ikisini birden gerektirdiğini işaretleyin.
  • Özel içerik ya da kullanıcı bazında izin gerektiren her şey için kendi dizininiz gerekir.
  • Açık web ya da gün içi tazelik gerektiren her şey için arama ya da işletmeyi göze alabileceğiniz bir tarama gerekir.
  • Bir karma kalıp seçin; her yanıt için yönlendirmeyi ve getirilen pasajları kaydedin.
  • Her soru türü için izin verilen kaynakları yazıya dökün.
  • İki seçeneğin maliyetini beklediğiniz hacimlerde modelleyin.
  • Gerçek sorulardan bir test kümesi oluşturun ve seçim yapmadan önce getirilen pasajları elle kontrol edin.
  • "İlgili kaynak yok" yanıtını arayüzde desteklenen bir sonuç haline getirin.

Bu iş akışını çalışma alanınıza taşıyın.

Kapsamı belirleyin. Kanıtları inceleyin. Gereken adımları onaylayın.

Çalışma alanını aç

Sıradaki adım