Uji WebMCP dengan Evaluasi

Kasper Kulikowski
Kasper Kulikowski

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

Video penjelasan Web Ekstensi Status Chrome Intent
GitHub Uji coba origin Uji coba origin View Niat untuk Bereksperimen

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 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):

  • Pastikan 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. Berdasarkan maksud pengguna, dapatkah agen berhasil memenuhi perjalanan pengguna di situs web saya dengan alat yang disediakan?

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

Mode kegagalan

Para pengembang harus menguji sistem mereka untuk mencegah kegagalan sebelum terjadi. Untuk melakukan itu, Anda perlu memahami kapan sistem dapat gagal, baik secara mandiri maupun saat berinteraksi dengan faktor eksternal. Untuk WebMCP, alat itu sendiri mungkin mengalami kegagalan dan agen mungkin gagal menggunakan alat tersebut seperti yang diharapkan.

Alat WebMCP mungkin gagal dan agen mungkin gagal saat menggunakan alat WebMCP. Sebagai contoh, anggaplah pengguna Anda ingin menambahkan kaos ke keranjang belanja mereka.

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

Agen tersebut melewati addToCart dan langsung menuju checkout.

  • Apakah description alat tersebut jelas, lengkap, dan secara akurat mencerminkan apa yang dilakukan alat tersebut?
  • Apakah functionName intuitif dan deskriptif?
  • Apakah alat tersebut terekspos dengan benar ke LLM dalam kondisi/konteks saat ini?
  • Apakah skema alat ini berpotensi terlalu mirip dengan alat lain, sehingga menyebabkan ambiguitas panggilan?
Agen menyebutkan alat-alat tersebut dengan urutan yang salah.

Agen tersebut memanggil checkout dan kemudian addToCart.

  • Apakah deskripsi alat saling tumpang tindih, sehingga membingungkan LLM tentang urutan yang dibutuhkan?
  • Apakah output dari alat sebelumnya memberikan konteks yang diperlukan untuk pemanggilan alat berikutnya?
  • Apakah statusnya diperbarui dengan benar dan apakah alat-alat baru yang diperkenalkan ke LLM sesuai harapan?
  • Apakah skenario penggunaan ujung-ke-ujung masih benar jika alat-alat tertentu dipanggil dalam urutan yang berbeda?
  • Apakah Anda sudah menguji rangkaian panggilan alat spesifik tersebut secara terpisah dengan memaksa panggilan sebelumnya untuk memastikan LLM memilih langkah selanjutnya yang benar?
Agen memanggil alat dengan argumen yang salah.

Agen tersebut memanggil addToCart, tetapi menambahkan sepatu alih-alih kaos.

  • Apakah inputSchema didefinisikan dengan jelas, termasuk nilai enum dan description yang baik untuk setiap properti?
  • Apakah semua parameter wajib ditandai dan diperiksa secara eksplisit?
  • Apakah deskripsi argumen tersebut 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 dari alat tersebut salah atau alat tersebut melewatkan sesuatu.

Pengguna meminta viewCart, tetapi agen menampilkan total biaya keranjang belanja, 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 tersebut digunakan oleh LLM untuk panggilan selanjutnya, apakah output tersebut diformat dengan jelas agar dapat diproses oleh LLM?
  • Apakah output terlalu panjang? Apakah hanya berisi informasi penting minimum yang dibutuhkan LLM untuk tindakan selanjutnya?

Terakhir, sebuah alat dapat membantu mengatasi kegagalan JavaScript. Untuk mengatasi 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 diandalkan oleh alat ini dalam kondisi sehat?
  • Apakah struktur kesalahan cukup jelas sehingga model dapat membedakan antara masalah sementara (coba lagi) dan kegagalan kritis?

Alat uji 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 Anda sebelum menjalankan simulasi browser.

Mengukur akurasi panggilan

Lihatlah demo kami, WebMCP zaMaker. Ketika 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 mendefinisikan fungsi dan argumen yang diharapkan. Pendekatan ini menegaskan 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:

Dimungkinkan untuk mengaitkan alat WebMCP Anda dengan siklus hidup komponen, yang berarti Anda harus menguji kapan status aplikasi Anda sesuai dengan apa yang diharapkan WebMCP. Untuk mengelola hal ini, berikan daftar lengkap alat yang relevan dengan kondisi yang ingin Anda evaluasi. Sebagai contoh, seorang pengguna sedang melakukan co-browsing dengan agen mereka 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 menampilkan alat add_topping, set_pizza_size, dan set_pizza_style. Untuk menguji setiap alat secara akurat, Anda harus menyertakan semua alat tersebut untuk menciptakan kondisi simulasi yang lengkap.

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

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

Jalankan pengujian deterministik

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

  • Verifikasi logika alat.
  • Konfirmasikan bahwa dependensi telah dipanggil dengan benar.
  • Konfirmasikan bahwa antarmuka pengguna telah diperbarui sesuai harapan, beserta efek samping lain yang disengaja.
  • Verifikasi bahwa informasi yang dikembalikan sesuai dengan nilai yang diharapkan.
  • Validasi parameter pengujian.

Misalnya, jika alat Anda menggunakan fungsi SearchComponent, Anda dapat mengujinya dengan memberikan tiruan (mock) dari SearchComponent. Ingatlah untuk mensimulasikan lingkungan tempat alat tersebut beroperasi untuk mendapatkan hasil terbaik. Ini adalah teknik yang sama yang akan Anda gunakan saat menulis pengujian integrasi aplikasi lainnya.

Jalankan tes probabilistik

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

Pengguna dapat memberikan kueri langsung ke model yang secara spesifik menanyakan fungsi alat tersebut, atau kueri ambigu yang menyiratkan bahwa suatu alat harus digunakan. Sebagai contoh, "Tambahkan pepperoni ke pizza saya" adalah kueri langsung. "Saya ingin semua daging di pizza saya" lebih ambigu dan membutuhkan model untuk memahami bahwa ia membutuhkan alat add_topping dan topping mana yang dapat didefinisikan sebagai daging.

Saat membuat dataset untuk evaluasi Anda, 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 membantu pelanggan yang meminta petugas untuk memesan ulang kopi yang sama seperti yang mereka pesan bulan lalu. Buatlah sebuah alat untuk mencari pesanan sebelumnya, OrderHistoryService, dan alat lain untuk memesan kopi. Untuk menguji layanan riwayat pesanan, Anda dapat mengirimkan data tiruan yang mengembalikan 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, maka model tidak akan tahu item_id apa yang harus digunakan untuk order_product.

Pengujian menyeluruh

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

Sebagai contoh, Anda menjalankan toko pakaian online. Seorang pengguna bertanya kepada agennya: "Saya ingin membeli jaket hitam dan celana jeans. Bisakah Anda memberikan rincian bahan-bahan yang digunakan?

Perjalanan keagenan yang sukses mungkin terlihat seperti 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 material (get_product_details).
  5. Ulangi langkah 2-4 untuk setiap item yang diminta.

Ketika agen mencapai langkah 2, ia dapat mencari yang berwarna hitam terlebih dahulu atau yang berwarna jeans, urutannya tidak penting. Namun, langkah-langkah selanjutnya harus diikuti secara berurutan.

Tuliskan evaluasi ujung-ke-ujung untuk memverifikasi bahwa agen memanggil alat-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" }
            }
          ]
        }
      ]
    }
  ]
}

Evaluasi kegagalan di tengah rantai pasokan

Contoh alat ini meminta pengguna untuk memesan pizza dengan harga diskon.
Ketika 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 prosesnya tetap dapat diselesaikan, artinya pengguna tidak menerima diskon.

Ada kalanya agen harus memanggil beberapa alat secara berurutan. Apa yang terjadi jika sebuah alat mengalami kerusakan di tengah proses ini? Sebagai contoh, pengguna ingin memesan pizza menggunakan kode kupon mereka:

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

Ada kemungkinan agen tersebut gagal pada add_discount_coupon dan melanjutkan ke proses pembayaran 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 mensimulasikan skenario ini. Bawa aplikasi Anda ke tahap di mana Anda memperkirakan alat tersebut akan gagal. Dalam hal ini, itu setelah alat start_checkout. Kemudian, Anda dapat mengevaluasi add_discount_coupon secara terpisah.

Bereksperimen dengan WebMCP

Mulailah bereksperimen dengan evaluasi untuk berbagai alat secara terpisah dan evaluasi situs Anda sendiri yang mendukung WebMCP dengan agen yang kompatibel dengan WebMCP: