คำตอบเกี่ยวกับเอกสารของคุณจะดีเท่ากับข้อความที่ใช้สร้างมัน และเมื่อคุณวางไฟล์ทั้งหมดลงในแชท คุณไม่สามารถบอกได้ว่าโมเดลใช้ส่วนใดจริง ๆ GroupDocs.Search.Mcp ที่ทำงานใน Docker ให้ Claude Desktop, Cursor หรือ Copilot เครื่องมือใหม่: get_text_fragments จะคืนเฉพาะส่วนที่ตรงกับคำค้น พร้อมคำบริบทเล็กน้อยและไฟล์ที่มาจากนั้น ทำให้เอเจนต์ตอบโดยอ้างอิงคำพูด:
สัญญาของฉันบอกอะไรเกี่ยวกับค่าปรับบ้าง? อ้างอิงส่วนที่เกี่ยวข้อง พร้อมบริบทเพียงพอเพื่อให้เข้าใจแต่ละส่วน
เวอร์ชันแบบขั้นตอนพร้อมการกำหนดค่าและการแก้ไขปัญหาอยู่ในเอกสาร: How to get the matching passages instead of reading whole files.
ทำไมคำตอบจึงเบี่ยงเบนจากเอกสาร?
เพราะหน้าต่างบริบทเป็นงบประมาณ และเอกสารทั้งหมดใช้มันอย่างไม่คุ้มค่า คำถามเกี่ยวกับค่าปรับอาจต้องการเพียงสามประโยคจากห้าสิบหน้า วางห้าสิบหน้าแล้วโมเดลต้องค้นหาสามประโยคเองท่ามกลางข้อมูลอื่น ๆ แล้วเก็บไว้ขณะเขียน บริบทยาวจะถูกสรุป ส่วนข้อมูลแรกจะสูญเสียความสำคัญ และคำตอบจะเริ่มอิงจากความเข้าใจทั่วไปของโมเดลว่าสัญญามักบอกอะไร มากกว่าที่สัญญาของคุณบอก อุตสาหกรรมเรียกกระบวนการจัดการนี้ว่า context engineering; รูปแบบที่ง่ายที่สุดคือไม่โหลดข้อความที่คุณไม่ต้องการ
ส่วนหนึ่งของข้อความ (fragment) มีลักษณะอย่างไร?
ดัชนีได้เก็บข้อความของทุกเอกสารไว้แล้ว ดังนั้นเซิร์ฟเวอร์จึงสามารถตัดส่วนที่ตรงกับการค้นหาออกได้ นี่คือตัวอย่างการตอบจากการทดสอบของเราต่อสัญญาเทียม 5 ฉบับ ค่าเริ่มต้นที่แสดงคำแปดคำด้านหน้าและด้านหลังให้ผลลัพธ์เป็นวลี:
-> 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…
เพิ่มเป็นยี่สิบคำด้านหน้าและด้านหลังจะให้ทั้งข้อสัญญา:
-> 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 และ termsAfter เป็นตัวปรับ: เล็กสำหรับ “ไฟล์ใดและตำแหน่งประมาณไหน” ใหญ่สำหรับ “อ้างอิงข้อสัญญาให้ฉัน” maxFragmentsPerDocument และ maxDocuments จำกัดขนาดของคำตอบ เพื่อไม่ให้คำที่ปรากฏสองร้อยครั้งทำให้บริบทอัดแน่น
งบประมาณ, เปรียบเทียบข้างกัน
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
ความแตกต่างจะเพิ่มขึ้นตามขนาดของคอร์ปัส สำหรับไฟล์สั้นสามไฟล์อาจไม่สำคัญ แต่สำหรับโฟลเดอร์ที่มีสัญญายาว รายงานและอีเมล ส่วนที่ดึงมาสำหรับคำถามหนึ่งอาจมีหลายร้อยคำ เทียบกับข้อความเต็มของทุกเอกสารที่เป็นผู้สมัคร
เมื่อคำต่างกัน
การค้นหาแบบเต็มข้อความจะจับคู่คำ ซึ่งเป็นคุณสมบัติสำหรับการอ้างอิง (ทุกผลลัพธ์อธิบายได้) แต่ก็เป็นข้อจำกัดสำหรับการเรียกคืน (คำพ้องความหมายอาจพลาด) งานของเอเจนต์คือการลองรูปแบบต่าง ๆ และมันสามารถดูได้ว่ารูปแบบแต่ละแบบตรงกับอะไรบ้าง:
-> 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"]
การจับคู่แบบ Fuzzy ช่วยแก้ไขการสะกดผิดและยังดึงคำ rent เข้ามาด้วย เนื่องจากการตอบแสดงรายการคำที่ตรงกัน เอเจนต์หรือคุณจึงสามารถเห็นการจับคู่เกินขอบเขตแทนที่จะเชื่อโดยไม่ตรวจสอบ ความโปร่งใสนี้คือสิ่งที่ “grounded” ควรหมายถึง: ไม่ใช่แค่ “คำตอบอ้างอิงแหล่งที่มา” แต่ “คุณสามารถเห็นว่าแหล่งที่มาถูกค้นพบอย่างไร”
ตัวอย่างคำตอบที่อ้างอิงได้
ขอให้เอเจนต์อ้างอิงข้อความ แล้วคำตอบจะปรากฏในรูปแบบที่คุณตรวจสอบได้ทันที:
สัญญาสองฉบับมีค่าปรับการยกเลิก Acme MSA, ข้อ 12.3: “a termination penalty of three monthly fees applies, payable within 30 days of the termination date.” ข้อตกลงให้คำปรึกษาของ Globex, ส่วน 9: “the Client pays 50 percent of the fees remaining for the current phase.” NDA ของ Initech กล่าวถึงการยกเลิกและค่าปรับแต่ระบุว่าไม่มีค่าปรับ
หากสรุปสับสนกับการอ้างอิง การสับสนจะอยู่ถัดจากข้อความอ้างอิงโดยตรง
ข้อจำกัดที่เป็นจริง
- ในโหมดประเมิน ดัชนีจะเก็บเอกสารได้สูงสุด 100 ฉบับและการค้นหาจะคืนผลลัพธ์ได้สูงสุด 10 รายการ โหมดประเมินยังเพิ่มบรรทัด “Evaluation only…” ลงในข้อความที่ทำดัชนีของบางรูปแบบ ซึ่งอาจปรากฏในส่วนที่ดึงมา; ให้ทำการออกใบอนุญาตเซิร์ฟเวอร์และสร้างดัชนีใหม่เพื่อเอาบรรทัดนี้ออก เรียก
get_license_statusก่อน - บริบทของส่วนที่ดึงมานับเป็นจำนวนคำ ไม่ใช่ประโยค ดังนั้นข้อความอาจเริ่มจากกลางประโยค; เพิ่มค่า
termsBeforeเมื่อจำเป็น - ไม่มี OCR: การสแกนที่ไม่มีเลเยอร์ข้อความจะไม่มีส่วนที่สามารถดึงคืนได้
- ใช้ Docker เท่านั้น; บน Linux ให้เพิ่ม
--user "$(id -u):$(id -g)"
คำถามที่พบบ่อย
ฉันจะทำให้ Claude อ้างอิงแหล่งที่มาจากเอกสารของฉันได้อย่างไร?
ให้เครื่องมือที่คืนข้อความแหล่งที่มาพร้อมชื่อไฟล์ get_text_fragments ทำเช่นนั้นได้อย่างแม่นยำ และคำสั่งเช่น “quote the passage and its file” จะทำให้มันกลายเป็นนิสัย
นี่จะช่วยลดการใช้โทเคนหรือไม่?
มันช่วยหลีกเลี่ยงการโหลดเอกสารทั้งหมดเพื่อให้คำตอบกับคำถาม: เอเจนต์จะอ่านเฉพาะส่วนที่ตรงกับคำค้นเท่านั้น ปริมาณที่ประหยัดได้ขึ้นอยู่กับขนาดไฟล์ของคุณ
เอเจนต์ยังสามารถอ่านไฟล์ทั้งหมดได้เมื่อจำเป็นหรือไม่?
ได้, ด้วยเครื่องมือไฟล์ของมันเอง ส่วนที่ดึงมานั้นใช้เพื่อค้นหาและอ้างอิง; อ่านไฟล์ทั้งหมดเมื่อส่วนที่ดึงมาไม่เพียงพอ
ไปให้ลึกขึ้น
- เอกสาร, วิธีทำแบบมาตรฐาน: How to get the matching passages instead of reading whole files
- ศูนย์รวมเอกสาร: GroupDocs.Search MCP Server
- เริ่มต้นที่นี่: Do you need a vector database to ask questions about a folder of documents?
- เกี่ยวข้อง: Why an AI agent should not read 300 contracts to answer one question
- เกี่ยวข้อง: grep can’t read PDF: give your coding agent a document index
- เกี่ยวข้อง: 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 forum
- แหล่งที่มา: GroupDocs.Search.Mcp on GitHub