می‌توانید به یک عامل هوش مصنوعی اجازه دهید صفحه‌ای از سند را ببیند به‌جای این‌که متن خام آن را بخواند. سرور GroupDocs.Viewer.Mcp هر صفحه‌ای از یک فایل PDF، Word، Excel یا PowerPoint را به‌صورت PNG رندر می‌کند و به عامل باز می‌گرداند، و این کار را به‌صورت محلی بر روی ماشین شما انجام می‌دهد:

چند صفحه دارد report.pdf؟ سپس آخرین صفحه را نشان بده.

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

چرا استخراج متن در اسناد واقعی شکست می‌خورد؟

یک استخراج‌کننده متن کاراکترها را به ترتیب خواندن برمی‌گرداند. این ابزار نمودار میله‌ای بین دو پاراگراف، مهر “APPROVED” در گوشه، چیدمان ستونی جدول قیمت‌ها، یا صفحه‌ای که اسکن شده و اصلاً کاراکتری ندارد را باز نمی‌گرداند. عاملی که بر پایه این خروجی کار می‌کند، با اطمینان درباره سندی که فقط نیمی از آن را دیده پاسخ می‌دهد و نیمه‌ی گمشده معمولاً همان بخشی است که شما درباره‌اش سؤال کرده‌اید.

راه‌حل، بهبود پرامپت نیست. بلکه ورودی متفاوتی است: صفحه به‌صورت تصویر، که به مدلی که ورودی تصویر می‌پذیرد داده می‌شود.

رویکرد اشتباه: عبور همه چیز از طریق استخراج‌کننده متن

پیش‌فرض رایج این است که سند را به متن تبدیل کنید، متن را در پنجرهٔ زمینه (context window) بچسبانید و سؤال بپرسید. این روش برای نثر کار می‌کند. اما به چهار شکل شکست می‌خورد که می‌توانید آن را روی هر سندی که دارید تأیید کنید:

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

یک مدل نمی‌تواند اطلاعاتی را که قبل از دیدن سند حذف شده‌اند، بازسازی کند.

رویکرد صحیح: رندر کردن یک صفحه PDF به تصویر برای LLM

render_page یک صفحه را به‌صورت PNG رندر می‌کند، تصویر را به‌صورت درون‌خطی به عامل باز می‌گرداند و یک نسخه را در پوشهٔ خروجی شما به‌نام <name>_page<N>.png ذخیره می‌کند. سرور بیش از ۱۷۰ فرمت را پشتیبانی می‌کند، از جمله PDF، DOCX، XLSX، PPTX، ODT، RTF، HTML، EML و MSG. سپس یک مدل دارای قابلیت بینایی صفحه را همان‌گونه که شما می‌بینید، مشاهده می‌کند.

عامل نباید شمارهٔ صفحات را حدس بزند، بنابراین render_page را با get_view_info ترکیب می‌کند، که نوع فایل، تعداد صفحات و اندازهٔ هر صفحه را بدون رندر کردن چیزی باز می‌گرداند. ابزار سوم، get_license_status، حالت فعال لایسنس را گزارش می‌دهد.

چگونه سرور را برای Claude، Cursor یا Copilot اجرا کنم؟

تصویر Docker به‌صورت خودکفا است:

docker run --rm -i -v $(pwd)/documents:/data \
  ghcr.io/groupdocs-viewer/viewer-net-mcp:latest

با نصب .NET 10 SDK، dnx GroupDocs.Viewer.Mcp --yes همان سرور را بدون Docker اجرا می‌کند. آن را در Claude Desktop، Claude Code، Cursor، VS Code با GitHub Copilot، Windsurf و سایر کلاینت‌ها ثبت کنید؛ صفحهٔ هاب پیکربندی دقیق هر کدام را فهرست می‌کند. کلاینت سرور را به‌عنوان یک فرآیند فرزند راه‌اندازی می‌کند و از طریق ورودی و خروجی استاندارد با آن ارتباط برقرار می‌کند، بنابراین هیچ پورت ورودی و هیچ نقطهٔ انتهایی برای ایمن‌سازی وجود ندارد.

جلسهٔ نمونه

این یک تصویرسازی است که بر پایه رفتار مستند شدهٔ دو ابزار ساخته شده، نه یک اسکرین‌شات ضبط‌شده.

You:   How many pages does report.pdf have? Then show me the last one.

Agent: [calls get_view_info on report.pdf]
       report.pdf is a PDF with 2 pages, both 612 x 792 points (US Letter).
       [calls render_page with page = 2]
       Page 2 of 'report.pdf' Saved to: <output folder>/report_page2.png
       Here is what page 2 shows: ...

تصویر به‌صورت درون‌خطی در کلاینت‌هایی که آن را نمایش می‌دهند ظاهر می‌شود. پاسخ متنی توصیف عامل از آنچه در صفحه می‌بیند است.

عامل چه تصمیمی می‌گیرد و موتور چه کاری انجام می‌دهد؟

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

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

  • حالت ارزیابی. بدون لایسنس، صفحات رندرشده دارای واترمارک ارزیابی هستند و یک فرآیند سرور حداکثر ۱۵ سند را باز می‌کند. واترمارک می‌تواند جزئیاتی که شما سؤال می‌کنید را پوشش دهد. از عامل بپرسید «آیا سرور Viewer لایسنس دارد؟» تا قبل از اعتماد به آنچه می‌خواند، get_license_status را فراخوانی کند.
  • فقط PNG. خروجی یک تصویر PNG است؛ گزینهٔ فرمت دیگری وجود ندارد.
  • بدون بررسی شماره صفحه. render_page شمارهٔ صفحه‌ای فراتر از آخرین صفحه را رد نمی‌کند. ابتدا تعداد را با get_view_info بررسی کنید.
  • مدل باید تصاویر را بپذیرد. با مدلی که فقط متن می‌پذیرد، عامل هنوز مسیر فایل ذخیره‌شده را دریافت می‌کند، اما نمی‌تواند به شما بگوید چه چیزی در صفحه است.
  • تصاویر بزرگ هستند. هر صفحه یک PNG درون‌خطی است که اغلب چند صد کیلوبایت حجم دارد. فقط صفحاتی را که کار نیاز دارد رندر کنید، نه کل فایل.
  • یک چیز از ماشین خارج می‌شود. تصویر رندرشده به عامل می‌رود و از آنجا به هر مدلی که استفاده می‌کند منتقل می‌شود. یک مدل میزبانی‌شده به‌صورت محلی همه چیز را در ماشین نگه می‌دارد.

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

آیا Claude می‌تواند صفحه PDF من و چیدمان آن را ببیند؟ بله، اگر صفحه PDF به‌صورت تصویر رندر شود و مدل Claude مورد استفاده ورودی تصویر را بپذیرد. render_page آن تصویر را به‌صورت محلی تولید می‌کند و به کلاینت باز می‌گرداند.

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

آیا این برای Excel و PowerPoint هم کار می‌کند، نه فقط PDF؟ بله. PowerPoint برای هر اسلاید یک تصویر رندر می‌کند و صفحات Excel به صفحات تقسیم می‌شوند، که تعداد آن‌ها از طریق get_view_info قابل مشاهده است.

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