عنوان:

‫ چرا MCP؟ (بخش سوم- LLM ها و MCP)


نویسنده: سپهر شمسائی
تاریخ: ۱۴۰۴/۰۲/۲۶ ۰۷:۴۵
آدرس: www.dntips.ir
در بخش پیشین، مروری اجمالی بر پروتکل Language Server Protocol (LSP) صورت گرفت تا خواننده با ساختار و هدف اصلی این پروتکل آشنا شود. با توجه به اینکه پروتکل (Model Context Protocol) MCP بر مبنای مفاهیم و زیرساخت‌های LSP طراحی و توسعه داده شده است، داشتن درک اولیه و شناخت کلی از اصول، ساختار ارتباطی و اهداف طراحی LSP، برای فهم بهتر عملکرد و معماری MCP ضروری و اجتناب‌ناپذیر به نظر می‌رسد. به‌بیان دیگر، آشنایی با LSP زمینه‌ساز درک دقیق‌تری از منطق طراحی و نحوه تعامل اجزای مختلف در پروتکل MCP خواهد بود. بعلاوه دلیلی که MCP ارائه شده است شباهت بسیاری به علت ایجاد LSP دارد.
هنوز چند مقدمه دیگر تا پاسخ به سوال اصلی که «چرا MCP؟»باقی مانده.

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

Context در مدل های زبانی
یکی از معانی مهم واژهٔ context در فارسی، «زمینه» یا «بافت» است. این مفهوم نقش کلیدی در درک معنا، پیوستگی گفتگو و تصمیم‌گیری دارد.
فرض کنید دو همکلاسی در حال گفتگو هستند:
سارا: سلام، برنامه مهاجرتت چطور پیش می‌ره؟
ژینا: خوبه، خدا رو شکر. دارم می‌رم کانادا.
سارا: اتفاقاً من هم قصد دارم این زمستون برم همون‌جا.

حال اگر این دو نفر فردای آن روز دوباره همدیگر را ببینند و ژینا بپرسد:
راستی، زمستون اون‌جا هوا خیلی سرد نیست؟

سارا، بدون نیاز به توضیح بیشتر، فوراً متوجه می‌شود که منظور از «اون‌جا» کشور کاناداست، چون زمینهٔ گفتگو در ذهنش حضور دارد.
اما اگر همین مکالمات، با همان فاصله زمانی، میان یک انسان و یک مدل زبانی (مثل GPT) رد و بدل شود، مدل بدون دسترسی به زمینهٔ قبلی مکالمه، متوجه نخواهد شد که منظور از «اون‌جا» کجاست. در نتیجه ممکن است پاسخ نامربوطی ارائه دهد یا کلاً منظور را درک نکند.
این تفاوت نشان می‌دهد که context یا زمینه، برای درک صحیح و پیوستهٔ گفتگو ضروری است، چیزی که در مدل‌های زبانی تنها زمانی قابل حفظ است که مکانیسمی مانند حافظه یا context manager وجود داشته باشد.

محدودیت های مدل های زبانی
مدل‌های زبانی با وجود توانایی‌های قابل‌توجه، محدودیت‌هایی دارند. به‌اختصار برخی از مهم‌ترین آن‌ها عبارت‌اند از:
  • عدم درک واقعی: مدل‌ها معنای واقعی مفاهیم را درک نمی‌کنند؛ آن‌ها صرفاً بر اساس الگوهای آماری واژه‌ها را کنار هم می‌چینند.
  • حافظه کوتاه‌مدت: مدل‌ها اطلاعات session های قبلی (مکالمات قبلی) را به خاطر نمی‌سپارند.
  • اطلاعات تاریخ‌گذشته: مدل‌ها فقط بر پایه داده‌هایی آموزش دیده‌اند که تا یک زمان مشخص در گذشته در دسترس بوده‌اند و به‌صورت پیش‌فرض به اینترنت یا داده‌های جدید دسترسی ندارند.
  • خطاهای منطقی یا ریاضی: در حل مسائل دقیق، به‌ویژه ریاضی یا برنامه‌نویسی، ممکن است خطا داشته باشند چون این کارها را با «پیش‌بینی» انجام می‌دهند، نه محاسبه واقعی.
  • آسیب‌پذیری در برابر ورودی‌های گمراه‌کننده: مدل ممکن است به ورودی‌های نادرست، مبهم یا مغرضانه پاسخ‌هایی اشتباه یا غیرمنطقی بدهد.
  • هذیان گویی: مدل ممکن است در مواردی که اطلاعات کافی ندارد شروع به هذیان گویی یا hallucination کند (علت دقیق hallucination همچنان مبهم باقی مانده است)

گفته شد که مدل‌های زبانی (مثل GPT) در اصل برای تولید متن طبیعی آموزش دیده‌اند، نه برای انجام عملیات ریاضی دقیق. برای مثال:
اگر بپرسیم: «جذر 784 چیست؟»
مدل ممکن است جواب درست بدهد (28)، یا اشتباه کند، چون این پاسخ بر اساس الگوهای آماری تولید می‌شود، نه محاسبات واقعی.

به عنوان یک مثال دیگر چنانچه یک کاربر از مدل زبانی بپرسد:
«امروز هوا در استان گیلان چگونه است؟»
باتوجه به اینکه مدل زبانی به API های مربوط به دریافت آب و هوا دسترسی ندارد ممکن است جواب ناصحیح ارائه کند. این موضوع باعث می‌‌شود طراحان مدل های زبانی علاوه بر چالش حافظه با چالش ارتباط با ابزار‌های بیرون از مدل نیز روبرو شوند.

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

مدیریت دستی حافظه در اپلیکیشن (Memory Injection)
پیش از MCP، توسعه‌دهندگان معمولاً به صورت دستی، محتوای تعامل‌های قبلی را در ورودی مدل تزریق می‌کردند. به این صورت که اطلاعات مربوط به جلسات یا مکالمات گذشته را مستقیماً به prompt اضافه می‌کردند تا مدل بتواند آن‌ها را در نظر بگیرد.
برای مثال، اگر کاربر بپرسد «برنامه من برای اپ چیست؟»، سیستم ممکن بود در پس‌زمینه این اطلاعات را به مدل بدهد: «در جلسه قبلی، کاربر گفت قصد دارد یک اپلیکیشن حسابداری بسازد. حالا پرسیده: برنامه من برای اپ چیست؟»
این روش شکننده بود و محدودیت توکن (حجم ورودی) داشت.

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

مدل‌های تقویت‌شده با حافظه خارجی (Retrieval-Augmented Generation - RAG)
در این روش، اطلاعات مورد نیاز (مثل اسناد، گفتگوهای قبلی یا داده‌های پایگاه‌داده) در یک سامانه جست‌وجوگر ذخیره می‌شد. هنگام ورود یک پرسش، سیستم به‌صورت خودکار اطلاعات مرتبط را بازیابی و همراه با پرسش به مدل ارسال می‌کرد.
این اطلاعات از دید مدل صرفاً متن بودند و مدل نمی‌دانست این محتوا از کجا آمده یا چه ساختاری دارد.

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

تولد MCP:
پروتکل MCP (Model Context Protocol) نقش و هدفی مشابه استانداردهایی مانند USB در اتصال سخت‌افزارها، ODBC در ارتباط بین پایگاه‌های داده و زبان‌های برنامه‌نویسی، و REST در تبادل اطلاعات بین سیستم‌ها دارد. شرکت Anthropic، یکی از پیشگامان حوزه هوش مصنوعی، با الهام از تجربه موفق Microsoft در طراحی پروتکل LSP ، MCP را برای حل دو مشکل اساسی مدل‌های زبانی توسعه داده:
  • نبود حافظه دائمی
  • نداشتن روش استاندارد برای ارتباط با ابزارهای خارجی

اجازه دهید MCP را ضمن مقایسه با LSP بهتر بررسی کنیم.
پروتکل‌های LSP (Language Server Protocol) و MCP (Model Context Protocol) هر دو با هدف ایجاد یک رابط استاندارد بین یک «هسته هوشمند» و ابزارهای جانبی طراحی شده‌اند. اما این دو در بستر، کاربرد و اهداف خود تفاوت‌های مهمی دارند.

LSP بصورت منبع باز توسط شرکت مایکروسافت طراحی شد تا مشکل وابستگی ویرایشگرهای کد به زبان‌های برنامه‌نویسی مختلف را حل کند. پیش از آن، هر ویرایشگر برای پشتیبانی از هر زبان، نیاز به توسعه اختصاصی داشت. LSP این فرایند را ساده کرد. با تعریف یک پروتکل مشترک، ویرایشگر می‌توانست با یک «Language Server» ارتباط برقرار کند که وظیفه ارائه قابلیت‌هایی مانند تکمیل خودکار، هایلایت خطاها، و پیشنهادات کد را بر عهده داشت. به این ترتیب، توسعه پشتیبانی از زبان‌های جدید، دیگر نیازی به تغییر در ویرایشگر نداشت.
در مقابل، MCP توسط شرکت Anthropic بصورت منبع باز طراحی شده تا مشکل دیگری را حل کند. مدل‌های زبانی (مانند Claude، GPT و دیگر مدل‌های مشابه) ذاتاً به حافظه پایدار دسترسی ندارند و نمی‌توانند به‌صورت ساخت‌یافته با ابزارهای بیرونی (مانند ماشین‌حساب، تقویم، مرورگر، پایگاه داده یا API های ثالث) ارتباط برقرار کنند. MCP با الهام از موفقیت LSP، یک لایه واسط میان مدل زبانی و این منابع بیرونی فراهم می‌کند. این پروتکل اجازه می‌دهد که مدل، با زبان ساده و استاندارد، درخواست‌هایی مثل «اطلاعات کاربر را از حافظه بخوان»، یا «این تابع را اجرا کن» صادر کند، و پاسخ‌ها را دریافت نماید.
در LSP، تمرکز بر روی بهبود تجربه کدنویسی در ویرایشگرها بود؛ در حالی که MCP بر حل دو مشکل اصلی مدل‌های زبانی متمرکز است: نبود حافظه داخلی و نبود استاندارد ارتباطی با ابزارها.
در LSP، ویرایشگرها با استفاده از یک رابط مشترک به «هوش زبان‌شناس» متصل می‌شوند. در MCP مدل زبانی با استفاده از یک رابط مشترک به دنیای واقعی (ابزارها، داده‌ها، حافظه‌ها و کاربران) وصل می‌شود.
از نظر فنی، هر دو پروتکل مبتنی بر پیام‌هایی با ساختار مشخص (اغلب JSON) هستند، ولی محتوای پیام‌ها و نوع تعاملات در MCP بسیار گسترده‌تر است، چرا که هدف آن مدیریت زمینه گفتگو، اجرای توابع، نگهداری اطلاعات بلندمدت، و شخصی‌سازی مدل است.
در نهایت، همان‌طور که LSP باعث شد زبان‌های برنامه‌نویسی مستقل از محیط توسعه قابل استفاده باشند، MCP نیز قرار است مدل‌های زبانی را از وابستگی به پیاده‌سازی‌های خاص و حافظه‌های کوتاه‌مدت آزاد کند و امکان ساخت سیستم‌های هوشمند و پایدارتر را فراهم آورد.
تصویر زیر طرز کار شماتیک MCP را نمایش می‌دهد.

درخواست و پاسخ در MCP:
در ادامه دو مثال از نحوه کار پروتکل MCP (Model Context Protocol) ارائه می‌شود؛ یکی در تعامل با ابزار بیرونی، و دیگری در تعامل با حافظه کاربر. این دو مثال نشان می‌دهند که مدل زبانی چگونه بدون داشتن حافظه داخلی یا دسترسی مستقیم به محیط، می‌تواند اطلاعات لازم را به‌صورت استاندارد درخواست و دریافت کند.

مثال اول: دریافت تاریخ امروز از ابزار بیرونی
فرض کنیم کاربر می‌پرسد: «امروز چندمه؟»
مدل زبانی برای پاسخ به این سؤال نیاز دارد که تاریخ جاری را از یک ابزار بیرونی دریافت کند.

درخواست مدل:
{
  "tool_use": {
    "tool_name": "get_current_date",
    "parameters": {}
  }
}
مدل درخواستی به پروتکل MCP می‌فرستد تا ابزار get_current_date اجرا شود.

پاسخ ابزار:
{
  "tool_result": {
    "tool_name": "get_current_date",
    "output": {
      "date": "25 اردیبهشت سال 1404"
    }
  }
}
پس از دریافت پاسخ، مدل می‌تواند به کاربر چنین پاسخ دهد:
«امروز 25 اردیبهشت سال 1404 است.»

مثال دوم: خواندن داده‌ای از حافظه کاربر
فرض کنیم کاربر می‌گوید: «یادم نیست گفتم کجا می‌خوام سفر برم. می‌تونی یادآوری کنی؟»
مدل می‌خواهد از حافظه بررسی کند که مقصد سفر کاربر چه بوده است.

درخواست مدل:
{
  "memory_read": {
    "key": "travel_destination"
  }
}
مدل از MCP می‌خواهد داده‌ای را که با کلید travel_destination ذخیره شده، بازیابی کند.

پاسخ :
{
  "memory_result": {
    "key": "travel_destination",
    "value": "کانادا"
  }
}

با این اطلاعات، مدل می‌تواند پاسخ دهد: «بله، قبلاً گفتی قصد داری به کانادا سفر کنی. هنوز برنامه‌ات همونه؟»
این دو مثال نشان می‌دهند که MCP به مدل زبانی اجازه می‌دهد مانند یک عامل هوشمند، به ابزارها و حافظه‌ها دسترسی داشته باشد، بی‌آنکه لازم باشد منطق این ابزارها را بداند یا خودش اطلاعات را حفظ کند. این ساختار باعث توسعه‌پذیری و ثبات در رفتار مدل‌ها می‌شود.

تیجه‌گیری
با رشد مدل‌های زبانی و گسترش کاربرد آن‌ها در تعاملات پیچیده انسانی و سیستمی، محدودیت‌هایی مانند نداشتن حافظه پایدار و ناتوانی در برقراری ارتباط ساخت‌یافته با ابزارهای بیرونی، مانعی جدی برای استفاده‌ی مؤثر و پایدار از این مدل‌ها محسوب می‌شد. پروتکل MCP پاسخی استاندارد، ماژولار و توسعه‌پذیر به این چالش‌ها ارائه می‌دهد. با جداسازی مسئولیت‌ها و تعریف یک رابط مشخص بین مدل زبانی، حافظه، ابزارها و کاربران، MCP زمینه‌ساز ساخت سامانه‌های هوشمند‌تر، قابل‌کنترل‌تر و واقعاً کاربردی‌تر در دنیای واقعی شده است. همان‌گونه که ابزارها یا پروتکل‌هایی مانند LSP، USB و REST تحولی در دنیای نرم‌افزار ایجاد کردند، MCP نیز می‌تواند به سنگ‌بنای معماری آینده‌ی سیستم‌های هوشمند مبتنی بر مدل‌های زبانی تبدیل شود.
موفقیت یا شکست احتمالی MCP، مسیر تکامل آن و ادغام آن با سایر پروتکل های AI را زمان مشخص خواهد کرد.