إجابة حول مستنداتك لا تكون جيدة إلا بقدر النص الذي بُنيت عليه، وعندما تلصق ملفات كاملة في محادثة لا يمكنك معرفة أي جزء استخدمه النموذج فعليًا. يقدم GroupDocs.Search.Mcp، الذي يعمل محليًا في Docker، أداة مختلفة لكل من Claude Desktop وCursor أو Copilot: get_text_fragments تُعيد فقط المقاطع التي تطابق الاستعلام، مع بضع كلمات من السياق والملف الذي جاءت منه، وبالتالي يجيب الوكيل بالاستشهادات:
ما الذي تقوله عقودي حول العقوبات؟ استشهد بالمقاطع، مع ما يكفي من السياق لفهم كل منها.
الإصدار خطوة بخطوة مع الإعدادات واستكشاف الأخطاء موجود في الوثائق: How to get the matching passages instead of reading whole files.
لماذا تنحرف الإجابات عن المستندات؟
لأن نافذة السياق هي ميزانية، وتستنزف المستندات الكاملة هذه الميزانية بشكل سيء. سؤال حول العقوبات قد يحتاج ربما إلى ثلاث جمل من خمسين صفحة. عندما تلصق الخمسين صفحةً يجب على النموذج أن يجد الجمل الثلاث بنفسه بين كل ما هو آخر، ثم يحتفظ بها أثناء الكتابة. السياقات الطويلة تُلخّص، وتفقد المادة المبكرة وزنها، وتبدأ الإجابة في الاعتماد على الفهم العام للنموذج لما تقوله العقود عادةً بدلاً من ما تقوله عقودك. تُسمى هذه العملية في الصناعة هندسة السياق؛ أبسط أشكالها هو عدم تحميل النص الذي لا تحتاجه.
كيف يبدو المقتطف؟
الفهرس يحتفظ بالفعل بنص كل مستند، لذا يمكن للخادم استخراج المقطع حول كل تطابق. هذه ردود فعل حقيقية من اختبارنا، ضد خمسة عقود اصطناعية. الإعدادات الافتراضية، ثماني كلمات على كل جانب، تعطي عبارة:
-> 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"]
المطابقة الضبابية أنقذت خطأ إملائي وأدخلت أيضًا rent. لأن الاستجابة تسرد المصطلحات التي طابقت، يمكن للوكيل أو لك أن ترى التطابق الزائد بدلاً من الوثوق به. هذه الشفافية هي ما يجب أن يعنيه “مُثبت”: ليس فقط “الإجابة تستشهد بمصدر”، بل “يمكنك رؤية كيف تم العثور على المصدر”.
كيف تبدو الإجابة المثبتة
اطلب الاستشهادات، وستصل الإجابة بصيغة يمكنك التحقق منها بنظرة واحدة:
عقدان يحتويان على عقوبة إنهاء. 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.” اتفاقية عدم الإفشاء من 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