Often, no. สำหรับโฟลเดอร์ที่มีสัญญา, รายงาน หรืออีเมล, เอเจนต์ AI ที่มีเครื่องมือค้นหาแบบเต็มข้อความจะค้นหาไฟล์ที่ตรง, อ่านเฉพาะส่วนที่ตรงกันและอ้างอิงไว้, และดัชนีทำงานในเครื่องโดยไม่มีโมเดลฝังและไม่มีที่เก็บเวกเตอร์. GroupDocs.Search.Mcp ให้ Claude Desktop, Claude Code, Cursor หรือ Copilot เครื่องมือนั้นในคำสั่ง Docker เพียงคำสั่งเดียว:
ดัชนีโฟลเดอร์สัญญา, แล้วบอกฉันว่ามีสัญญาใดบ้างที่กล่าวถึงค่าปรับการยกเลิกและอ้างอิงข้อกำหนดนั้น.
เวอร์ชันขั้นตอนต่อขั้นตอนพร้อมการกำหนดค่าและการแก้ไขปัญหาอยู่ในเอกสาร: How to search documents with AI agents using MCP.
ทำไมทุกคนจึงหันไปใช้การฝังเป็นอันดับแรก?
เพราะ “การสร้างแบบเสริมการดึงข้อมูล” (retrieval-augmented generation) ปรากฏเป็นสูตร: แบ่งเอกสารเป็นชิ้นส่วน, ฝังแต่ละชิ้น, เก็บเวกเตอร์, ฝังคำถาม, ดึงชิ้นส่วนที่ใกล้ที่สุดและแปะลงในพรอมต์. มันทำงานได้, และสำหรับคำถามที่ไม่ได้ใช้รูปแบบเดียวกับเอกสารมันเป็นเครื่องมือที่เหมาะสม. แต่เป็นกระบวนการที่ต้องมีโมเดลฝังเพื่อเรียกใช้, ที่เก็บข้อมูลเพื่อทำงาน, การแบ่งชิ้นส่วนที่ต้องปรับ, และงานการฝังใหม่ทุกครั้งที่เอกสารเปลี่ยนแปลง. สำหรับ “สัญญา 300 ฉบับของฉันที่กล่าวถึงค่าปรับการยกเลิก” เครื่องมือนี้ตอบคำถามได้โดยตรงเช่นเดียวกับดัชนีการค้นหา.
หลักฐานได้ตามทันกับความรู้สึกสัญชาตญาณ. การศึกษาเผยแพร่บน arXiv ในปลายปี 2025 (Keyword search is all you need) ให้เอเจนต์ทำการค้นหาแบบคีย์เวิร์ดและ regex บนโฟลเดอร์เท่านั้นและเปรียบเทียบกับสายงาน RAG มาตรฐาน: ได้คะแนนกว่า 90% ของคะแนน RAG, โดยไม่มีฐานข้อมูลเวกเตอร์, และเหมาะกับคอลเลกชันที่เปลี่ยนแปลงบ่อย. เอเจนต์การเขียนโค้ดได้แสดงรูปแบบนี้ในทางปฏิบัติแล้ว: พวกเขาค้นหาด้วย grep, ปรับปรุง, แล้วค้นหาใหม่.
เอเจนต์ทำอะไรแทน?
สามการเรียก. GroupDocs.Search.Mcp เปิดเผยเครื่องมือแปดอย่าง; ลูปต้องการสามอย่างจากนั้น:
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 อ่านไฟล์เพียงครั้งเดียวและเก็บข้อความไว้ในดัชนีที่ตั้งชื่อบนดิสก์. search คืนไฟล์ที่ตรงกันเป็น JSON พร้อมจำนวนการเกิด. get_text_fragments คืนแต่ละการจับคู่พร้อมคำบริบทไม่กี่คำ, ทำให้เอเจนต์อ้างอิงข้อกำหนดแทนการโหลดสัญญาทั้งหมด.
นี่คือผลลัพธ์ที่เซิร์ฟเวอร์ส่งกลับในการทดสอบของเรา, กับสัญญาเทียม 5 ฉบับ:
-> 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…
สังเกตสัญญาที่สาม. NDA ของ Initech ตรงกับ termination AND penalty เพราะมีข้อความ “there is no fee and no penalty associated with termination”. ส่วนข้อความนี้คือสิ่งที่บ่งบอกความแตกต่างระหว่างการจับคู่และการกล่าวถึง, และเอเจนต์ที่อ่านส่วนข้อความจะบอกเช่นนั้น. นั่นคือการทำให้ข้อมูลเป็นพื้นฐาน: ทุกข้ออ้างในคำตอบชี้ไปที่ไฟล์และประโยคที่คุณสามารถเปิดได้.
แต่ละวิธีชนะที่ไหน?
Embedding pipeline Agentic full-text search
------------------------------------- -------------------------------------
split, embed, store in a vector store add_to_index: a local full-text index
embed the question, take top-k chunks agent searches, refines, searches again
paste the chunks into the prompt get_text_fragments: quoted passages
re-embed when documents change update_index re-reads what changed
needs an embedding model and a store no model calls, no network at runtime
matches meaning; ranking is opaque matches words; every hit is explainable
การค้นหาแบบเต็มข้อความจะพ่ายแพ้เมื่อคำถามและเอกสารไม่มีคำร่วมกัน: “which contracts are risky for us?” ไม่มีคีย์เวิร์ด. มันชนะเมื่อคำศัพท์ร่วมกัน, ซึ่งอธิบายคำถามส่วนใหญ่ที่ผู้คนถามเกี่ยวกับเอกสารของตน: ชื่อข้อกำหนด, ผลิตภัณฑ์, ลูกค้า, หมายเลขใบแจ้งหนี้, ช่วงวันที่. เมื่อคำค้นหาขาด, เอเจนต์จะลอง renewal OR renews หรือการจับคู่แบบ fuzzy, เหมือนคนทำ. เซิร์ฟเวอร์ช่วย: คำค้นหาสองคำที่ไม่ได้อ้างอิงไม่ตรงกับอะไรใน GroupDocs.Search, และผลลัพธ์ว่างจะมี hint ที่บอกเอเจนต์ให้ใส่เครื่องหมายอัญประกาศกับวลี.
เครื่องมือใดสำหรับคำถามใด?
| The user asks | The agent calls |
|---|---|
| “ทำดัชนีโฟลเดอร์นี้” | add_to_index |
| “ไฟล์ใดบ้างที่กล่าวถึง X?” | search |
| “มันบอกอะไรเกี่ยวกับ X?” | get_text_fragments |
| “ไฟล์เปลี่ยนแปลง, รีเฟรช” | update_index |
| “ลืมโฟลเดอร์ร่าง” | remove_from_index |
| “อะไรอยู่ในดัชนี?” | get_index_info |
| “เริ่มดัชนีแยก” | create_index |
| “ทำไมผลลัพธ์ถึงมีแค่ 10 รายการ?” | get_license_status |
ดัชนีรองรับ 82 รูปแบบ, รวมถึง PDF, Office, OpenDocument, HTML, และไฟล์เก็บอีเมล (PST, OST, MSG, EML) พร้อมไฟล์แนบของพวกมัน.
วิธีการรัน
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 พร้อม GitHub Copilot และไคลเอนต์อื่น ๆ ใช้คอนเทนเนอร์เดียวกันในไฟล์กำหนดค่าของตน: Register in AI clients. บน Linux เพิ่ม --user "$(id -u):$(id -g)" เพื่อให้คอนเทนเนอร์เขียนดัชนีลงในโฟลเดอร์ของคุณ. เซิร์ฟเวอร์ทำงานด้วยเอนจิน GroupDocs.Search 26.10, ซึ่งรูปแบบดัชนีใหม่ทำให้ดัชนีมีขนาดเล็กลงและใช้หน่วยความจำประมาณครึ่งหนึ่ง (release notes).
ข้อจำกัดที่ตรงไปตรงมา
- ในโหมดประเมิน ดัชนีจะเก็บเอกสารได้สูงสุด 100 ฉบับและการค้นหาจะคืนผลลัพธ์สูงสุด 10 รายการ; ทุกการตอบจะระบุเช่นนั้น. เรียก
get_license_statusก่อน. - เป็นการค้นหาแบบเต็มข้อความ ไม่ใช่การค้นหาเชิงความหมาย: มันจับคู่คำ, ไม่ใช่ความหมาย.
- ไม่มี OCR: PDF ที่สแกนโดยไม่มีชั้นข้อความจะถูกทำดัชนีโดยใช้เฉพาะคุณสมบัติของไฟล์.
- จัดจำหน่ายเป็นภาพ Docker เท่านั้น (เครื่องมือที่บรรจุมีขนาดเกินขีดจำกัดของ NuGet).
คำถามที่พบบ่อย
Claude สามารถค้นหาเอกสารในเครื่องของฉันโดยไม่ต้องอัปโหลดได้หรือไม่?
ใช่. เซิร์ฟเวอร์ทำงานในคอนเทนเนอร์บนเครื่องของคุณและอ่านโฟลเดอร์ที่คุณเมานท์; เฉพาะส่วนที่เอเจนต์อ้างอิงเท่านั้นที่ถึงโมเดล.
นี่คือ RAG หรือไม่?
มันเป็นการเสริมการดึงข้อมูล, แต่เป็นแบบเอเจนต์: โมเดลตัดสินใจว่าจะค้นหาอะไรและเมื่อใดที่พอเพียง, โดยใช้ดัชนีเต็มข้อความแทนการฝัง.
จะเกิดอะไรขึ้นเมื่อเอกสารของฉันเปลี่ยนแปลง?
ขอให้เอเจนต์รีเฟรช. update_index จะอ่านใหม่เฉพาะไฟล์ที่เปลี่ยน, เพิ่ม, หรือถูกลบ.
ไปลึกกว่า
- เอกสาร, วิธีทำแบบมาตรฐาน: How to search documents with AI agents using MCP
- ศูนย์รวมเอกสาร: GroupDocs.Search MCP Server
- สำหรับเอเจนต์การเขียนโค้ด: grep can’t read PDF: give your coding agent a document index
- เกี่ยวข้อง: Why an AI agent should not read 300 contracts to answer one question
- เกี่ยวข้อง: Grounded answers from your files: quote the passage, not the model’s memory
- เกี่ยวข้อง: Search your email archive with an AI agent: PST, MSG, EML and the attachments inside
- เกี่ยวข้อง: Project memory for AI agents: one index per project, kept current
- บนสถานที่และโมเดลความปลอดภัย: 3 architectures for AI document processing, and the one that keeps files inside your network
- การปล่อยเอนจิน: GroupDocs.Search for .NET 26.10 – October 2026 Release Highlights
- คำถาม: GroupDocs Search forum
- แหล่งที่มา: GroupDocs.Search.Mcp on GitHub