Belgelerinizle ilgili bir yanıt, üzerine inşa edildiği metin kadar iyidir ve bir sohbete bütün dosyaları yapıştırdığınızda, modelin aslında hangi bölümü kullandığını söyleyemezsiniz. Docker’da yerel olarak çalışan GroupDocs.Search.Mcp, Claude Desktop, Cursor veya Copilot’a farklı bir ilke sunar: get_text_fragments yalnızca bir sorguyla eşleşen pasajları, birkaç kelimelik bağlam ve geldiği dosya adıyla birlikte döndürür, böylece ajan alıntılardan yanıt verir:

Sözleşmelerim cezalar hakkında ne diyor? Pasajları alıntılayın, her birini anlamak için yeterli bağlamla.

Yapılandırma ve sorun giderme adımlarıyla birlikte adım adım sürüm belgelerde bulunabilir: How to get the matching passages instead of reading whole files.

Yanıtlar Belgelerden Neden Sapar?

Çünkü bağlam penceresi bir bütçedir ve bütün belgeler bunu kötü harcar. Cezalarla ilgili bir soru, elli sayfadan belki üç cümle gerektirir. Elli sayfayı yapıştırdığınızda model, diğer her şeyin arasında bu üç cümleyi kendisinin bulması ve ardından yazarken onları tutması gerekir. Uzun bağlamlar özetlenir, erken materyal ağırlığını kaybeder ve yanıt, sizin sözleşmelerinizin ne dediğinden ziyade modelin sözleşmelerin genellikle ne dediğine dair genel algısına dayanır. Endüstri bu yönetim disiplinine bağlam mühendisliği adını verir; bunun en basit şekli ihtiyacınız olmayan metni yüklememektir.

Bir Parçacık Nasıl Görünür?

Dizin zaten her belgenin metnini tutar, bu yüzden sunucu her eşleşmenin etrafındaki pasajı kesebilir. Bunlar, beş sentetik sözleşmeye karşı yaptığımız testten gerçek yanıtlar. Varsayılan ayar, her iki tarafta sekiz kelime, bir ifade verir:

-> get_text_fragments {"query":"penalty","indexName":"contracts"}
<- === contracts/acme-master-services-agreement.pdf (1 occurrence(s)) ===
     [content] …before the end of the Term, a termination penalty of
   three monthly fees applies, payable within 30…

İki tarafında yirmi kelime, tüm maddeyi verir:

-> get_text_fragments {"query":"penalty","indexName":"contracts",
     "termsBefore":20,"termsAfter":20,"maxFragmentsPerDocument":1}
<- === contracts/acme-master-services-agreement.pdf (1 occurrence(s)) ===
     …convenience on 90 days written notice.
   12.3 If the Client terminates before the end of the Term, a termination
   penalty of three monthly fees applies, payable within 30 days of the
   termination date.
   14.2 Force majeure: neither party is…

termsBefore ve termsAfter bir ayar düğmesidir: “hangi dosyalar ve yaklaşık nerede” için küçük, “bölümü alıntıla” için büyük. maxFragmentsPerDocument ve maxDocuments yanıtın boyutunu sınırlar, böylece iki yüz kez geçen bir kelime bağlamı doldurmaz.

Bütçe, yan yana

Dosyaları okuma                        Dizini arama
-------------------------------------    -------------------------------------
ajan her belgeyi açar               arama: hangi dosyalar eşleşiyor (JSON)
  bağlam, korpusla birlikte büyür          get_text_fragments: pasajlar
  uzun dosyalar soruyu gölgeler        (~8 kelime her iki tarafta, dosya başına)
  her soru için tekrarlanır            yanıt dosya + pasajı gösterir
                                         dizin bir sonraki sefer yeniden kullanılır

Fark, korpusla birlikte artar. Üç kısa dosya için neredeyse önemsizdir. Uzun sözleşmeler, raporlar ve e-postalardan oluşan bir klasör için, bir soru için parçacıklar birkaç yüz kelime olur, her aday belgenin tam metnine karşı.

Kelimeler Farklı Olduğunda

Tam metin arama kelimeleri eşleştirir, bu da temel oluşturma için bir özelliktir (her eşleşme açıklanabilir) ve geri getirme için bir sınırlamadır (bir eşanlamlı kaçırılır). Ajana görevi varyantları denemektir ve her varyantın gerçekte neyi eşleştirdiğini görebilir:

-> search {"query":"renewal OR renews","indexName":"contracts"}
<- umbrella-office-lease.pdf, terms ["renewal", "renews"]

-> search {"query":"renewl","indexName":"contracts","fuzzy":true}
<- umbrella-office-lease.pdf, terms ["renewal", "renews", "rent"]

Bulanık eşleştirme bir yazım hatasını kurtardı ve ayrıca rent kelimesini de çekti. Yanıt, eşleştirdiği terimleri listelediği için bir ajan ya da siz, aşırı eşleşmeyi güvenmek yerine görebilirsiniz. Bu şeffaflık, “temellendirilmiş"in ne anlama gelmesi gerektiğidir: sadece “yanıt bir kaynağa atıfta bulunur” değil, aynı zamanda “kaynağın nasıl bulunduğunu görebilirsiniz”.

Temellendirilmiş Bir Yanıt Nasıl Görünür

Alıntı isteyin ve yanıt, bir bakışta doğrulayabileceğiniz bir biçimde gelir:

İki sözleşme bir fesih cezası içeriyor. Acme MSA, madde 12.3: “fesih tarihinden itibaren 30 gün içinde ödenecek üç aylık ücret cezası uygulanır.” Globex danışmanlık anlaşması, bölüm 9: “Müşteri, mevcut aşama için kalan ücretlerin yüzde 50’sini öder.” Initech NDA, fesih ve ceza bahseder ancak ceza olmadığını belirtir.

Eğer bir özet bir alıntıyı yanlış okursa, yanlış okuma alıntının hemen yanında yer alır.

Dürüst Sınırlamalar

  • Değerlendirme modunda bir dizin en fazla 100 belge tutar ve bir arama en fazla 10 sonuç döndürür. Değerlendirme modu ayrıca bazı formatların indekslenmiş metnine “Evaluation only…” satırı ekler; bu satır parçacıklarda görünebilir; sunucunun lisansını alın ve dizini yeniden oluşturun böylece kaldırılır. Önce get_license_status çağırın.
  • Parçacık bağlamı kelimelerle sayılır, cümlelerle değil, bu yüzden bir pasaj cümlenin ortasından başlayabilir; gerektiğinde termsBefore değerini artırın.
  • OCR yok: metin katmanı olmayan taramalar döndürülecek pasaj içermez.
  • Sadece Docker; Linux’ta --user "$(id -u):$(id -g)" ekleyin.

SSS

Claude’ın belgelerimden kaynakları göstermesini nasıl sağlarım?
Buna dosya adıyla birlikte kaynak metni döndüren bir araç verin. get_text_fragments tam olarak bunu yapar ve “pasajı ve dosyasını alıntıla” gibi bir talimat ona alışkanlık kazandırır.

Bu token kullanımını azaltır mı?
Bir soruya yanıt vermek için bütün belgeleri yüklemekten kaçınır: ajan yalnızca eşleşen pasajları okur. Ne kadar tasarruf sağlandığı dosyalarınızın boyutuna bağlıdır.

Ajan, gerektiğinde hâlâ bütün bir dosyayı okuyabilir mi?
Evet, kendi dosya araçlarıyla. Parçacıklar bulma ve alıntılamak içindir; pasaj yeterli olmadığında bütün dosyayı okuyun.

Daha Derine İncele