Evaluasi untuk WebMCP

Kasper Kulikowski
Kasper Kulikowski

Dipublikasikan: 19 Mei 2026

WebMCP mendukung agen yang menggunakan model AI generatif. Untuk menguji sistem apa pun yang menggunakan AI generatif, pengujian Anda harus mendukung hasil probabilistik: satu input dapat menghasilkan ribuan jawaban dengan tingkat akurasi yang bervariasi. Teknik pengujian ini disebut evaluasi atau evals.

Sebelum merilis alat ke produksi, Anda harus mengonfirmasi bahwa agen memahami kapan harus memanggil alat, cara menjalankannya, dan jawaban apa yang dapat diterima. Atasi peluang kegagalan sebelum terjadi.

Tulis evaluasi untuk menguji titik kontak sistem Anda dengan model bahasa besar (LLM):

  • Periksa apakah model memahami tujuan alat Anda, berdasarkan deskripsi dan skemanya.
  • Pastikan model memilih alat yang tepat dengan parameter yang benar untuk mendukung maksud pengguna.
  • Pastikan model bertindak berdasarkan informasi yang diterimanya, misalnya menggunakan informasi untuk memanggil alat lain.
  • Verifikasi perjalanan pengguna yang berhasil. Mengingat maksud pengguna, dapatkah agen berhasil memenuhi perjalanan pengguna di situs saya dengan alat yang disediakan?

Anda harus terus menulis pengujian deterministik klasik untuk interaksi sistem apa pun yang tidak berkomunikasi dengan model.

Mode kegagalan

Developer harus menguji sistem mereka untuk mencegah kegagalan sebelum terjadi. Untuk melakukannya, Anda harus memahami kapan sistem dapat gagal, baik dengan sendirinya maupun saat berinteraksi dengan faktor eksternal. Untuk WebMCP, alat itu sendiri dapat gagal dan agen mungkin gagal menggunakan alat seperti yang diharapkan.

Alat WebMCP dapat gagal dan agen mungkin gagal dengan alat WebMCP. Misalnya, pengguna Anda ingin menambahkan t-shirt ke keranjang.

Gagal Contoh Memecahkan masalah
Agen gagal memilih alat yang benar atau langsung memanggil alat yang salah.

Agen melewati addToCart dan langsung membuka checkout.

  • Apakah description alat jelas, lengkap, dan secara akurat mencerminkan fungsi alat tersebut?
  • Apakah functionName intuitif dan deskriptif?
  • Apakah alat diekspos dengan benar ke LLM dalam status/konteks saat ini?
  • Apakah skema alat ini berpotensi terlalu mirip dengan alat lain, sehingga menyebabkan ambiguitas panggilan?
Agen memanggil alat dalam urutan yang salah

Agen memanggil checkout, lalu addToCart.

  • Apakah deskripsi alat tumpang-tindih, sehingga membuat LLM bingung tentang urutan yang diperlukan?
  • Apakah output alat sebelumnya memberikan konteks yang diperlukan untuk panggilan alat berikutnya?
  • Apakah status diperbarui dengan benar dan alat baru diekspos ke LLM seperti yang diharapkan?
  • Apakah kasus penggunaan menyeluruh masih benar jika alat tertentu dipanggil dalam urutan yang berbeda?
  • Sudahkah Anda menguji rantai panggilan alat tertentu secara terpisah dengan memaksa panggilan sebelumnya untuk mengonfirmasi bahwa LLM memilih langkah berikutnya yang benar?
Agen memanggil alat dengan argumen yang salah

Agen memanggil addToCart, tetapi menambahkan sepatu, bukan t-shirt.

  • Apakah inputSchema ditentukan dengan jelas, termasuk nilai enum dan description yang baik untuk setiap properti?
  • Apakah semua parameter yang diperlukan ditandai dan diperiksa secara eksplisit?
  • Apakah deskripsi argumen secara eksplisit memandu LLM tentang cara memetakan input pengguna ke data terstruktur yang diharapkan (seperti ID atau format tertentu)?

Bagaimana jika pengguna ingin memeriksa isi keranjangnya?

Gagal Contoh Memecahkan masalah
Output alat salah atau alat melewatkan sesuatu.

Pengguna meminta untuk viewCart, tetapi agen menampilkan total biaya keranjang, bukan nama produk dan harga individual.

  • Apakah logika alat yang mendasarinya memiliki bug (periksa dengan pengujian deterministik)?
  • Apakah status UI diperbarui dengan benar dan apakah Agen menerima informasi yang tepat tentang efek samping?
  • Jika output digunakan oleh LLM untuk panggilan berikutnya, apakah output diformat dengan jelas untuk penyerapan LLM?
  • Apakah output terlalu panjang? Apakah output hanya berisi informasi penting minimum yang diperlukan LLM untuk tindakan berikutnya?

Terakhir, alat dapat gagal dengan cara apa pun yang menyebabkan JavaScript gagal. Untuk memecahkan masalah, selidiki hal berikut:

  • Apakah kode alat menangani semua potensi error dan pengecualian runtime dengan benar?
  • Apakah error dilaporkan kembali ke agen dan model dengan baik?
  • Apakah API atau layanan eksternal yang diandalkan alat berfungsi dengan baik?
  • Apakah struktur error cukup jelas sehingga model dapat membedakan antara masalah sementara (coba lagi) dan kegagalan penting?

Menguji alat secara terpisah

Jika agen tidak dapat mengetahui alat mana yang akan dipanggil untuk permintaan seperti, "Saya ingin pizza kecil", agen tidak akan memiliki peluang dalam perjalanan pengguna yang kompleks.

Dengan menguji alat secara terpisah, Anda dapat mengoptimalkan skema dan deskripsi sebelum menjalankan simulasi browser.

TIPS: Anda dapat memicu panggilan alat WebMCP using navigator.modelContext.executeTool(...).

Mengukur akurasi panggilan

Lihat demo kami, the WebMCP zaMaker. Saat pengguna meminta, "Saya ingin pizza kecil", Anda dapat mengharapkan respons model yang menunjukkan niat untuk melakukan panggilan set_pizza_size dengan argumen "size":"Small".

Fungsi expectedCall menentukan fungsi dan argumen yang diharapkan. Pendekatan ini mengonfirmasi bahwa agen akan memilih alat yang tepat untuk mendukung maksud pengguna, berdasarkan skema yang disediakan.

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

expectedCall digunakan untuk melakukan pengujian deterministik berbasis aturan:

Anda dapat mengikat alat WebMCP ke siklus proses komponen, yang berarti Anda harus menguji saat status aplikasi cocok dengan yang diharapkan WebMCP. Untuk mengelola hal ini, berikan daftar alat lengkap yang relevan dengan status yang ingin Anda evaluasi. Misalnya, pengguna melakukan penjelajahan bersama dengan agennya dan membuka WebMCP zaMaker.

Status aplikasi

[
...
  {
    "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)",
  ...
  },
...
]

Panggilan yang diharapkan

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

Saat dibuka, WebMCP mengekspos alat add_topping, set_pizza_size, dan set_pizza_style. Untuk menguji setiap alat secara akurat, Anda harus menyertakan semua alat untuk membuat status simulasi yang lengkap.

CATATAN: Agen mungkin memiliki akses ke alat tambahan, tetapi yang terbaik yang dapat Anda lakukan adalah mengevaluasi alat yang Anda berikan.

Setelah mengetahui bahwa agen memanggil alat yang tepat sesuai kebutuhan, Anda dapat menguji apakah panggilan alat memiliki parameter yang benar dan hasilnya sesuai harapan. Ada dua langkah: pengujian deterministik dan pengujian probabilistik.

Menjalankan pengujian deterministik

Karena alat WebMCP dibuat dengan JavaScript atau sebagai anotasi HTML, Anda dapat menulis pengujian deterministik untuk melakukan tugas berikut:

  • Memverifikasi logika alat.
  • Mengonfirmasi bahwa dependensi dipanggil dengan benar.
  • Mengonfirmasi bahwa antarmuka pengguna diperbarui seperti yang diharapkan, bersama dengan efek samping lain yang disengaja.
  • Memverifikasi bahwa informasi yang ditampilkan cocok dengan nilai yang diharapkan.
  • Memvalidasi parameter pengujian.

Misalnya, jika alat Anda menggunakan fungsi SearchComponent, Anda dapat menguji dengan meneruskan tiruan SearchComponent. Ingatlah untuk menyimulasikan lingkungan tempat alat beroperasi untuk mendapatkan hasil terbaik. Ini adalah teknik yang sama yang akan Anda gunakan untuk menulis pengujian integrasi aplikasi lain.

Menjalankan pengujian probabilistik

Jika Anda memerlukan output model untuk memanggil alat berikutnya dengan benar, Anda harus menulis evaluasi.

Pengguna dapat memberikan kueri langsung ke model yang secara khusus meminta fungsi alat, atau kueri ambigu yang menyiratkan bahwa alat harus digunakan. Misalnya, "Tambahkan pepperoni ke pizza saya" adalah kueri langsung. "Saya ingin semua daging di pizza saya" lebih ambigu dan mengharuskan model memahami bahwa model memerlukan alat add_topping dan topping mana yang dapat ditentukan sebagai daging.

Saat membuat set data untuk evaluasi, sertakan kueri langsung yang menguji eksekusi alat dasar dan kueri terbuka yang menguji penalaran model dan logika pemilihan alat.

Jika Anda menjalankan kedai kopi, Anda dapat mendukung pengguna yang meminta agen mereka untuk memesan ulang kopi yang sama yang mereka pesan bulan lalu. Tulis alat untuk menelusuri pesanan sebelumnya, OrderHistoryService, dan alat lain untuk memesan kopi. Untuk menguji layanan histori pesanan, Anda dapat mengirim tiruan yang menampilkan ID produk kopi.

Dalam contoh ini, Anda mengevaluasi apakah model memahami maksud kueri, memilih alat yang tepat, dan apakah alat tersebut memberikan informasi yang tepat untuk mengambil tindakan. Jika model tidak memanggil get_order_history, model tidak akan mengetahui item_id mana yang akan digunakan untuk order_product.

Pengujian menyeluruh

Tulis pengujian menyeluruh untuk memberi Anda keyakinan bahwa pengguna dan agen mereka dapat menyelesaikan perjalanan mereka dengan sukses. Selain menguji alat individual, Anda juga menguji bahwa tindakan multi-langkah dilakukan dalam urutan yang benar.

Misalnya, Anda menjalankan toko pakaian online. Pengguna bertanya kepada agennya: "Saya ingin membeli jaket hitam dan celana jeans. Bisakah Anda memberikan rincian bahan yang digunakan?"

Perjalanan agen yang berhasil mungkin terlihat sebagai berikut:

  1. Buka kategori pakaian.
  2. Temukan salah satu item pakaian yang diminta (urutan tidak penting).
  3. Temukan item tertentu (search_clothes).
  4. Dapatkan detail produk yang berisi daftar bahan (get_product_details).
  5. Ulangi langkah 2-4 untuk setiap item yang diminta.

Saat agen mencapai langkah 2, agen dapat menelusuri jaket hitam terlebih dahulu atau celana jeans, urutannya tidak penting. Namun, langkah-langkah lainnya harus diikuti secara berurutan.

Tulis evaluasi menyeluruh untuk memverifikasi bahwa agen memanggil alat dalam urutan yang diharapkan:

{
  "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" }
            }
          ]
        }
      ]
    }
  ]
}

Mengevaluasi kegagalan di tengah rantai

Contoh panggilan alat untuk pengguna yang meminta pizza diskon.
Saat pengguna meminta untuk memesan pizza dengan kupon diskon, rantai alat dipanggil secara berurutan: start_pizza_creator, set_pizza_style, set_pizza_size, start_checkout, add_discount_coupon, dan complete_checkout. add_discount_coupon gagal, tetapi prosesnya masih dapat diselesaikan, yang berarti pengguna tidak menerima diskon.

Mungkin ada saat ketika agen harus memanggil beberapa alat secara berurutan. Apa yang terjadi jika alat gagal di tengah proses ini? Misalnya, pengguna ingin memesan pizza dengan kode kuponnya:

"Saya ingin pizza Pesto kecil. Gunakan kode promo saya, FreePizza."

Agen mungkin gagal di add_discount_coupon dan melanjutkan ke checkout untuk pizza dengan harga penuh. Untuk menguji alat add_discount_coupon, Anda dapat menjalankan urutan panggilan alat ini secara manual, tanpa berinteraksi dengan model, untuk menyimulasikan skenario ini. Bawa aplikasi Anda ke status tempat Anda memperkirakan alat akan gagal. Dalam hal ini, setelah alat start_checkout. Kemudian, Anda dapat mengevaluasi add_discount_coupon secara terpisah.

Bereksperimen dengan WebMCP

Mulai bereksperimen dengan evaluasi untuk alat secara terpisah dan mengevaluasi situs yang mendukung WebMCP dengan agen yang kompatibel dengan WebMCP: