Image description
filling slot adalah
Pengisian Slot

Pengisian Slot

Pengisian slot adalah proses meminta data tambahan untuk memenuhi permintaan klien. Slot adalah entitas yang dikirimkan klien bersama permintaan atau selama proses klarifikasi.

Artikel ini mencakup topik berikut:

  • Ekstraksi slot
  • Parameter slot
  • Mengaktifkan modul pengisian slot
  • Mengakses slot dari skrip
  • Klarifikasi slot yang tidak terisi
  • Interupsi pengisian slot

Jika kita membandingkan intensi dengan fungsi yang dapat dipanggil klien, maka slot dapat dianggap sebagai parameter dari fungsi tersebut. Misalnya, misalkan pengklasifikasi mencakup intensi /Cuaca, yang menangani permintaan seperti "Bagaimana cuaca di London?"

  • Di satu sisi, intensi tidak dapat diproses tanpa mengetahui kota tempat prakiraan harus diperiksa.
  • Di sisi lain, klien dapat secara opsional menyebutkan tanggal prakiraan, yang harus diperhitungkan saat memproses permintaan.

Dalam hal ini, kota dan tanggal adalah slot yang akan diekstraksi dari permintaan.

Parameter Slot

Parameter Nama dan Entitas

Setiap slot harus diberi parameter wajib berikut:

  • Nama adalah nama untuk mengakses slot dari skrip, misalnya Kota, Tanggal.
  • Entitas adalah entitas sistem atau entitas kustom yang terikat pada slot: untuk Tanggal, entitas sistem @duckling sesuai; untuk Kota, entitas kustom yang cocok dengan kota yang relevan harus disediakan.

Permintaan klien dicari entitas yang sesuai dengan slot yang harus diisi. Misalnya, dalam permintaan "Cuaca di London hari ini", slot Kota akan cocok dengan London, dan Tanggal akan menangkap referensi ke tanggal hari ini. Jika intensi memiliki beberapa slot yang terikat pada entitas yang sama, slot tersebut akan diisi satu per satu. Jika Anda perlu menangani jumlah slot arbitrer yang terikat pada entitas yang sama, gunakan struktur $entities, yang berisi representasi mentah dari semua entitas yang ditemukan dalam permintaan.

Parameter Diperlukan

Setiap slot dapat bersifat wajib atau opsional. Jika sakelar Diperlukan diaktifkan, permintaan dengan slot ini yang tidak terisi akan memicu proses klarifikasi slot. Perhatikan bahwa setidaknya satu pertanyaan klarifikasi harus ditentukan di bagian Pertanyaan. Jika tidak ada Pertanyaan yang diberikan, permintaan dengan slot wajib yang tidak terisi tidak akan cocok dengan intensi sama sekali. Jika sakelar dinonaktifkan, intensi akan diproses apakah permintaan memiliki slot yang terisi atau tidak.

Parameter Apakah Array

Slot yang terikat pada entitas yang dapat disebutkan beberapa kali dalam satu permintaan harus ditandai sebagai array. Jika sakelar Apakah Array dinonaktifkan: nilai pertama yang diproses dari entitas ini ditempatkan ke dalam slot. Jika diaktifkan: array dari semua nilai yang diproses dari entitas ini ditempatkan ke dalam slot. Jika entitas hanya disebutkan sekali, itu tetap dikonversi menjadi array.

Mengaktifkan Modul Pengisian Slot

Berikan dependensi berikut di main untuk mengaktifkan modul pengisian slot: require: slotfilling/slotFilling module = sys-common

Mengakses Slot dari Skrip

Slot yang terisi dapat direferensikan dari skrip melalui $parseTree. Tergantung pada apakah entitas yang terikat pada slot memiliki DATA yang terkait dengannya, baik nilai DATA ini atau substring permintaan yang cocok dengan entitas akan tersedia di $parseTree._<NamaSlot>. Slot dapat diakses dari skrip sebagai berikut:

state: Contohintent!: /Cuacascript: if ($parseTree._Tanggal) { $templ = $parseTree._Tanggal.value; } else { $templ = "hari ini"; }a: Cuaca di {{$parseTree._Kota}} untuk {{$templ}}

Karena slot Tanggal bersifat opsional dalam contoh kita, slot tersebut harus diperiksa sebelum diproses dan diatur ke nilai default jika tidak diisi.

Klarifikasi Slot yang Tidak Terisi

Untuk semua slot wajib yang tidak terisi dalam permintaan asli, sistem akan mengajukan pertanyaan klarifikasi yang ditentukan di kolom Pertanyaan. Balasan klien akan dicari entitas yang terikat pada slot. Jika entitas yang cocok ditemukan, slot yang bersangkutan akan diisi. Setelah semua slot terisi, kontrol diberikan ke skrip utama dengan semua slot terisi dan tersedia di $parseTree. Pertimbangkan contoh berikut:

Di sini @Kota adalah entitas kustom yang berisi semua kota yang prakiraannya tersedia.

Permintaan klienTindakan bot
Cuaca di London untuk besokKedua slot terisi. Kontrol akan diberikan ke skrip segera.
Cuaca untuk besokSlot wajib Kota tidak terisi. Bot akan mengajukan pertanyaan klarifikasi.
Cuaca di ParisSlot Tanggal tidak terisi, tetapi opsional. Kontrol akan diberikan ke skrip.

Interupsi Pengisian Slot

Interupsi pengisian slot memungkinkan keluar dari klarifikasi slot lebih awal jika klien gagal menjawab pertanyaan klarifikasi. Gunakan interupsi pengisian slot agar percakapan tidak terjebak dalam lingkaran tak berujung dan klien dapat dengan bebas memilih topik lain untuk dibicarakan. Anda dapat mengonfigurasi interupsi pengisian slot: Melalui percobaan ulang slot; Melalui intensi; Melalui batas waktu. Perhatikan bahwa terlepas dari konfigurasi ini, pengisian slot selalu dapat diinterupsi oleh permintaan /start, yang akan memicu transisi ke status /Start.

Mengubah Konfigurasi

Konfigurasi ini digunakan secara default untuk interupsi:

ParameterNilai
maxSlotRetries2
stopOnAnyIntentfalse
stopOnAnyIntentThreshold0.2
stopOnTimeoutfalse
stopOnTimeoutValue3600

Untuk menimpa nilai parameter, tentukan di bagian injectorlling dari file chatbot. Contoh:

injector: slotfilling: maxSlotRetries: 5 stopOnAnyIntent: true stopOnTimeout: true

Interupsi dengan Melebihi Percobaan Ulang Slot

Parameter maxSlotRetries mengambil nilai integer yang menentukan jumlah maksimum percobaan ulang untuk satu slot. Jika klien telah menjawab pertanyaan klarifikasi sebanyak yang ditentukan dan slot belum terisi, pengisian slot akan diinterupsi. Permintaan klien terakhir akan ditangani dalam skrip bot.

Interupsi oleh Intensi

Parameter berikut mengontrol interupsi oleh intensi: stopOnAnyIntent mengaktifkan interupsi oleh intensi. Menerima nilai true atau false. stopOnAnyIntentThreshold adalah probabilitas minimum yang diperlukan dari frasa untuk masuk ke dalam suatu kelas. Menerima nilai float. Selama pengembangan inti NLU, nilai optimal untuk parameter ini ditemukan sebesar 0.2. Jika stopOnAnyIntent aktif dan selama pengisian slot, klien mengirim permintaan yang cocok dengan intensi dengan keyakinan sama atau lebih besar dari stopOnAnyIntentThreshold, pengisian slot akan diinterupsi. Penting untuk mempertimbangkan konteks di mana pengisian slot dimulai. Jika pengisian slot diinterupsi, tetapi status dengan aktivator intensi yang sesuai tidak dapat dicapai dari status saat ini (misalnya, jika tag intent tidak global), maka event!: noMatch akan dipicu sebagai gantinya.

Interupsi oleh Batas Waktu

Parameter berikut mengontrol interupsi oleh batas waktu: stopOnTimeout mengaktifkan interupsi oleh batas waktu. Menerima nilai true atau false. stopOnTimeoutValue adalah interval dalam detik setelah bot mengajukan pertanyaan klarifikasi. Menerima nilai integer. Jika parameter stopOnTimeout diaktifkan dan klien tidak merespons dalam interval stopOnTimeoutValue, maka pengisian slot diinterupsi dan frasa klien berikutnya diproses dalam skrip bot utama.

© 2026 - Semua hak dilindungi undang-undang. PT dengan modal Rp 10.000.000.000. Jl. Jend. Sudirman Kav. 52-53, Jakarta Selatan 12190