“کدام یک از قراردادهای ما جریمهٔ خاتمه دارد؟” شبیه کاری برای یک عامل هوش مصنوعی است، و همین‌طور است، اما نه با خواندن قراردادها. عاملی که برای پاسخ دادن همهٔ فایل‌ها را باز می‌کند، زمینهٔ خود را بر روی ۲۹۷ سند نامرتبط صرف می‌کند و هنوز باید اعتماد کند که بند را در سه سند دیگر دیده است. با اجرای GroupDocs.Search.Mcp به‌صورت محلی در Docker، Claude Desktop، Cursor یا Copilot پوشه را یک‌بار فهرست می‌کند، از فهرست می‌پرسد کدام قراردادها مطابقت دارند، و فقط بندها را می‌خواند:

کدام یک از قراردادهای من جریمهٔ خاتمه را ذکر می‌کند؟ بند را برای هر کدام نقل کنید.

نسخهٔ گام‌به‌گام با پیکربندی و عیب‌یابی در مستندات موجود است: چگونه می‌توان سؤالات را در یک پوشهٔ قراردادها با یک عامل هوش مصنوعی پرسید.

چه مشکلی پیش می‌آید وقتی عامل همه چیز را می‌خواند؟

سه مورد، به ترتیب افزایشی خطر. این کار کند و پرهزینه است: هر قرارداد از پنجرهٔ زمینه عبور می‌کند، هر بار که سؤال می‌کنید. فضای کافی ندارید: پس از چند ده سند طولانی، اسناد اولیه از پنجره خارج می‌شوند یا خلاصه می‌شوند، و در یک خلاصه است که بند از دست می‌رود. و به‌صورت ساکت شکست می‌خورد: «من دو قرارداد با جریمهٔ خاتمه پیدا کردم» همان‌طور به‌نظر می‌رسد که عامل همهٔ ۳۰۰ را بررسی کرده باشد یا فقط ۴۰ را مرور کرده باشد. هیچ‌چیزی در پاسخ نمی‌گوید کدام‌ها.

یک فهرست اولین مشکل را برطرف می‌کند و سومین را آشکار می‌سازد. سؤال «کدام فایل‌ها این کلمات را دارند» پاسخ دقیقی دارد، و ابزار جستجو آن را همراه با شمارشی که می‌توانید بررسی کنید، برمی‌گرداند.

دنبالهٔ صحیح چه شکلی است؟

یک‌بار فهرست کنید، جستجو کنید، سپس تطابق‌ها را بخوانید. این‌جا چیزی است که سرور در آزمایش ما برگرداند، در برابر پنج قرارداد مصنوعی: دو قرارداد با بند جریمه، و یک NDA که هر دو کلمه را ذکر می‌کند اما جریمه را رد می‌کند.

-> add_to_index {"documentsPath":"contracts","indexName":"contracts"}
<- Indexed 'contracts' into index 'contracts': 5 document(s) added,
   5 in the index.

-> search {"query":"termination penalty","indexName":"contracts"}
<- { "documentsFound": 0,
     "hint": "Unquoted words separated by spaces do not match. Search the
              phrase as \"termination penalty\", or combine the words with
              AND / OR, e.g. termination AND penalty." }

-> 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 ===
     …a termination penalty of three monthly fees applies, payable
     within 30…
   === contracts/globex-consulting-agreement.docx ===
     …Early termination penalty: the Client pays 50 percent of the fees…

سه نتیجه چه چیزی به ما می‌آموزند؟

پرس‌وجوی اول از دست رفت و سرور دلیل آن را گفت. در GroupDocs.Search، کلماتی که با فاصله جدا شده‌اند بدون علامت نقل‌قول به‌عنوان یک عبارت مطابقت ندارند. به‌جای برگرداندن صفر خالص، سرور یک hint الحاق می‌کند که اصلاح را توضیح می‌دهد، و عوامل در فراخوانی بعدی خود را اصلاح می‌کنند. این رایج‌ترین خطای اولین بار است و در خود پاسخ مدیریت می‌شود.

AND سه مورد را یافت، عبارت دو مورد را یافت. AND برای هر سند ارزیابی می‌شود. NDA شرکت Initech هر دو کلمه را در جملهٔ «هیچ هزینه‌ای و هیچ جریمه‌ای مرتبط با خاتمهٔ این NDA وجود ندارد» دارد. مدلی که فقط نتیجهٔ جستجو را می‌خواند آن را می‌شمارد؛ اما با خواندن متن، NDA را به‌طور جداگانه به‌عنوان قراردادی که صراحتاً جریمه را مستثنی می‌کند گزارش می‌دهد. این تمایز کل ارزش فراخوانی سوم است.

قالب‌ها مهم نبودند. تطابق‌ها از یک PDF و یک DOCX آمده‌اند، و یک قرارداد TXT در همان فهرست قرار داشت. موتور ۸۲ قالب را فهرست می‌کند، بنابراین پوشه‌ای که در طول ده سال با ابزارهای مختلف رشد کرده است، به یک سؤال پاسخ می‌دهد.

فراخوانی‌ها، به ترتیب

user              agent                         Search MCP server
 |  "Which contracts mention a termination penalty?"           |
 |---------------->|                                           |
 |                 |-- add_to_index (once) ------------------>|
 |                 |-- search {"query":"termination AND       |
 |                 |           penalty"} -------------------->|
 |                 |<- 3 files --------------------------------|
 |                 |-- get_text_fragments {"query":           |
 |                 |   "\"termination penalty\""} ----------->|
 |                 |<- the two clauses, with context ----------|
 |<- "Acme: 3 monthly fees (12.3). Globex: 50% of remaining    |
 |    fees. Initech NDA: explicitly no penalty."               |

پس از فهرست‌گذاری اولیه، هر سؤال جدید دو فراخوانی هزینه دارد، صرف‌نظر از تعداد قراردادها. «کدام قراردادها بند فورس ماژور دارند؟» برابر است با "force majeure". «کدام اجاره‌ها به‌صورت خودکار تمدید می‌شوند؟» برابر است با renewal OR renews، و متن می‌گوید «به‌صورت خودکار برای ۱۲ ماه تمدید می‌شود مگر اینکه اطلاع داده شود». بندی دربارهٔ دوره‌های اطلاع‌رسانی است terminat? AND notice که ? نمایانگر یک کاراکتر است و با terminate مطابقت دارد.

جایی که انسان در حلقه باقی می‌ماند

این یک بررسی قرارداد نیست و نباید تظاهر به آن کند. فهرست متن را پیدا و نقل می‌کند؛ عامل آنچه را که نقل کرده خلاصه می‌کند. دو عادت آن را صادق نگه می‌دارند. برای هر ادعا نقل قول را بخواهید، تا خلاصهٔ اشتباه در کنار جمله‌ای که اشتباه خوانده شده قابل مشاهده باشد. و همچنین نزدیک‌به‌دست‌ها را بپرسید، «قراردادهایی را فهرست کنید که کلمات را بدون بند ذکر می‌کنند»، زیرا در آنجا قضاوت خواننده بیشترین اهمیت را دارد.

محدودیت‌های صادقانه

  • در حالت ارزیابی، یک فهرست حداکثر ۱۰۰ سند را نگه می‌دارد و جستجو حداکثر ۱۰ نتیجه برمی‌گرداند، و هر پاسخ این را می‌گوید. قبل از اجرای واقعی get_license_status را فراخوانی کنید، زیرا پاسخ محدود شده کامل به‌نظر می‌رسد.
  • قراردادهای اسکن‌شده بدون لایهٔ متن فقط بر اساس ویژگی‌های فایل فهرست می‌شوند؛ OCR وجود ندارد.
  • جستجوی متن کامل کلمات را مطابقت می‌دهد: عامل باید از واژگان قرارداد استفاده کند، یا انواع مختلف را امتحان کند.
  • حذف یک فایل از یک پوشهٔ فهرست‌شده پشتیبانی نمی‌شود؛ پوشه را حذف کنید و آنچه می‌خواهید را دوباره اضافه کنید.

پرسش‌های متداول

آیا یک عامل هوش مصنوعی می‌تواند تمام قراردادهای من را بدون بارگذاری آن‌ها جستجو کند؟
بله. فهرست در یک کانتینر روی ماشین شما ساخته و جستجو می‌شود؛ فقط بندهایی که عامل نقل می‌کند به مدل می‌رسند.

چند قرارداد می‌تواند پردازش کند؟
با لایسنس، تا جایی که دیسک و حافظهٔ شما اجازه می‌دهد؛ فهرست یک‌بار ساخته می‌شود و به‌صورت افزایشی به‌روزرسانی می‌شود. حالت ارزیابی تا ۱۰۰ سند در هر فهرست متوقف می‌شود.

چرا جستجوی من برای دو کلمه هیچ نتیجه‌ای نداد؟
کلمات بدون علامت نقل‌قول به‌عنوان یک عبارت مطابقت ندارند. آن را نقل قول کنید، "termination penalty"، یا کلمات را با AND ترکیب کنید؛ hint سرور همین را می‌گوید.

عمیق‌تر بروید