Jawaban tentang dokumen Anda hanya sebaik teks yang menjadi dasarnya, dan ketika Anda menempelkan seluruh file ke dalam obrolan, Anda tidak dapat mengetahui bagian mana yang sebenarnya digunakan model. GroupDocs.Search.Mcp, yang dijalankan secara lokal di Docker, memberi Claude Desktop, Cursor, atau Copilot primitif yang berbeda: get_text_fragments mengembalikan hanya bagian‑bagian yang cocok dengan kueri, dengan beberapa kata konteks dan file asalnya, sehingga agen menjawab dengan kutipan:

Apa yang dikatakan kontrak saya tentang penalti? Kutip bagian‑bagian tersebut, dengan konteks yang cukup untuk memahami masing‑masing.

Versi langkah‑demi‑langkah dengan konfigurasi dan pemecahan masalah ada di dokumentasi: Cara mendapatkan bagian yang cocok alih‑alih membaca seluruh file.

Mengapa jawaban menyimpang dari dokumen?

Karena jendela konteks memiliki anggaran, dan seluruh dokumen menghabiskannya dengan buruk. Pertanyaan tentang penalti mungkin hanya membutuhkan tiga kalimat dari lima puluh halaman. Menempelkan lima puluh halaman membuat model harus menemukan tiga kalimat itu sendiri di antara semua yang lain, lalu menahannya saat menulis. Konteks yang panjang diringkas, materi awal kehilangan bobot, dan jawaban mulai bergantung pada pemahaman umum model tentang apa yang biasanya dikatakan kontrak, bukan pada apa yang dikatakan kontrak Anda. Industri menyebut disiplin mengelola hal ini rekayasa konteks; bentuk paling sederhana adalah tidak memuat teks yang tidak Anda perlukan.

Seperti apa fragmen?

Indeks sudah menyimpan teks setiap dokumen, sehingga server dapat memotong bagian di sekitar setiap kecocokan. Ini adalah respons nyata dari pengujian kami, terhadap lima kontrak sintetis. Pengaturan default, delapan kata di setiap sisi, memberikan sebuah frasa:

-> 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…

Dua puluh kata di setiap sisi memberikan seluruh klausa:

-> 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 dan termsAfter adalah pengatur: kecil untuk “file mana dan kira‑kira di mana”, besar untuk “kutip klausa tersebut”. maxFragmentsPerDocument dan maxDocuments membatasi ukuran jawaban, sehingga kata yang muncul dua ratus kali tidak membanjiri konteks.

Anggaran, berdampingan

Reading the files                        Searching the index
-------------------------------------    -------------------------------------
agent opens every document               search: which files match (JSON)
  context grows with the corpus          get_text_fragments: the passages
  long files crowd out the question        (~8 words either side, per file)
  repeated for every question            answer cites file + passage
                                         the index is reused next time

Perbedaannya semakin besar seiring bertambahnya korpus. Untuk tiga file pendek hampir tidak terasa. Untuk folder berisi kontrak panjang, laporan, dan surel, fragmen untuk satu pertanyaan dapat berjumlah beberapa ratus kata, dibandingkan dengan teks lengkap setiap dokumen kandidat.

Ketika kata‑kata berbeda

Pencarian teks penuh mencocokkan kata, yang merupakan fitur untuk penanaman dasar (setiap temuan dapat dijelaskan) dan batas untuk recall (sinonim menjadi tidak terdeteksi). Tugas agen adalah mencoba varian, dan ia dapat melihat apa yang sebenarnya cocok pada setiap varian:

-> 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"]

Pencocokan fuzzy menyelamatkan ejaan yang salah dan juga menarik rent. Karena respons mencantumkan istilah yang cocok, agen, atau Anda, dapat melihat kelebihan kecocokan alih‑alih mempercayainya. Transparansi inilah yang seharusnya dimaksud dengan “berdasarkan sumber”: bukan hanya “jawaban menyebutkan sumber”, tetapi “Anda dapat melihat bagaimana sumber ditemukan”.

Seperti apa jawaban yang berlandaskan sumber

Minta kutipan, dan jawaban muncul dalam bentuk yang dapat Anda verifikasi sekilas:

Dua kontrak memiliki penalti terminasi. Acme MSA, klausa 12.3: “a termination penalty of three monthly fees applies, payable within 30 days of the termination date.” Perjanjian konsultan Globex, bagian 9: “the Client pays 50 percent of the fees remaining for the current phase.” NDA Initech menyebutkan terminasi dan penalti tetapi menyatakan tidak ada penalti.

Jika ringkasan salah membaca kutipan, kesalahan tersebut berada tepat di sebelah kutipan.

Batasan yang jujur

  • Dalam mode evaluasi sebuah indeks memuat maksimal 100 dokumen dan pencarian mengembalikan maksimal 10. Mode evaluasi juga menambahkan baris “Evaluation only…” ke teks terindeks pada beberapa format, yang dapat muncul dalam fragmen; beri lisensi pada server dan bangun ulang indeks untuk menghilangkannya. Panggil get_license_status terlebih dahulu.
  • Konteks fragmen dihitung dalam kata, bukan kalimat, sehingga sebuah bagian dapat dimulai di tengah kalimat; tingkatkan termsBefore bila penting.
  • Tidak ada OCR: pemindaian tanpa lapisan teks tidak memiliki bagian untuk dikembalikan.
  • Hanya Docker; pada Linux tambahkan --user "$(id -u):$(id -g)".

FAQ

Bagaimana cara membuat Claude menyebutkan sumber dari dokumen saya?
Berikan alat yang mengembalikan teks sumber beserta nama file. get_text_fragments melakukan hal itu, dan instruksi seperti “kutip bagian dan file‑nya” membuatnya menjadi kebiasaan.

Apakah ini mengurangi penggunaan token?
Ini menghindari memuat seluruh dokumen untuk menjawab pertanyaan: agen hanya membaca bagian yang cocok. Seberapa banyak penghematan tergantung pada ukuran file Anda.

Apakah agen masih dapat membaca seluruh file bila diperlukan?
Ya, dengan alat file miliknya. Fragmen digunakan untuk menemukan dan mengutip; baca seluruh file ketika bagian tersebut tidak cukup.

Selami Lebih Dalam