Evaluasi untuk WebMCP

Kasper Kulikowski
Kasper Kulikowski

Dipublikasikan: 19 Mei 2026, Terakhir diperbarui: 28 Mei 2026

WebMCP mendukung agen yang menggunakan model AI generatif. Untuk menguji sistem apa pun 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 eval.

Sebelum merilis alat ke dalam produksi, Anda harus mengonfirmasi bahwa agen memahami kapan harus memanggil alat, cara mengeksekusinya, dan jawaban apa yang dapat diterima. Mengatasi 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.
  • Verifikasi bahwa model memilih alat yang tepat dengan parameter yang benar untuk mendukung maksud pengguna.
  • Mengonfirmasi bahwa model bertindak berdasarkan informasi yang diterimanya, misalnya menggunakan informasi untuk memanggil alat lain.
  • Verifikasi keberhasilan perjalanan pengguna. Mengingat niat pengguna, dapatkah agen berhasil memenuhi perjalanan pengguna di situs saya dengan alat yang disediakan?

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

Mode kegagalan

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

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

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

Agen melewati addToCart dan langsung menuju checkout.

  • Apakah description alat jelas, lengkap, dan mencerminkan secara akurat 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 end-to-end masih benar jika alat tertentu dipanggil dalam urutan yang berbeda?
  • Apakah Anda telah menguji rangkaian 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 menelepon 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 wajib 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 tidak menemukan sesuatu.

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

  • 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 hanya berisi informasi penting minimum yang dibutuhkan LLM untuk tindakan selanjutnya?

Terakhir, alat dapat gagal dengan cara apa pun yang menyebabkan JavaScript gagal. Untuk memecahkan masalah, selidiki hal-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 digunakan alat tersebut berfungsi dengan baik?
  • Apakah struktur error cukup jelas sehingga model dapat membedakan antara masalah sementara (coba lagi) dan kegagalan kritis?

Menguji alat secara terpisah

Jika agen tidak dapat mengetahui alat mana yang harus 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.

Mengukur akurasi panggilan

Lihat demo kami, yaitu WebMCP zaMaker. Saat pengguna memberikan perintah, "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 diberikan.

{
  "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 Anda cocok dengan yang diharapkan WebMCP. Untuk mengelola hal ini, berikan daftar lengkap alat yang relevan dengan status yang ingin Anda evaluasi. Misalnya, pengguna sedang menjelajah bersama 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 akan menampilkan alat add_topping, set_pizza_size, dan set_pizza_style. Untuk menguji setiap alat ini secara akurat, Anda harus menyertakan semua alat untuk membuat status lengkap yang disimulasikan.

CATATAN: Agen mungkin memiliki akses ke alat tambahan, tetapi 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 yang diharapkan. 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:

  • Verifikasi logika alat.
  • Pastikan dependensi dipanggil dengan benar.
  • Konfirmasi bahwa antarmuka pengguna diperbarui seperti yang diharapkan, beserta efek samping yang disengaja lainnya.
  • Verifikasi bahwa informasi yang ditampilkan cocok dengan nilai yang diharapkan.
  • Validasi parameter pengujian.

Misalnya, jika alat Anda menggunakan fungsi SearchComponent, Anda dapat menguji dengan meneruskan tiruan SearchComponent. Jangan lupa untuk menyimulasikan lingkungan tempat alat beroperasi untuk mendapatkan hasil terbaik. Teknik ini sama dengan yang akan Anda gunakan saat menulis pengujian integrasi aplikasi lain.

Menjalankan pengujian probabilistik

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

Pengguna dapat memberikan kueri langsung ke model yang secara khusus menanyakan 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 didefinisikan sebagai daging.

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

Jika Anda menjalankan kedai kopi, Anda dapat mendukung pengguna yang meminta agen mereka untuk memesan ulang kopi yang sama dengan 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 mengirimkan 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 tahu item_id yang akan digunakan untuk order_product.

Pengujian menyeluruh

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

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

Perjalanan yang berhasil dengan agen mungkin terlihat seperti berikut:

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

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

Tulis evaluasi end-to-end 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, serangkaian 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 proses masih dapat diselesaikan, yang berarti pengguna tidak menerima diskon.

Terkadang, 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 Pesto pizza ukuran 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 mengeksekusi 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, itu 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 kompatibel dengan WebMCP milik Anda sendiri dengan agen yang kompatibel dengan WebMCP: