Model Context Protocol (MCP)

فیلترسازی هوشمند ابزارها: حذف ابزارهای MCP استفاده‌نشده

پروتکل زمینه مدل (MCP) نحوه تعامل مدل‌های زبانی بزرگ (LLM) با ابزارها و منابع داده خارجی را متحول کرده است. با این حال، با افزایش تعداد ابزارهای موجود، پنجره زمینه مورد نیاز برای توصیف آن‌ها نیز افزایش می‌یابد. این «تورم زمینه» می‌تواند عملکرد مدل را کاهش دهد، تأخیر را افزایش دهد و هزینه‌های API را بالا ببرد. پیاده‌سازی فیلترسازی هوشمند ابزارها دیگر اختیاری نیست؛ بلکه یک روش مهندسی حیاتی برای پیاده‌سازی‌های مقیاس‌پذیر MCP است.

مسئله: تورم زمینه در MCP

هنگامی که یک سرور MCP تعداد زیادی ابزار را ثبت می‌کند، هر تعریف ابزار—شامل نام، توضیحات، اسکیمای ورودی و محدودیت‌های پارامتر—توکن‌هایی را در پرامپت سیستم مصرف می‌کند. برای مثال، یک سرور با ۵۰ ابزار ممکن است ۱۰,۰۰۰ تا ۱۵,۰۰۰ توکن به هر درخواست اضافه کند. این بار اضافی، پرسش واقعی کاربر و تاریخچه مکالمه را فشرده می‌کند و LLM را مجبور می‌کند با یک پنجره زمینه مؤثر کوچک‌تر کار کند. علاوه بر این، تعاریف بیش از حد ابزار می‌تواند مدل را گیج کند و منجر به خطاها در انتخاب ابزار یا توهم‌سازی شود.

استراتژی: حذف پویا قبل از استنتاج

راه‌حل در فیلترسازی پویای ابزارها قبل از ارسال آن‌ها به LLM نهفته است. به جای ارسال لیست کامل ابزارهای موجود، کلاینت MCP باید فقط ابزارهای مرتبط با زمینه فعلی را شامل شود. این کار می‌تواند از طریق چندین استراتژی محقق شود:

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

مثال پیاده‌سازی

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


import numpy as np
from sentence_transformers import SentenceTransformer

# Load a pre-trained model for embedding
model = SentenceTransformer('all-MiniLM-L6-v2')

def filter_tools_by_relevance(user_query, tools, top_k=10):
    """
    Filter tools based on semantic similarity to the user query.
    
    Args:
        user_query (str): The user's input.
        tools (list): List of tool objects with 'name', 'description', and 'schema'.
        top_k (int): Number of top tools to return.
    
    Returns:
        list: Top k most relevant tools.
    """
    # Prepare texts for embedding
    tool_texts = [f"{tool['name']}: {tool['description']}" for tool in tools]
    
    # Generate embeddings
    query_embedding = model.encode(user_query)
    tool_embeddings = model.encode(tool_texts)
    
    # Calculate cosine similarity
    query_embedding = query_embedding / np.linalg.norm(query_embedding)
    tool_embeddings = tool_embeddings / np.linalg.norm(tool_embeddings, axis=1, keepdims=True)
    
    similarities = np.dot(tool_embeddings, query_embedding.T)
    
    # Get indices of top k similarities
    top_indices = np.argsort(similarities)[::-1][:top_k]
    
    return [tools[i] for i in top_indices]

# Example usage
all_tools = [
    {"name": "search_web", "description": "Search the web for current information.", "schema": {...}},
    {"name": "calculate", "description": "Perform mathematical calculations.", "schema": {...}},
    {"name": "send_email", "description": "Send an email to a recipient.", "schema": {...}},
    # ... hundreds of other tools
]

user_query = "What is the stock price of Apple today?"
relevant_tools = filter_tools_by_relevance(user_query, all_tools, top_k=5)

print(f"Selected {len(relevant_tools)} tools for inference:")
for tool in relevant_tools:
    print(f"- {tool['name']}")

در این مثال، ابزار `search_web` به دلیل شباهت معنایی بالا با پرسش مربوط به قیمت سهام، احتمالاً انتخاب می‌شود، در حالی که `calculate` یا `send_email` حذف می‌شوند. این کار اندازه زمینه را به‌طور قابل توجهی کاهش می‌دهد و در عین حال ارتباط بالا را حفظ می‌کند.

بهترین روش‌ها و ملاحظات

  • کش کردن (Caching): جاسازی‌های توضیحات ابزارها را در کش ذخیره کنید تا از بازسازی آن‌ها در هر درخواست جلوگیری شود.
  • مکانیزم جایگزین (Fallback): اگر هیچ ابزاری آستانه شباهت را برآورده نکند، در نظر بگیرید که مجموعه‌ای پیش‌فرض از ابزارهای عمومی یا پیام «ابزاری در دسترس نیست» را برگردانید.
  • پایش (Monitoring): ردیابی کنید که کدام ابزارها انتخاب شده‌اند و کدام‌یک توسط LLM استفاده شده‌اند تا استراتژی فیلترسازی خود را با گذشت زمان بهبود بخشید.
  • موازنه تأخیر (Latency Trade-off): اطمینان حاصل کنید که خود فرآیند فیلترسازی تأخیر قابل توجهی ایجاد نمی‌کند. اگر تعداد ابزارها بسیار زیاد است، از مدل‌های جاسازی کارآمد و پایگاه‌های داده برداری استفاده کنید.

نتیجه‌گیری

فیلترسازی هوشمند ابزارها یک بهینه‌سازی حیاتی برای هر سیستم MCP سطح تولید است. با حذف پویای تعاریف ابزارهای استفاده‌نشده قبل از استنتاج LLM، می‌توانید تورم زمینه را کاهش دهید، دقت مدل را بهبود بخشید و هزینه‌های عملیاتی را کاهش دهید. با بلوغ اکوسیستم MCP و رشد ثبت‌نام‌های ابزار، سرمایه‌گذاری در استراتژی‌های فیلترسازی کارآمد کلید ارائه اپلیکیشن‌های هوش مصنوعی سریع، قابل اعتماد و مقرون‌به‌صرفه خواهد بود.

Share: