WebMCP için değerlendirmeler

Kasper Kulikowski
Kasper Kulikowski

Yayınlanma tarihi: 19 Mayıs 2026

WebMCP, üretken yapay zeka modellerini kullanan aracıları destekler. Üretken yapay zeka kullanan sistemleri test etmek için testlerinizin olasılıksal sonuçları desteklemesi gerekir: Bir giriş, doğruluk derecesi değişen binlerce yanıta yol açabilir. Bu test tekniğine değerlendirmeler (evals) adı verilir.

Araçları üretime sunmadan önce, temsilcilerin aracı ne zaman çağırmaları gerektiğini, nasıl yürüteceklerini ve hangi yanıtların kabul edilebilir olduğunu anladıklarını onaylamanız gerekir. Hata fırsatlarını ortaya çıkmadan önce ele alın.

Sisteminizi büyük dil modeli (LLM) ile etkileşim noktalarında test etmek için değerlendirmeler yazın:

  • Modelin, açıklama ve şemasına göre aracınızın amacını anladığını kontrol edin.
  • Modelin, kullanıcı niyetini desteklemek için doğru parametrelerle doğru aracı seçtiğini doğrulayın.
  • Modelin, aldığı bilgilere göre hareket ettiğini (ör. başka bir aracı çağırmak için bilgileri kullandığını) onaylayın.
  • Kullanıcı yolculuklarının başarılı olduğunu doğrulayın. Kullanıcının amacı göz önüne alındığında, bir temsilci, sağlanan araçlarla web sitemdeki kullanıcı yolculuğunu başarıyla tamamlayabilir mi?

Modelle iletişim kurmayan tüm sistem etkileşimleri için klasik deterministik testler yazmaya devam etmelisiniz.

Arıza modları

Geliştiriciler, hataları önlemek için sistemlerini test etmelidir. Bunu yapmak için sistemin hem kendi başına hem de harici faktörlerle etkileşimde başarısız olabileceği zamanları anlamanız gerekir. WebMCP'de aracın kendisi arızalanabilir ve temsilciler araçları beklendiği gibi kullanamayabilir.

WebMCP araçları başarısız olabilir ve aracı, WebMCP araçlarıyla birlikte başarısız olabilir. Örneğin, kullanıcınızın sepetine bir tişört eklemek istediğini varsayalım.

Hata Örnek Sorun giderme
Ajan, doğru aracı seçemiyor veya doğrudan yanlış aracı çağırıyor.

Temsilci, addToCart adımını atlayıp doğrudan checkout adımına geçer.

  • Aracın description net, eksiksiz ve aracın işlevini doğru şekilde yansıtıyor mu?
  • functionName sezgisel ve açıklayıcı mı?
  • Araç, mevcut durumda/bağlamda LLM'ye doğru şekilde sunuluyor mu?
  • Bu aracın şeması, başka bir araca çok benzediği için belirsizliğe yol açıyor mu?
Temsilci, araçları yanlış sırada çağırıyor

Temsilci önce checkout'yı, ardından addToCart'yi arar.

  • Araç açıklamaları çakışıyor mu ve bu durum, büyük dil modelinin gerekli sıra konusunda kafasını karıştırıyor mu?
  • Önceki bir aracın çıkışı, sonraki araç çağrısı için gerekli bağlamı sağlıyor mu?
  • Durum doğru şekilde güncelleniyor mu ve yeni araçlar LLM'ye beklendiği gibi sunuluyor mu?
  • Belirli araçlar farklı sırada çağrılırsa uçtan uca kullanım alanı hâlâ doğru mu?
  • Önceki aramaları zorlayarak LLM'nin doğru sonraki adımı seçtiğini onaylayıp belirli araç çağrısı zincirini tek başına test ettiniz mi?
Temsilci, aracı yanlış bağımsız değişkenlerle çağırıyor

Temsilci addToCart adlı satıcıyı arıyor ancak tişört yerine ayakkabı ekliyor.

  • inputSchema, enum değerleri ve her özellik için iyi bir description dahil olmak üzere net bir şekilde tanımlanmış mı?
  • Gerekli tüm parametreler açıkça işaretlenip kontrol edildi mi?
  • Argümanın açıklaması, LLM'yi kullanıcı girişini beklenen yapılandırılmış verilerle (ör. belirli bir kimlik veya biçim) nasıl eşleştireceği konusunda açıkça yönlendiriyor mu?

Kullanıcı alışveriş sepetinde neler olduğunu kontrol etmek isterse ne yapmalı?

Hata Örnek Sorun giderme
Araç çıkışı yanlış veya araç bir şeyi kaçırıyor.

Kullanıcı viewCart isteğinde bulunuyor ancak aracı, ürün adları ve tek tek fiyatlar yerine alışveriş sepetinin toplam maliyetini veriyor.

  • Temel araç mantığında hatalar var mı (belirleyici testlerle kontrol edin)?
  • Kullanıcı arayüzü durumu doğru şekilde güncellendi mi ve Ajan, yan etki hakkında doğru bilgiyi aldı mı?
  • Çıkış, sonraki çağrılar için LLM tarafından kullanılıyorsa çıkış, LLM'nin alması için net bir şekilde biçimlendirilmiş mi?
  • Çıkış çok mu ayrıntılı? Yalnızca LLM'nin sonraki işlem için ihtiyaç duyduğu minimum düzeyde temel bilgiyi mi içeriyor?

Son olarak, bir araç JavaScript'in başarısız olduğu herhangi bir şekilde başarısız olabilir. Sorunu gidermek için aşağıdakileri inceleyin:

  • Araç kodu, olası tüm çalışma zamanı hatalarını ve istisnalarını düzgün şekilde işliyor mu?
  • Hata, aracıya ve modele düzgün bir şekilde bildiriliyor mu?
  • Aracın kullandığı harici API'ler veya hizmetler sağlıklı mı?
  • Hata yapısı, modelin geçici bir sorun (yeniden deneme) ile kritik bir hata arasında ayrım yapabileceği kadar net mi?

Test araçlarını ayrı ayrı test etme

Bir temsilci, "Küçük bir pizza istiyorum" gibi bir istek için hangi aracı kullanacağını belirleyemezse karmaşık bir kullanıcı yolculuğunda başarılı olma şansı olmaz.

Araçları ayrı ayrı test ederek şemalarınızı ve açıklamalarınızı tarayıcı simülasyonu çalıştırmadan önce optimize edebilirsiniz.

İPUCU: WebMCP araç çağrısı tetikleyebilirsiniz using navigator.modelContext.executeTool(...).

Arama doğruluğunu ölçme

WebMCP zaMaker adlı demomuza göz atın. Kullanıcı "Küçük bir pizza istiyorum" istemini girdiğinde, set_pizza_size işlevinin "size":"Small" bağımsız değişkeniyle çağrılacağını belirten bir model yanıtı alabilirsiniz.

expectedCall işlevi, beklenen işlevi ve bağımsız değişkeni tanımlar. Bu yaklaşım, aracının sağlanan şemaya göre kullanıcı niyetini desteklemek için doğru aracı seçeceğini onaylar.

{
  "messages": [
    {
      "role": "user",
      "content": "I'd like a small pizza."
    }
  ],
  "expectedCall": [
    {
      "functionName": "set_pizza_size",
      "arguments": { "size": "Small" }
    }
  ]
}

expectedCall, kural tabanlı ve deterministik bir test gerçekleştirmek için kullanılır:

WebMCP araçlarınızı bir bileşenin yaşam döngüsüne bağlayabilirsiniz. Bu durumda, uygulama durumunuz WebMCP'nin beklediği durumla eşleştiğinde test yapmanız gerekir. Bunu yönetmek için değerlendirmek istediğiniz eyaletle alakalı tam bir araç listesi sağlayın. Örneğin, bir kullanıcı temsilcisiyle birlikte göz atıyor ve WebMCP zaMaker'ı açıyor.

Uygulama durumu

[
...
  {
    "name": "add_topping",
    "description": "Add one or more toppings to the pizza",
    ...
  },
  {
    "name": "set_pizza_size",
    "description": "Set the pizza size directly.",
    "inputSchema": {
      "type": "object",
      "properties": {
        "size": {
          "type": "string",
          "enum": [
            "Small",
            "Medium",
            "Large",
            "Extra Large"
          ],
          "description": "The specific size name."
        },
      }
    }
  },
  {
    "name": "set_pizza_style",
    "description": "Set the style of the pizza (colors/theme)",
  ...
  },
...
]

Beklenen görüşme

...
 "expectedCall": [
   {
     "functionName": "set_pizza_size",
     "arguments": { "size": "Small" }
   }
 ]
...

WebMCP açıldığında add_topping, set_pizza_size ve set_pizza_style araçlarını gösterir. Bu araçlardan herhangi birini doğru şekilde test etmek için, simüle edilmiş ve eksiksiz bir durum oluşturmak üzere tüm araçları dahil etmeniz gerekir.

NOT: Bir temsilci ek araçlara erişebilir ancak yapabileceğiniz en iyi şey, sağladığınız araçları değerlendirmektir.

Aracının gerektiğinde doğru aracı çağırdığını bildiğinize göre, araç çağrısının doğru parametrelere sahip olup olmadığını ve sonucun beklendiği gibi olup olmadığını test edebilirsiniz. İki adım vardır: deterministik testler ve olasılıksal testler.

Belirleyici testler çalıştırma

WebMCP araçları JavaScript veya HTML ek açıklamalarıyla oluşturulduğundan aşağıdaki görevleri gerçekleştirmek için deterministik testler yazabilirsiniz:

  • Araç mantığını doğrulayın.
  • Bağımlılıkların doğru şekilde çağrıldığını onaylayın.
  • Kullanıcı arayüzünün, diğer amaçlanan yan etkilerle birlikte beklendiği gibi güncellendiğini onaylayın.
  • Döndürülen bilgilerin beklenen değerle eşleştiğini doğrulayın.
  • Test parametrelerini doğrulayın.

Örneğin, aracınızda SearchComponent işlevi kullanılıyorsa SearchComponent işlevinin sahtesini ileterek test yapabilirsiniz. Mümkün olan en iyi sonuçları elde etmek için aracın çalıştığı ortamı simüle etmeyi unutmayın. Bu, başka bir uygulama entegrasyon testi yazarken kullanacağınız teknikle aynıdır.

Olasılıksal testler yapma

Bir sonraki araçları düzgün şekilde çağırmak için model çıkışı gerekiyorsa değerlendirme yazmanız gerekir.

Kullanıcılar, modele doğrudan sorgular göndererek aracın ne yaptığını sorabilir veya aracın kullanılması gerektiğini ima eden belirsiz bir sorgu gönderebilir. Örneğin, "Pizzama sucuk ekle" doğrudan bir sorgudur. "Pizzamda et olmasını istiyorum" ifadesi daha belirsizdir ve modelin, add_topping aracını kullanması gerektiğini ve hangi malzemelerin et olarak tanımlanabileceğini anlamasını gerektirir.

Değerlendirmeleriniz için veri kümeleri oluştururken hem temel araç yürütmesini test eden doğrudan sorguları hem de modelin akıl yürütme ve araç seçme mantığını test eden açık uçlu sorguları ekleyin.

Bir kahve dükkanı işletiyorsanız geçen ay sipariş ettikleri kahveyi yeniden sipariş etmesini isteyen kullanıcıları destekleyebilirsiniz. Önceki siparişleri aramak için bir araç, OrderHistoryService ve kahve sipariş etmek için başka bir araç yaz. Sipariş geçmişi hizmetini test etmek için kahve ürün kimliği döndüren bir sahte yanıt gönderebilirsiniz.

Bu örnekte, modelin sorgunun amacını anlayıp anlamadığını, doğru aracı seçip seçmediğini ve bu aracın işlem yapmak için doğru bilgileri sağlayıp sağlamadığını değerlendiriyorsunuz. Model get_order_history işlevini çağırmazsa order_product için hangi item_id değerinin kullanılacağını bilemez.

Uçtan uca test

Kullanıcıların ve temsilcilerinin yolculuklarını başarıyla tamamlayabileceğinden emin olmanızı sağlayacak uçtan uca testler yazın. Tek tek araçları test etmenin yanı sıra çok adımlı işlemlerin doğru sırada gerçekleştirilip gerçekleştirilmediğini de test edersiniz.

Örneğin, online bir giyim mağazası işlettiğinizi varsayalım. Bir kullanıcı, aracısına şu soruyu soruyor: "Siyah bir ceket ve bir kot pantolon almak istiyorum. Kullanılan malzemelerin dökümünü paylaşabilir misiniz?"

Başarılı bir temsilci yolculuğu şu şekilde olabilir:

  1. Kıyafet kategorisine gidin.
  2. İstenen giyim eşyalarından birini bul (sıra önemli değil).
  3. Belirli bir öğeyi (search_clothes) bulun.
  4. Malzeme listesini (get_product_details) içeren ürün ayrıntılarını alın.
  5. İstenen her öğe için 2-4 arasındaki adımları tekrarlayın.

Ajan 2. adıma ulaştığında önce siyahı veya kotu arayabilir. Sıra önemli değildir. Ancak diğer adımların sırayla uygulanması gerekir.

Temsilcinin araçları beklenen sırayla çağırdığını doğrulamak için uçtan uca bir değerlendirme yazın:

{
  "messages": [
    {
      "role": "user",
      "content": "I am looking to buy a black jacket and a pair of jeans.
        Could you provide a breakdown of the materials used ?"
    }
  ],
  "expectedCall": [
    {
      "functionName": "navigate_to_category",
      "arguments": { "category": "clothes" }
    },
    {
      "unordered": [
        {
          "ordered": [
            {
              "functionName": "search_clothes",
              "arguments": { "query": "black jacket" }
            },
            {
              "functionName": "get_product_details",
              "arguments": { "productId": "JACKET002" }
            }
          ]
        },
        {
          "ordered": [
            {
              "functionName": "search_clothes",
              "arguments": { "query": "jeans" }
            },
            {
              "functionName": "get_product_details",
              "arguments": { "productId": "JEANS001" }
            }
          ]
        }
      ]
    }
  ]
}

Zincir ortası hatalarını değerlendirme

İndirimli pizza isteyen bir kullanıcı için örnek araç çağrıları.
Bir kullanıcı indirim kuponuyla pizza sipariş etmek istediğinde sırayla bir dizi araç çağrılır: start_pizza_creator, set_pizza_style, set_pizza_size, start_checkout, add_discount_coupon ve complete_checkout. add_discount_coupon başarısız oldu ancak işlem yine de tamamlanabildi. Bu durumda kullanıcı indirimden yararlanamadı.

Bazen bir temsilcinin birden fazla aracı sırayla araması gerekebilir. Bu süreçte bir araç başarısız olursa ne olur? Örneğin, bir kullanıcı kupon koduyla pizza sipariş etmek istiyor:

"Küçük bir pesto soslu pizza istiyorum. FreePizza promosyon kodumu kullanın."

Ajan, add_discount_coupon işleminde başarısız olabilir ve tam fiyatlı pizza için ödeme işlemine devam edebilir. add_discount_coupon aracını test etmek için bu senaryoyu simüle etmek üzere bu araç çağrıları dizisini bir modelle etkileşime girmeden manuel olarak yürütebilirsiniz. Uygulamanızı, aracın başarısız olacağını düşündüğünüz duruma getirin. Bu durumda, start_checkout aracından sonraki bölüm. Ardından, add_discount_coupon öğesini ayrı olarak değerlendirebilirsiniz.

WebMCP ile deneme yapma

Araçları ayrı ayrı değerlendirmek için evals ile denemeler yapmaya ve kendi WebMCP özellikli sitelerinizi WebMCP ile uyumlu herhangi bir aracıyla değerlendirmeye başlayın: