Seringkali, tidak. Untuk folder berisi kontrak, laporan, atau email, agen AI dengan alat pencarian teks penuh menemukan file yang tepat, membaca hanya bagian yang cocok dan mengutipnya, dan indeks berjalan secara lokal tanpa model embedding dan tanpa penyimpanan vektor. GroupDocs.Search.Mcp memberikan Claude Desktop, Claude Code, Cursor, atau Copilot alat itu dalam satu perintah Docker:

Indeks folder kontrak, lalu beri tahu saya kontrak mana yang menyebutkan penalti terminasi dan kutip klausulnya.

Versi langkah demi langkah dengan konfigurasi dan pemecahan masalah ada di dokumentasi: Cara mencari dokumen dengan agen AI menggunakan MCP.

Mengapa semua orang beralih ke embedding terlebih dahulu?

Karena “retrieval-augmented generation” muncul sebagai resep: memecah dokumen menjadi potongan, meng‑embed setiap potongan, menyimpan vektor‑vektornya, meng‑embed pertanyaan, mengambil potongan terdekat, dan menempelkannya ke dalam prompt. Itu berhasil, dan untuk pertanyaan yang tidak berbahasa seperti dokumen, itu adalah alat yang tepat. Namun itu adalah alur kerja dengan model embedding yang harus dipanggil, penyimpanan yang harus dijalankan, pemecahan yang harus disetel, dan pekerjaan re‑embedding setiap kali dokumen berubah. Untuk “kontrak mana dari 300 kontrak saya yang menyebutkan penalti terminasi”, mesin itu menjawab pertanyaan yang dapat dijawab langsung oleh indeks pencarian.

Bukti kini menyusul intuisi. Sebuah studi yang dipublikasikan di arXiv pada akhir 2025 (Keyword search is all you need) memberi agen hanya pencarian kata kunci dan regex pada sebuah folder dan mengukurnya melawan pipeline RAG standar: lebih dari 90 % skor RAG, tanpa basis data vektor, dan lebih cocok untuk koleksi yang sering berubah. Agen‑agen pemrograman sudah menunjukkan pola ini dalam praktik: mereka mencari dengan grep, menyempurnakan, dan mencari lagi.

Apa yang dilakukan agen sebagai gantinya?

Tiga panggilan. GroupDocs.Search.Mcp mengekspos delapan alat; loop membutuhkan tiga di antaranya:

user              agent                         Search MCP server
 |  "Which contracts mention a termination penalty?"           |
 |---------------->|                                           |
 |                 |-- add_to_index ------------------------->|  reads the
 |                 |   {"documentsPath":"contracts",           |  files once,
 |                 |    "indexName":"contracts"}               |  stores text
 |                 |<- "5 document(s) added, 5 in the index" --|
 |                 |-- search ------------------------------->|
 |                 |   {"query":"termination AND penalty"}     |
 |                 |<- {"documentsFound":3, "documents":[ ... |  which files
 |                 |-- get_text_fragments ------------------->|
 |                 |   {"query":"\"termination penalty\""}     |
 |                 |<- === contracts/acme-...-agreement.pdf ===|  the passages
 |<- "Two contracts carry one: Acme (3 monthly fees, 12.3),    |
 |    Globex (50% of the remaining fees). Initech excludes it."|

add_to_index membaca file sekali dan menyimpan teks dalam indeks bernama di disk. search mengembalikan file yang cocok sebagai JSON dengan hitungan kemunculan. get_text_fragments mengembalikan setiap kecocokan dengan beberapa kata konteks, sehingga agen mengutip klausul alih‑alih memuat seluruh kontrak.

Berikut apa yang sebenarnya dikembalikan server dalam pengujian kami, terhadap lima kontrak sintetis:

-> search {"query":"termination AND penalty","indexName":"contracts"}
<- documentsFound 3: acme-master-services-agreement.pdf,
   globex-consulting-agreement.docx, initech-nda.docx

-> get_text_fragments {"query":"\"termination penalty\"",...}
<- === contracts/acme-master-services-agreement.pdf (1 occurrence(s)) ===
     …a termination penalty of three monthly fees applies, payable
     within 30…
   === contracts/globex-consulting-agreement.docx (1 occurrence(s)) ===
     …Early termination penalty: the Client pays 50 percent of the fees…

Perhatikan kontrak ketiga. NDA Initech cocok dengan termination AND penalty karena menyatakan “there is no fee and no penalty associated with termination”. Bagian tersebut yang membedakan kecocokan dari sekadar penyebutan, dan agen yang membaca bagian‑bagian itu menyatakannya. Itulah grounding: setiap klaim dalam jawaban menunjuk pada file dan kalimat yang dapat Anda buka.

Di mana masing‑masing pendekatan menang?

Pipeline embedding                       Pencarian teks penuh berbasis agen
-------------------------------------    -------------------------------------
memecah, meng-embed, menyimpan dalam penyimpanan vektor    add_to_index: indeks teks penuh lokal
meng-embed pertanyaan, mengambil k potongan teratas       agen mencari, menyempurnakan, mencari lagi
menempelkan potongan ke dalam prompt                      get_text_fragments: kutipan bagian
meng-embed ulang saat dokumen berubah                     update_index membaca ulang apa yang berubah
memerlukan model embedding dan penyimpanan               tidak ada panggilan model, tidak ada jaringan saat runtime
menyamakan makna; peringkat tidak transparan               menyamakan kata; setiap hasil dapat dijelaskan

Pencarian teks penuh kalah ketika pertanyaan dan dokumen tidak berbagi kata: “kontrak mana yang berisiko bagi kami?” tidak memiliki kata kunci. Ia menang ketika kosakata berbagi, yang menggambarkan kebanyakan pertanyaan orang tentang dokumen mereka sendiri: nama klausul, produk, pelanggan, nomor faktur, rentang tanggal. Ketika kueri tidak menemukan apa‑apa, agen mencoba renewal OR renews, atau pencocokan fuzzy, seperti yang dilakukan orang. Server membantu: kueri dua kata tanpa kutipan tidak cocok apa‑apa di GroupDocs.Search, dan hasil kosong membawa hint yang memberi tahu agen untuk mengutip frasa tersebut.

Alat mana untuk pertanyaan mana?

Pengguna menanyakan Agen memanggil
“Indeks folder ini” add_to_index
“File mana yang menyebut X?” search
“Apa yang dikatakan tentang X?” get_text_fragments
“File berubah, segarkan” update_index
“Lupakan folder draft” remove_from_index
“Apa yang ada di indeks?” get_index_info
“Mulai indeks terpisah” create_index
“Mengapa hanya 10 hasil?” get_license_status

Indeks memahami 82 format, termasuk PDF, Office, OpenDocument, HTML, dan arsip email (PST, OST, MSG, EML) beserta lampirannya.

Bagaimana cara menjalankannya?

claude mcp add groupdocs-search -- docker run --rm -i \
  -v /path/to/documents:/data ghcr.io/groupdocs-search/search-net-mcp:latest

Cursor, Claude Desktop, VS Code dengan GitHub Copilot, dan klien lain menggunakan kontainer yang sama dalam file konfigurasi mereka masing‑masing: Daftar di klien AI. Pada Linux tambahkan --user "$(id -u):$(id -g)" agar kontainer dapat menulis indeks ke folder Anda. Server menjalankan mesin GroupDocs.Search 26.10, yang format indeks barunya membuat indeks lebih kecil dan mengurangi penggunaan memori sekitar setengahnya (catatan rilis).

Batasan jujur

  • Dalam mode evaluasi sebuah indeks menampung maksimal 100 dokumen dan pencarian mengembalikan maksimal 10; setiap respons menyebutkan hal itu. Panggil get_license_status terlebih dahulu.
  • Ini adalah pencarian teks penuh, bukan pencarian semantik: ia mencocokkan kata, bukan makna.
  • Tanpa OCR: PDF yang dipindai tanpa lapisan teks hanya diindeks berdasarkan properti filenya.
  • Hanya tersedia sebagai gambar Docker (alat terpaket melebihi batas ukuran NuGet).

FAQ

Apakah Claude dapat mencari dokumen lokal saya tanpa mengunggahnya?
Ya. Server berjalan dalam kontainer di mesin Anda dan membaca folder yang Anda mount; hanya bagian yang dikutip agen yang sampai ke model.

Apakah ini RAG?
Ini bersifat retrieval‑augmented, tetapi berbasis agen: model memutuskan apa yang harus dicari dan kapan sudah cukup, menggunakan indeks teks penuh alih‑alih embedding.

Apa yang terjadi ketika dokumen saya berubah?
Minta agen untuk menyegarkan. update_index membaca ulang hanya file yang berubah, ditambahkan, atau dihapus.

Selami lebih dalam