Untuk lebih memahami keperluan dan arah penambahbaikan projek robot pintar, kami selalunya perlu membangunkan beberapa alatan. Daripada beberapa projek robotik yang saya terlibat, kebanyakannya telah berjaya memenuhi keperluan produk. Melalui amalan ini, kami amat menyedari bahawa jika kami ingin terus maju dan bertambah baik, kami mesti membuat penambahbaikan yang ketara pada bahasa definisi robot sedia ada.
Dalam amalan tradisional, tidak mudah untuk mencapainya kerana definisi Niat bercampur dengan kekangan susunan separa, mengehadkan kebebasan laluan perbualan. Ini mencukupi untuk mengendalikan bot "terbuka" (biasa dalam bot gaya FAQ) di mana kebanyakan soalan adalah serba lengkap dan sentiasa tersedia. Tetapi untuk bot yang lebih "tertutup", potensi had perbualan adalah lebih besar (seperti bot yang digunakan untuk menempah tiket dari dalam talian).
Untuk membawa kefungsian bahasa definisi chatbot ke tahap yang baharu, dalam beberapa projek kami telah memperkenalkan DSL yang lebih dekat dengan menyatakan semantik mesin dan mentakrifkan sepenuhnya niat Berpisah daripada peraturan penukaran yang mengawal robot untuk melaksanakan niat tersedia titik tetap, ini mempunyai kelebihan berikut:
Takrifan niat kini dipisahkan daripada bahagian pelaksanaan, tetapi masih merupakan sub-bahasa yang berasingan. Untuk setiap niat, kami hanya perlu menyediakan beberapa ayat latihan supaya robot dapat mengenali maksud ujaran pengguna dan mengekstrak parameter yang diperlukan daripadanya.
Sebagai contoh, kami mempunyai bot mudah yang memahami hanya dua jenis sebutan pengguna: salam dan menyebut nama. Kami boleh menyediakan beberapa contoh ayat untuk setiap jenis ujaran dan biarkan robot belajar cara mengenalinya. Apabila pengguna memasukkan ujaran, robot melakukan tindakan yang sepadan berdasarkan niatnya dan mengekstrak parameter yang diperlukan daripadanya.
intent Hello { inputs { "你好" "早上好" } } intent MyNameIs { inputs { "我的名字叫小明" "我是小明" "你可以叫我小明" } creates context Greetings { set parameter name from fragment "小明" (entity any) } }
Kami menyediakan beberapa contoh ayat untuk setiap niat untuk melatih robot cara mengenalinya. Selain itu, dalam beberapa kes, kami juga mengumpul beberapa parameter dalam konteks (contohnya, nama pengguna) supaya kami boleh bertindak balas kepada pengguna secara lebih peribadi pada masa hadapan.
Kami belum menyatakan niat yang bot harus cuba dipadankan dahulu, itu adalah sebahagian daripada bahasa pelaksanaan. Pendekatan ini membolehkan kami menggunakan semula niat ini (contohnya, dalam bot lain kami mungkin perlu meminta nama pengguna, bukan hanya selepas niat sapaan).
Gunakan fail pelaksanaan untuk menentukan mesin keadaan yang menerangkan cara robot bertindak balas kepada niat/peristiwa dan boleh membuat peralihan. Ini membolehkan pereka bentuk bot melihat fail pelaksanaan dan memahami keseluruhan aliran perbualan.
Setiap keadaan dalam bahasa pelaksanaan mengandungi 3 bahagian
Model pelaksanaan juga mengandungi 2 keadaan istimewa:
最后,一个状态可以定义一个单一的通配符转换(使用保留字符___作为转换条件),当计算状态主体时将自动导航。这使我们能够在多个地方重用相同的代码并模块化执行逻辑。下面是一个简单的机器人示例,它只回复问候意图,询问用户名并向用户问好。这个机器人的回复可以通过我们基于 React 的聊天小部件显示。
//We can always have an init state in case we need to initialize some bot parameters (e.g. welcoming message) Init { Next { //Here we state that the bot will first listen for an utterance matching the Hello intent, it will ignore anything else intent == Hello --> HandleHello } } HandleHello { Body { ReactPlatform.Reply("你好, 你叫什么名字?") } Next { //We wait for the user to input the name, no other transition is possible at this point //Obviously, in more complex bots we may have several possible outgoing transitions in a given state intent == MyNameIs --> HandleMyNameIs } } HandleMyNameIs { Body { ReactPlatform.Reply("你好 " + context.get("Greetings").get("name")) } Next { // An automatic transition to the Init state since at this point the conversation is finished and we can start again _ --> Init } } // Default Fallback state could go here
Atas ialah kandungan terperinci Ringkasan pengalaman dalam reka bentuk chatbot berdasarkan mesin keadaan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!