Rumah  >  Artikel  >  Peranti teknologi  >  Ringkasan pengalaman dalam reka bentuk chatbot berdasarkan mesin keadaan

Ringkasan pengalaman dalam reka bentuk chatbot berdasarkan mesin keadaan

WBOY
WBOYke hadapan
2023-04-11 18:31:031516semak imbas

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.

  • Permudahkan proses penciptaan bot yang memerlukan aliran perbualan yang rumit.
  • Maksimumkan kebolehgunaan semula dengan menggunakan semula modul dan laluan dialog yang telah ditakrifkan pada masa lalu untuk mencipta bot

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

Ringkasan pengalaman dalam reka bentuk chatbot berdasarkan mesin keadaan

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:

  1. Niat sebelumnya boleh digunakan semula dalam robot baharu, walaupun set laluan dialog berbeza .
  2. Mesin keadaan boleh digunakan untuk menentukan aliran perbualan yang kompleks, membolehkan bot mengekalkan semantik yang jelas dan tepat.
  3. Pengawal keadaan kompleks boleh dibuat untuk mengawal peralihan. Alihkan bot ke keadaan baharu berdasarkan input pengguna, acara akan datang dan data sebelumnya, parameter perbualan, dsb.
  4. Badan negeri boleh digunakan untuk menyimpan logik perbualan yang kompleks sebagai tindak balas kepada permintaan pengguna.
  5. Robot boleh diubah suai untuk menggunakan semula bahagian mesin keadaan dalam robot lain.
  6. Sandaran setempat boleh ditakrifkan sebagai sebahagian daripada tingkah laku yang bersifat stateful. Selain sandaran global lalai, anda juga boleh mengaitkan sandaran tempatan dengan keadaan untuk mengendalikan ralat dalam konteks keadaan, seperti memaparkan mesej untuk membantu pengguna menjawab soalan yang ditanya oleh bot pada keadaan tertentu dalam perbualan.

Bahasa Definisi Niat

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

Bahasa Definisi Pelaksanaan

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

  • Badan (pilihan): Reaksi yang dilakukan oleh robot apabila memasuki keadaan.
  • Seterusnya (diperlukan): Mentakrifkan penukaran keluar, dinyatakan sebagai keadaan –> Nyatakan. Apabila acara/niat diterima, syarat dinilai dan jika peralihan dipenuhi, enjin pelaksanaan bergerak ke keadaan yang ditentukan dan melaksanakan tindak balas yang sepadan. Perlu diingat bahawa keadaan penukaran boleh menjadi sangat kompleks. Mereka adalah pengawal sejati, bermakna jika keseluruhan keadaan tidak benar, peralihan tidak dapat dilayari dan enjin akan kekal dalam keadaan semasa.
  • Fallback (pilihan): Bahagian ini boleh mengandungi kod arbitrari (sama seperti bahagian Body) dan akan dilaksanakan jika enjin tidak menemui peralihan yang boleh dilayari kod ini .

Model pelaksanaan juga mengandungi 2 keadaan istimewa:

  • Init:是创建用户会话时进入的常规状态。它可以包含 Body、_Next_和 Fallback 部分。
  • Default_Fallback:它只能包含 Body 部分,并且不能作为转换的目标状态。该状态表示在当前状态中未定义本地回退时执行的默认回退代码。该状态可用于打印通用错误消息(例如,“抱歉,我没明白您的意思”),而本地回退则可以打印针对当前状态的定制消息(例如,“请回答是或否”)。

最后,一个状态可以定义一个单一的通配符转换(使用保留字符___作为转换条件),当计算状态主体时将自动导航。这使我们能够在多个地方重用相同的代码并模块化执行逻辑。下面是一个简单的机器人示例,它只回复问候意图,询问用户名并向用户问好。这个机器人的回复可以通过我们基于 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!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam