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_statusterlebih dahulu. - Konteks fragmen dihitung dalam kata, bukan kalimat, sehingga sebuah bagian dapat dimulai di tengah kalimat; tingkatkan
termsBeforebila 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
- Dokumentasi, panduan kanonik: Cara mendapatkan bagian yang cocok alih‑alih membaca seluruh file
- Pusat dokumentasi: GroupDocs.Search MCP Server
- Mulai di sini: Apakah Anda memerlukan basis data vektor untuk menanyakan folder dokumen?
- Terkait: Mengapa agen AI tidak boleh membaca 300 kontrak untuk menjawab satu pertanyaan
- Terkait: grep tidak dapat membaca PDF: beri agen pemrograman Anda indeks dokumen
- Terkait: Cari arsip email Anda dengan agen AI: PST, MSG, EML dan lampiran di dalamnya
- Terkait: Memori proyek untuk agen AI: satu indeks per proyek, tetap terkini
- Model on‑premise dan keamanan: 3 arsitektur untuk pemrosesan dokumen AI, dan yang menjaga file di dalam jaringan Anda
- Pertanyaan: Forum GroupDocs Search
- Sumber: GroupDocs.Search.Mcp di GitHub