Model Context Protocol (MCP)

Akıllı Araç Filtreleme: Kullanılmayan MCP Araçlarını Budama

Model Bağlam Protokolü (MCP), Büyük Dil Modelleri'nin (LLM) dış araçlar ve veri kaynaklarıyla etkileşimini devrim niteliğinde değiştirdi. Ancak kullanılabilir araç sayısı arttıkça, bunları açıklamak için gereken bağlam penceresi de büyüyor. Bu "bağlam şişkinliği", model performansını düşürebilir, gecikmeyi artırabilir ve API maliyetlerini yükseltebilir. Akıllı araç filtreleme uygulamak artık bir tercih değil; ölçeklenebilir MCP uygulamaları için kritik bir mühendislik pratiğidir.

Sorun: MCP'de Bağlam Şişkinliği

Bir MCP sunucusu büyük miktarda araç kaydettiğinde, her araç tanımı—including adı, açıklaması, giriş şeması ve parametre kısıtlamaları—sistem isteminde token tüketir. Örneğin, 50 araca sahip bir sunucu, her isteğe 10.000 ila 15.000 token ekleyebilir. Bu yük, gerçek kullanıcı sorgusunu ve konuşma geçmişini sıkıştırarak LLM'in daha küçük bir etkin bağlam penceresiyle çalışmasına neden olur. Ayrıca, aşırı araç tanımları modeli karıştırarak araç seçim hatalarına veya halüsinasyonlara yol açabilir.

Strateji: Çıkarım Öncesi Dinamik Budama

Çözüm, araçların LLM'e gönderilmeden önce dinamik olarak filtrelenmesinde yatar. Kullanılabilir araçların tam listesini göndermek yerine, MCP istemcisi yalnızca mevcut bağlama uygun olanları dahil etmelidir. Bu, çeşitli stratejilerle sağlanabilir:

  • Niyet Tabanlı Filtreleme: Kullanıcının sorgusuyla ilgili araç kategorilerini tahmin etmek için hafif bir sınıflandırıcı veya anahtar kelime eşleştirme kullanın.
  • Rol Tabanlı Erişim: Kullanıcının rolüne veya izinlerine dayalı olarak araçları sınırlayın ve yalnızca yetkili araçların açığa çıkarılmasını sağlayın.
  • Yakınlık ve Sıklık: Son zamanlarda veya sık kullanılan araçlara öncelik verin; bunların daha ilgili olma olasılığı yüksektir.
  • Gömme Benzerliği: Kullanıcının sorgusunu ve araç açıklamalarını gömün (embed), ardından en yüksek anlamsal benzerliğe sahip araçları seçin.

Uygulama Örneği

Aşağıda, cümle gömmeleri (sentence embeddings) kullanarak anlamsal benzerliğe dayalı araç filtrelemeyi gösteren basitleştirilmiş bir Python örneği yer almaktadır. Bu yaklaşım, büyük araç setleri için sağlam ve ölçeklenebilir bir yöntemdir.


import numpy as np
from sentence_transformers import SentenceTransformer

# Gömme için önceden eğitilmiş bir model yükleyin
model = SentenceTransformer('all-MiniLM-L6-v2')

def filter_tools_by_relevance(user_query, tools, top_k=10):
    """
    Kullanıcı sorgusuna göre anlamsal benzerliğe dayalı araç filtreleme.
    
    Args:
        user_query (str): Kullanıcının girdisi.
        tools (list): 'name', 'description' ve 'schema' içeren araç nesneleri listesi.
        top_k (int): Döndürülecek en üst araç sayısı.
    
    Returns:
        list: En ilgili k araç.
    """
    # Gömme için metinleri hazırla
    tool_texts = [f"{tool['name']}: {tool['description']}" for tool in tools]
    
    # Gömmeleri üret
    query_embedding = model.encode(user_query)
    tool_embeddings = model.encode(tool_texts)
    
    # Kosinüs benzerliğini hesapla
    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)
    
    # En yüksek k benzerliğin indekslerini al
    top_indices = np.argsort(similarities)[::-1][:top_k]
    
    return [tools[i] for i in top_indices]

# Kullanım örneği
all_tools = [
    {"name": "search_web", "description": "Güncel bilgiler için web'de arama yapın.", "schema": {...}},
    {"name": "calculate", "description": "Matematiksel hesaplamalar yapın.", "schema": {...}},
    {"name": "send_email", "description": "Bir alıcıya e-posta gönderin.", "schema": {...}},
    # ... yüzlerce diğer araç
]

user_query = "Bugün Apple'ın hisse senedi fiyatı nedir?"
relevant_tools = filter_tools_by_relevance(user_query, all_tools, top_k=5)

print(f"Çıkarım için {len(relevant_tools)} araç seçildi:")
for tool in relevant_tools:
    print(f"- {tool['name']}")

Bu örnekte, `search_web` aracı, hisse senedi fiyatlarıyla ilgili sorguyla yüksek anlamsal benzerliği nedeniyle seçilecektir; `calculate` veya `send_email` ise budanır. Bu, yüksek ilgiliyi korurken bağlam boyutunu önemli ölçüde azaltır.

En İyi Uygulamalar ve Dikkat Edilmesi Gerekenler

  • Önbellekleme: Her istekte yeniden hesaplamayı önlemek için araç açıklamalarının gömmelerini önbelleğe alın.
  • Geri Düşme Mekanizması: Benzerlik eşiğini karşılayan araç yoksa, genel amaçlı araçların varsayılan bir setini veya "araç mevcut değil" mesajını döndürmeyi düşünün.
  • İzleme: Zamanla filtreleme stratejinizi iyileştirmek için LLM tarafından seçilen ve kullanılan araçları izleyin.
  • Gecikme Takası: Filtreleme sürecinin kendisinin önemli bir gecikme eklememesini sağlayın. Araç sayısı çok büyükse, verimli gömme modelleri ve vektör veritabanları kullanın.

Sonuç

Akıllı araç filtreleme, herhangi bir üretim düzeyi MCP sistemi için kritik bir optimizasyondur. LLM çıkarımı öncesinde kullanılmayan araç tanımlarını dinamik olarak budayarak bağlam şişkinliğini azaltabilir, model doğruluğunu artırabilir ve operasyonel maliyetleri düşürebilirsiniz. MCP ekosistemi olgunlaştıkça ve araç kayıt defterleri büyüdükçe, verimli filtreleme stratejilerine yatırım yapmak, hızlı, güvenilir ve maliyet etkin yapay zeka uygulamaları sunmanın anahtarı olacaktır.

Share: