Menguji Tool dengan Aman Memakai Mock

Buka di CMS

Begitu agent Anda memanggil tool (API Anda sendiri, MCP server, agent lain, atau plugin), pengujian menjadi lebih sulit: satu test run bisa memesan meja sungguhan, membaca data live yang berubah setiap hari, atau gagal karena sebuah layanan sedang down. Mock mengatasi hal itu. Di langkah ini Anda menulis jawaban terskrip untuk tool Anda, memasangnya ke conversation simulation, lalu menjalankannya, sehingga setiap run mendapatkan hasil tool yang sama dan dapat diprediksi tanpa menyentuh apa pun yang nyata.


Sebelum memulai


Mengapa memakai mock

Selama simulasi, setiap pemanggilan tool melewati sebuah gerbang yang menentukan apa yang terjadi padanya. Tanpa mock, setiap jenis tool punya perilaku default yang tetap:

ToolDefault dalam simulasi (tanpa mock)
Custom API, MCP server, agent lain, dan peer A2ABlocked: tidak ada pemanggilan, dan agent diberi tahu bahwa tool tidak tersedia di run ini.
Plugin yang membaca data (misalnya Dynamic Table atau Public Documents)Live: pemanggilan sungguhan dijalankan dan mengembalikan data sungguhan.
Plugin dan tool bawaan yang menulis data (form, reminder, escalation)Simulated: tidak ada pemanggilan sungguhan; agent menerima jawaban "sukses" yang kosong.
Web search dan web scrapingLive, dan tidak bisa di-mock.

Jadi tanpa mock, skenario yang bergantung pada API booking Anda tidak akan pernah lolos, dan skenario yang membaca tabel live bisa lolos hari ini tetapi gagal besok. Mock memberi tool sebuah jawaban terskrip sebagai gantinya. Dengan begitu Anda dapat:

  • Menguji tanpa menyentuh sistem atau data sungguhan. Tidak ada booking sungguhan, tidak ada data pelanggan sungguhan, tidak ada pemanggilan ke API berbayar.
  • Mendapatkan hasil yang sama di setiap run, sehingga run yang gagal berarti agent-nya yang berubah, bukan datanya.
  • Menguji jalur yang sulit dengan sengaja: hasil kosong, "not found", error 500, timeout, item yang habis. Kondisi seperti ini sulit dipicu dengan layanan sungguhan.

Istilah penting

IstilahArti
Mock setKumpulan jawaban terskrip bernama untuk satu atau beberapa tool. Set Library dibagikan dan dapat dipakai ulang oleh conversation simulation mana pun milik agent.
Tool mockBagian dari mock set untuk satu tool.
CaseSatu jawaban terskrip untuk sebuah tool, dipakai ketika argumen pemanggilan cocok dengan kondisi case tersebut. Satu tool bisa memiliki hingga 50 case, diperiksa dari atas ke bawah.
ConditionAturan pada satu argumen pemanggilan, misalnya query contains latte. Semua condition dalam satu case harus terpenuhi.
OtherwiseJawaban tool ketika tidak ada case yang cocok: respons default, atau "keep looking" ke mock set berikutnya.

Langkah 1: Membuat mock set

  1. Di CMS, buka Simulation → Mocks pada sidebar agent. Halamannya berjudul Tool Mocks.
  2. Klik New Mock Set.
  3. Isi Name (wajib, maksimal 120 karakter), misalnya "Menu: Iced Caramel Latte sold out", dan Description (opsional).
Editor mock set dengan nama, deskripsi, daftar Tools in this set, dan detail tool yang dipilih

Chip Library di samping judul berarti set ini dibagikan: Anda dapat memasangnya ke conversation simulation mana pun milik agent ini.


Langkah 2: Menambahkan tool yang ingin di-mock

  1. Di bawah Tools in this set, klik Add tool.
  2. Cari tool-nya lalu klik. Daftar ini menampilkan tool dari agent yang sudah di-publish, dikelompokkan menurut sumbernya (Custom API, MCP, Plugins, Built-in), beserta apa yang akan dilakukan tool tersebut jika tidak di-mock, misalnya Simulated success.
Daftar Add tool yang difilter ke escalate_conversation, dengan label Writes data dan Simulated success

Kartu tool yang dipilih menampilkan deskripsinya dan Inputs-nya (argumen yang diisi AI saat memanggil tool). Anda dapat menambahkan beberapa tool ke satu set; pilih tool di daftar sebelah kiri untuk mengedit case-nya.

Jika suatu saat tool dihapus dari agent yang sudah di-publish, set akan menampilkan Tool not found in the published agent. Gunakan Re-bind to… untuk memindahkan case-nya ke tool lain.


Langkah 3: Menambahkan case dengan condition

  1. Klik Add case. Beri label agar mudah dikenali nanti, misalnya "Latte is sold out".
  2. Di bawah When all of these match, klik Add condition, pilih argumennya, pilih perbandingannya, lalu ketik nilainya.
  3. Tambahkan condition lain bila perlu. Case hanya menjawab jika setiap condition terpenuhi. Argumen yang tidak Anda cantumkan boleh bernilai apa saja.
Case berlabel Latte is sold out dengan condition query contains latte dan respons tabel berisi satu baris

Perbandingan yang bisa dipilih bergantung pada tipe argumen:

Tipe argumenPerbandingan
Teks (juga list, object, dan tipe yang tidak dikenal)is, is not, contains, starts with, ends with, matches pattern, is one of, is empty, is not empty
Angka=, ≠, <, ≤, >, ≥, is between (inklusif)
Ya/tidakis true, is false
Tipe apa punis present, is missing

Tips:

  • Perbandingan teks mengabaikan huruf besar dan kecil, kecuali Anda mengaktifkan Aa (match case) pada condition tersebut.
  • is one of menerima daftar yang dipisahkan koma; is between menerima nilai minimum dan maksimum.
  • matches pattern memakai regular expression.
  • Case tanpa condition cocok dengan semua pemanggilan. Letakkan di urutan terakhir, karena case diperiksa dari atas ke bawah dan case "tangkap semua" akan menutupi case di bawahnya.
  • Untuk input yang tidak biasa, buka Advanced — Match raw arguments dan tempelkan potongan JSON yang harus terkandung dalam argumen pemanggilan. Ini diperiksa sebagai tambahan dari condition.

Langkah 4: Menulis respons

Di bawah Respond with, tulis apa yang dikembalikan tool untuk case ini. Editornya menyesuaikan dengan tool:

  • Form menampilkan formulir yang sesuai dengan output tool (misalnya baris dan kolom untuk query tabel); View as JSON menampilkan body mentahnya. Anda juga bisa beralih antara JSON dan Text.
  • Success dan Error membuka template siap pakai, seperti list kosong, "Not found (404)", "Unauthorized (401)", "Rate limited (429)", "Service down or timed out" untuk Custom API, atau "Query fails" dan "No rows found" untuk query tabel.
  • Untuk Custom API, pilih HTTP Status (default 200 OK). Kode error di rentang 5xx sampai ke agent sebagai hasil kosong, sama seperti API sungguhan yang gagal.
  • Untuk tool MCP, pilih Content atau MCP error. Untuk agent lain, tulis teks balasannya.
  • Suggest meminta AI membuat draf respons untuk case tersebut. Format merapikan JSON.
  • Fetch a sample (untuk tool yang hanya membaca data) memanggil tool sungguhan satu kali agar Anda bisa menyalin bentuk datanya. Use a real response hanya tersedia untuk Custom API yang memakai GET; untuk tool lain tombol ini terkunci karena memanggilnya bisa membuat data sungguhan.

Body respons bisa berukuran hingga 64 KB.


Langkah 5: Menentukan nasib pemanggilan lainnya

Di bawah daftar case, kotak Otherwise (every other call) menentukan jawaban tool ketika tidak ada case yang cocok. Buka Advanced untuk memilih:

  • Respond with a default: pemanggilan mendapat respons yang Anda tulis di kotak ini (di sini: "No rows found").
  • Keep looking: pemanggilan berlanjut ke mock set berikutnya, dan jika tidak ada yang menjawab, ke perilaku default tool sesuai tabel di Mengapa memakai mock. Di daftar tool, tool seperti ini ditandai "Keeps looking".
Kotak Otherwise dengan respons tabel kosong dan opsi Advanced Respond with a default serta Keep looking

Klik Save. Set tersebut kini muncul di halaman Tool Mocks beserta tool-nya, jumlah case, dan berapa conversation yang memakainya.

Halaman Tool Mocks dengan satu kartu mock set yang menampilkan 1 tool, 1 case, dan Used in 1 conversation

Langkah 6: Memasang mock set ke conversation simulation

  1. Buka Simulation → Scenarios, lalu buka (atau buat) sebuah conversation simulation. Lihat Merancang Skenario untuk menulis step dan criteria.
  2. Di kartu Tool mocks, klik Add mock set:
    • From library… memasang set bersama, seperti yang baru saja Anda buat.
    • Create new membuat set Private yang hanya dimiliki conversation ini.
  3. Klik Save pada conversation.
Kartu Tool mocks pada conversation simulation dengan satu mock set Library terpasang dan switch Date and time the agent sees

Hal-hal yang perlu diketahui:

  • Set yang dipasang di sini dipakai oleh setiap step. Seret barisnya untuk mengubah urutan: set pertama yang menjawab sebuah pemanggilan yang dipakai.
  • Setiap step juga punya baris Tool mocks (n) sendiri dengan tombol Add step mock set. Set milik step diperiksa sebelum set milik conversation, sehingga Anda bisa mengubah jawaban satu tool hanya untuk satu step (misalnya "pencarian pertama tidak menemukan apa pun, pencarian kedua menemukan item-nya").
  • Date & time the agent sees: aktifkan switch untuk menetapkan tanggal, jam, dan zona waktu untuk simulasi ini. Gunakan ketika argumen tool bergantung pada tanggal ("besok jam 7"), agar condition tetap cocok di setiap run.
  • Di menu ⋮ pada baris, Make a private copy (pada set library) memberi conversation ini salinannya sendiri yang bisa Anda ubah tanpa memengaruhi conversation lain, dan Save to library (pada set private) membagikannya ke simulasi lain milik agent.
  • Saat Anda mengklik Run dan run akan memanggil tool yang diblokir, konfirmasinya mencantumkan tool tersebut dengan tautan Mock it, yang membuka editor mock untuk tool itu.

Periksa hasilnya

  1. Klik Run pada conversation lalu konfirmasi. Setelah run selesai, buka dari tab Results (lihat Menjalankan dan Memantau).
  2. Buka conversation-nya. Mocks used in this run membuka panel berisi mock set persis yang dipakai run tersebut, dibekukan pada saat run, serta jam simulasi jika Anda mengaturnya.
Baris conversation pada hasil simulasi dengan tautan Mocks used in this run dan 2/2 Matched
  1. Buka sebuah step lalu buka Tool calls. Setiap pemanggilan menampilkan chip hasil dan asal jawabannya:
Baris tool call dengan chip Mocked dan Conversation, argumen pemanggilan, serta case dan mock set yang cocok
HasilApa yang terjadi
MockedAda case yang cocok. Baris di bawahnya menyebutkan case dan mock set-nya, beserta status code. Chip kedua menunjukkan apakah set berasal dari Step atau Conversation.
DefaultTidak ada case yang cocok, dan default Otherwise milik tool yang menjawab.
SimulatedTidak ada mock yang menjawab; dipakai simulated success bawaan tool.
LiveTool sungguhan dijalankan. Baris ini diberi peringatan bahwa isinya mungkin data sungguhan.
BlockedTidak ada pemanggilan. Gunakan Mock this call untuk menambahkan mock untuknya.
InternalTool internal yang selalu berjalan.

Buka sebuah pemanggilan untuk melihat Arguments dan Response lengkapnya. Jika tool memiliki Response Prompt, baris tersebut mencatat bahwa prompt itu diterapkan di atas respons mock, sama seperti di production. Pada pemanggilan Mocked atau Live, Save as case mengubah pemanggilan itu menjadi case baru (di set private untuk step ini, untuk seluruh conversation, atau di set yang sudah ada), yang merupakan cara tercepat membangun mock dari perilaku sungguhan.

Pada demo Brew di atas, pengguna bertanya "Can I order an iced caramel latte?", agent mencari di menu dengan query: "iced caramel latte", case "Latte is sold out" menjawab, dan agent membalas bahwa minuman tersebut tidak tersedia. Setiap run mendapat jawaban yang sama, apa pun isi menu live-nya.


Batasan dan praktik yang baik

  • Mock hanya berlaku untuk conversation simulation. Preview, agent yang sudah di-publish, dan channel sungguhan selalu memanggil tool sungguhan.
  • Satu mock set menampung hingga 50 tool, setiap tool hingga 50 case, setiap case hingga 20 condition.
  • Web search dan web scraping tidak bisa di-mock; keduanya berjalan live dalam simulasi.
  • Mock mengikuti agent yang sudah di-publish: publish setelah menambah atau mengganti nama tool, lalu perbarui mock set Anda.
  • Buat satu tujuan per mock set ("happy path", "API down", "item habis") dan kombinasikan beberapa set per skenario, alih-alih satu set raksasa.
  • Selalu uji setidaknya satu jalur error (template Error) agar Anda tahu bagaimana agent menjawab ketika sebuah layanan gagal.

Untuk daftar lengkap field di layar-layar ini, lihat halaman Help Mocks, Scenarios, dan Results.


Langkah berikutnya