在开发聊天机器人的过程中,我们经常需要处理用户的输入数据并根据其回答继续向用户发起问题。botbuilder-formflow
是一个 npm 包,可以帮助我们轻松地构建出这样的聊天机器人,本文将介绍如何使用 botbuilder-formflow
。
简介
botbuilder-formflow
是一个基于 Bot Builder for Node.js 的组件。它提供了一种声明式的方式来验证及处理聊天机器人的输入及输出数据,通过简明的配置,可以快速地构建出一个具有自然语言交互能力的聊天机器人。
安装
首先,我们需要安装 botbuilder-formflow
依赖:
npm i botbuilder-formflow
使用
1. 创建 botbuilder-formflow 的 Form 对象
首先,我们需要创建 botbuilder-formflow
的 Form 对象:
-- -------------------- ---- ------- ----- - ------------------ ----------- --------------- - - ------------------------------- ----- ------- - ---------------------- ----- --- - --- -------------------------------- ----- ------ - --- ------------ ------------ --------- ----- ----- -- - -- ---- ---- ----- - ---
在创建 myForm
对象时,我们需要使用 FormDialog
构造函数创建一个输入对话框,然后使用 configure
方法对其进行配置。在 configure
方法中传入对话框要执行的回调函数数组。
FormDialog
采用一种堆栈式的回调方式,第一个函数将作为初始函数,后续函数将根据逻辑决定是否执行。在实例化对话框对象后,您还可以使用 FormDialog
上的其他方法对其进行定制,例如设置默认值等。
2. 创建 botbuilder-formflow 的 Waterfall 对象
使用 FormDialog
的函数返回 Entity
所需的值。为了让用户输入值,我们需要创建一个包含 FormDialog
的 WaterfallDialog
。
const waterfall = new WaterfallDialog() .addStep(myForm);
3. 将 Waterfall 对象设置为根对话
我们可以将 WaterfallDialog
对象设置为根对话,这样聊天机器人将首先调用 myForm
中的第一个方法来启动聊天。
这里我们使用 bot.dialog()
添加了 WaterfallDialog
对话对象。
bot.dialog('/', waterfall);
4. 添加 Entity
当聊天机器人开始聊天之前,我们还需要向 botbuilder-formflow
添加实体,以表示我们当前对话的主题。
我们以井号(#)的形式定义实体 name
及处理用户输入方法:
EntityRecognizers.addEntityRecognizer('#name', (name) => name.trim().split(' '));
EntityRecognizers
中的 addEntityRecognizer
函数将实体 #name
添加到实体器中。指定的处理程序要求输入的文本将被拆分成识别符和值数组。在这种情况下,我们将输入文本拆分为空格分隔的字符串,这样每个单词都被视为一个值。
5. 表单验证
在表单中设置验证器,如果表单数据不正确,则将触发这些验证器。
以下示例验证表单输入数据中是否包含 name
实体。
-- -------------------- ---- ------- ------ -------------- --------- ------ -- - -- -------- - ------------------ ------ --- -- -------- ------ ----- - ---- -- ------------- - --- - ------------------ ------ --- -- ---- ---- -- ------------ ------ ----- - ---- - --------------------- - ------ ------ ------ - ---
myForm.field()
方法在构建表单时为每个表单字段设置一个新的字段。设置回调函数来检查数据是否有效,并在数据无效时返回空值。
6. 启动聊天
我们将 bot.dialog()
添加为第一次和每一次返回根对话时发送的内容。
-- -------------------- ---- ------- --- ------------------------- --------- -- - -- ---------------------- - --------------------------------------- -- - -- -------------------------- --- ------------------------------------- - ------------ ----------------- ------------------------- ------------------- - --- - -- -------------- ---------------------------------------
示例
下面是一个完整的使用示例,聊天机器人用于让用户输入他们的名字:
-- -------------------- ---- ------- ----- - ------------------ ----------- --------------- - - ------------------------------- ----- ------- - ---------------------- ----- --------- - --- ------------------------------------ ----- --- - --- -------------------------------- ----- ------ - --- ------------ ------------ --------- ----- ----- -- - ----------------------------- ------- ---- -------- -- --------- -------- ----- -- - ------------------------------------ - ----------------- ------------------ ---- -- ---------------------- ------------------------------ - -- --------------- --------- ------ -- - -- -------- - ------------------ ------ --- -- -------- ------ ----- - ---- -- ------------- - --- - ------------------ ------ --- -- ---- ---- -- ------------ ------ ----- - ---- - --------------------- - ------ ------ ------ - --- ----- --------- - --- ----------------- ----------------- ---------------------------------------------- ------ -- ------------------- ---- --------------- ---------- ------------------------- --------- -- - -- ---------------------- - --------------------------------------- -- - -- -------------------------- --- ------------------------------------- - ------------ ----------------- ------------------------- ------------------- - --- - -- -------------- ---------------------------------------
运行聊天机器人,输入以下内容:
User: hi Bot: Welcome! Bot: What's your name? User: Peter Bot: Your name is Peter
这是一个最简版本的实现聊天机器人,只有一个字段,如果你更改 myForm
对象配置并调用 configure
方法,步骤回调函数数组将被调整以处理预期的表单输入数据。
总结
通过本文,我们了解到了 botbuilder-formflow
这个 npm 包的基本使用方法。我们可以在创建聊天机器人时添加更多的字段,以便更全面地处理用户的输入数据,并向用户发起更多问题,以实现更自然的语言交互效果。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/79464