1. 卡片使用

1.1 画流程图

  • 对话图创建时会生成一个名为 main 的空节点,我们将用它作为对话图的起始点。空节点不会影响对话图的功能,我们可以用其作为传送节点的目标,使对话图更加清晰。

  • 对话图需要用户输入节点来触发,可以是用户说,意图识别,实体提取或者万能节点等类型。其中,用户说节点会捕捉一个被事先定义好的文本内容。当用户输入完整匹配的文本内容时,节点匹配,流程可以继续执行。

  • 我们首先拖曳一个简单的用户说节点。将鼠标移动到用户说节点的图标,按住鼠标左键,将图标拖曳到对话图编辑区域:
  • 在节点上双击鼠标左键,可以编辑用户输入的内容。
  • 下一步,拖曳机器人答节点,让机器人说些什么来欢迎用户吧。同样可以双击编辑机器人答复的内容。
  • 现在,将用户说节点和机器人答节点用箭头连接,表明对话图的走向。将鼠标移动到用户说节点上,节点的边上显示空心圆。将鼠标移动到任意一条边上的空心圆上时,鼠标显示为 + ,按住鼠标左键,将箭头连接到机器人答节点。然后把自动生成的空节点连接到用户说节点。

1.2 测试

  • 下面,让我们先体验一下这个最简单的对话图吧。点击编辑页面右上方的训练按钮,训练使对话图使图的改动生效。训练成功后,点击测试按钮。
  • 在弹出的对话框下方的输入框中,输入“满意度反馈”,可以看到机器人回答了我们设置的回复语。

1.3 卡片命名

  • 双击卡片后,可以点击卡片名称右边的编辑按钮,给卡片命名。这样可以对话图更加清晰。

2. 输入节点

  • 输入节点可以用来捕捉用户输入。

2.1 用户说

  • 用户说会捕捉一个被事先定义好的文本内容。我们在刚才的例子中已经用到了该节点

  • 用户说节点同时可以使用正则表达式,需要在高级设置中,勾选“正则表达式匹配”,这样用户说节点中输入的文字,会当成正则表达式在后端进行匹配。

  • 同时,所有输入节点都可以选择进行全局匹配,需要在高级设置中,勾选“全局匹配”。使用全局匹配之后,任何时候都可以通过这个输入节点进行匹配,但是优先级是最低的。

2.2 询问意图

  • 意图节点会捕捉包含一定意图的用户回答,并将捕捉到的意图存在变量中
  • 输入你想要捕捉的意图,点击 Enter 后,自动进入 NLU 编辑界面内的意图编辑。
  • 在左侧输入你想要捕捉的句子,可以输入多个。当流程图运行到意图节点时,会将用户输入的内容与模板里的句子进行匹配,如果匹配成功,对话图会继续运行。
  • 在右侧添加槽位。槽位有自己的名称,并应该基于一个词典。词典可以使用系统词典或者用户自定义的词典。
  • 然后就可以对模板进行标注了。被标注的词可以被替换成词典中的其他词语。
  • 选择我们添加好的意图
  • 让我们试试吧!别忘了训练!
  • 被捕捉到的意图会被存在变量中,变量名字为槽位名。我们可以在机器人回答中用到该变量,如下:
  • 因为日期是一个 array,我们用".key"可以读取所有日期的 key,读取的结果也会是一个 array。而用".get(0)"则可以读取 array 的第一个元素,然后再读该元素的 key,就能直接得到我们想要的值了。
  • 当前大部分情况,用户只需要得到用户输入的文字,即 .get(0).key的值。所以在 TDE 的设置页面有一个开关,默认为key。key 即代表所有槽位使用 .get(0).key的值,json 则代表使用原始的格式,是一个 list,面向高级用户结合脚本使用。
  • 意图捕捉的变量还可以与脚本结合起来,完成更复杂的功能。首先,画一个对话图,并设置意图节点。
  • 这是我们已经熟悉的基本操作,让我们用脚本做一些更复杂的事吧。

2.3 捕捉实体

  • 实体提取节点可以捕捉包含一个词典里词语的输入。首先让我们拉一个实体卡片,双击编辑它。下图的例子中,这个实体节点会捕捉包含数字的语句。
  • 训练,然后试一下。
  • 点击新建词典,在系统词典的基础上创建你自己的词典。新建的词典在意图编辑器里的词典里也能看到。
  • 与意图相似,被捕捉到的实体也会被存在变量中,变量名字为实体名。我们也可以在机器人回答中用到该变量,如下:
  • 当前大部分情况,用户只需要得到用户输入的文字,即 .get(0).key的值。所以在 TDE 的设置页面有一个开关,默认为keykey即代表所有槽位使用 .get(0).key的值,json 则代表使用原始的格式,是一个 list,面向高级用户结合脚本使用。

  • 实体节点可以支持匹配多个实体,只需要在选择时多选即可,只要匹配中其中一个实体,就算匹配成功。

2.4 知识库提取节点

  • 很多用户都积累了大量的 FAQ 数据,这些 FAQ 都是相关业务问题得积累。在对话图中引入这些数据去匹配用户的输入、回答用户的问题对用户有比较大的帮忙。

  • 为了使用知识库的输入输出节点,首先需要在对话图中配置相关的 FAQ 节点。配置完节点后,可以在流程图中添加输入节点去匹配用户的问题,添加输出节点回答用户的问题。

  • 首先,给对话图关联知识库。

  • 选择某一个 FAQ 技能查看该技能。
  • 如果该 FAQ 技能的问答对满足流程图的需求,则选择配置该 FAQ 到流程图里。
  • 在流程图中增加一个 FAQ 输入节点。同时,可以设置问题的最低匹配相似度,默认为 0.9。
  • 在流程图添加一个 FAQ 输出节点
  • 训练一下,然后试一下。

2.5 万能节点

  • 万能节点会捕捉用户说的任何语句,并将该语句存放在名为 sentence 的变量中。在机器人说中,输入 $sentence (注意结尾需要有空格或符号),就可以引用用户刚刚说的话。

3. 输出节点

  • 输出节点会向用户展示内容。

3.1 机器人答

  • 机器人答节点,在输入节点处已经进行了展示。这里需要注意,在机器人答中可以输出当前图里变量,以符号起始,用包住,即可输出。如符号起始,用{}包住,即可输出。如 **{sentence}。如果需要输出 $符号,则使用 $**

3.2 知识库回答

  • 知识库回答节点,在输入节点处已经进行了展示,可以使用已有知识库中的回答进行回答。支持多选。如果有多条回答,则随机选择一个进行输出。

3.3 卡片列表

  • 卡片列表会想用户展示一个或多个卡片,上面可以有文字,图片,按钮。如果是多个卡片,则可以选择横向或者纵向排版。在用户点击按钮后,在对话框中显示用户输入了 button 上 text 的值,并在后端返回 button 的 postback 值。
  • 训练后测试一下:
  • 在卡片列表中,也支持输出图中相应的参数,与机器人答一样,使用 ${param}的格式进行输出,例子如下

3.4 上传文件

  • 上传文件节点,会在对话框生成一个可以用于上传文件的按钮,方便用户从本地上传文件到创建对话图的用户的媒体资源库
  • 上传文件节点本身是一个输出节点,上传文件后不会向后端发送消息。所以一般建议,如果要使用上传文件节点,在后面询问用户是否上传完毕,是的话在继续对话
  • 使用机器人的用户,上传的文件,会统一上传到 画对应 TDE 图的用户的媒体资源库中,方便查看。

3.5 快速回复

  • 快速回复节点,一般用于引导用户的回复。在聊天框展示可以点击的按钮。让用户使用点击动作代替输入回复。与卡片列表相似,在用户点击按钮后,在对话框中显示用户输入了 button 上 text 的值,并在后端返回 button 的 postback 值
  • 训练并测试
  • 与卡片列表相似,快速回复也支持输出图中相应的参数,使用 ${param}的格式进行输出

3.6 传送

  • 传送节点可以将对话流传送至任何一个被命名的卡片, 相当于连了一条线到传送到的节点。在下图的例子中,用户选择 No 之后会被传送到起始点。
  • 一般来说,传送节点只能选择当前图(或者 module)内,带 tag 的节点。不能跨 module 进行传送。同时传送节点,可以选择传送到某一个 module,即相当于传送到该 module 的起始节点处。

3.7 图片,视频与音频

  • 用图片,视频,以及音频节点使你的回复具有多样性。在编辑框中输入图片,视频,音频的链接。
  • 与卡片列表相似,快速回复也支持输出图中相应的参数,使用 ${param}的格式进行输出

3.8 超链接

  • 超链接节点可以在聊天框输出一个可以点击的超链接。
  • 与卡片列表相似,快速回复也支持输出图中相应的参数,使用 ${param}的格式进行输出

3.9 退出

  • 一旦对话图运行到退出节点就会停止运行。退出节点后的内容不会运行。比如在下图中,如果在模块中进入退出节点,模块外的对话图也不会运行。
  • 让我们试一下。
  • 与机器人答节点类似,可以输出当前图里变量,以符号起始,用包住,即可输出。如符号起始,用{}包住,即可输出。如 **{sentence}。如果需要输出$符号,则使用 $**

  • 一般我们推荐在图的最后使用退出节点退出,要不多重 call 有时会造成额外的输出内容

4. 运算节点

  • 运算节点不会向用户展示内容,而是通过运算影响对话图的走向。

4.1 脚本节点

  • 利用脚本节点编辑一段 Groovy,可以用来实现多种复杂的功能,比如编辑变量,检测用户回复是否满足一定条件等等。

  • 下图中的脚本是一个最简单的例子。运行后,变量 a 被赋值 2。被赋值的变量可以用来满足进入节点的条件。(详见下方 编辑变量)

  • 接下来的这个例子稍微复杂一些,该脚本会检测万能节点捕捉的用户输入是不是一个数字,并把结果存在一个叫做  isNumber 的变量里。然后我们在下面的机器人说中,用该变量告诉用户,输入是否是数字。

4.2 随机节点

  • 当对话图到达随机节点时,会随机从它通向的节点中选择一个执行。在下图的例子中,在用户说“1”后,机器人会随机从“1”,“2”,“3”中选择一个回答。

4.3 空节点

  • 空节点不会对对话图产生影响,一般将其设为传送节点的目标,使得对话图更加清晰。

4.4 存储

  • 存储节点可以将对话图中参数存储到 TDE 后端的数据库中,或者将之前上传的文件存储到数据库中

  • 下图为存储相应的参数

  • 数据库中的格式,setidtableuid行名,参数名为列名。根据这种方式,同一个 uid(即使用 bot 的用户)下,一个参数只能存储一行。如果用户需要存储多行,比如录入公司人员信息,需要多行姓名、性别、年龄等,可以将一个或多个参数设置为主键(primary key),行名将变成uid + primary_keys,这样可以存储多行数据。参数左边的钉子点亮,即设置为主键。
  • 下图为存储文件的例子,其中上传文件节点名称,应为上传文件节点的机器人说。目前可以存储的文件只支持 txt,excel 和 csv,且首行为标题,之后为每一行数据)。
  • 存储在数据库中的数据,可以通过 TDE 的 api 进行调用,根据 setid,uid 等参数,得到数据库中的数据。

  • API 如下 导出对应用户的自主数据库信息,通过存储节点存储的参数

    Parameters:

    nametypenote
    setidstringsetid,必须
    tablestringtable 信息,非必须,一般为 null
    uidstringuid,非必须
    rowstring行信息,非必须
    columnstring列信息,非必须

    返回: Map,包含 list of value,和是否成功的信息 例子:http://localhost:8082/set/exportmock?setid=ff80818170ac67440170ac686c2b0000

    返回:

    {
    "value": [
    {
    "uid": "testClient",
    "平均得分": "0.8586277365684509",
    "createtime": "2020-07-03 15:22:52",
    "机器人 id": "999217.0",
    "技能名称": "消费者 faq",
    "技能类别": "faq",
    "updatetime": "2020-07-03 15:22:52",
    "回答次数": "82414.0"
    },
    {
    "uid": "testClient",
    "平均得分": "0.9447728991508484",
    "createtime": "2020-07-03 15:22:52",
    "机器人 id": "999217.0",
    "技能名称": "共享闲聊",
    "技能类别": "faq",
    "updatetime": "2020-07-03 15:22:52",
    "回答次数": "17716.0"
    }
    ],
    "status": "success"
    }

4.5 读取

  • 读取节点可以将用户存储到后端数据库的数据,从数据库中读取出来

4.6 HTTP 服务

  • http 服务节点辅助用户访问第三方 http 服务并从服务的 json 结果中抽取内容保存在变量中。http 服务节点包含两部分内容:第一部分需要注册一个 http 服务,说明服务的 URL,访问的方法(GET,POST,PUT),服务的参数和需要抽取的内容等。第二部分是在流程图的 http 服务节点中引用第一步注册的服务;第二步引用 http 服务的同时,为了配合测试,可以设置测试数据。

  • 第一步注册服务

  • 在弹出的服务内容窗口中添加 http 服务的内容
  • 其中包括的内容有:

    • 服务名(便于在 http 节点中引用)
    • 服务状态(决定该服务是否可以被 http 节点引用)
    • 服务接口,包括访问方法和 URL
    • 服务接收参数:
    • Header
    • Params
    • Body(body 的内容目前只支持 json 格式)
    • 服务返回参数(从 http 服务的 json 返回值中抽取内容保存变量)。比如服务的返回

    json 内容如下:

    {
    "coord": {
    "lon": -0.13,
    "lat": 51.51
    },
    "weather": [
    {
    "id": 300,
    "main": "Drizzle",
    "description": "light intensity drizzle",
    "icon": "09d"
    }
    ],
    "base": "stations",
    "main": {
    "temp": 280.32,
    "pressure": 1012,
    "humidity": 81,
    "temp_min": 279.15,
    "temp_max": 281.15
    },
    "visibility": 10000,
    "wind": {
    "speed": 4.1,
    "deg": 80
    },
    "clouds": {
    "all": 90
    },
    "dt": 1485789600,
    "sys": {
    "type": 1,
    "id": 5091,
    "message": 0.0103,
    "country": "GB",
    "sunrise": 1485762037,
    "sunset": 1485794875
    },
    "id": 2643743,
    "name": "London",
    "cod": 200
    }
    名称(存储的变量名称)参数值(抽取的内容)解释
    温度$.main.temp抽取温度
    压强$.main.pressure抽取湿度
    风速$.wind.speed抽取风速
    维度$.coord.lat抽取维度信息

    参数值的抽取语法支持 JsonPath,请参考链接:https://github.com/json-path/JsonPath

  • 在第一步注册服务之后可在流程图中添加 Http 节点引用服务

  • 训练并测试一下

4.7 函数服务

  • 函数服务节点可以让用户输入一个函数脚本,方便在对话图中使用。函数节点与 http 服务节点类似,包含两个部分:第一部分需要注册函数服务。第二部分在流程图中的函数服务节点引用第一步注册的服务。

  • 第一步注册函数服务

  • 需要输入函数名和函数具体的脚本
  • 点击下一步,系统会自动提取对应的函数名和参数,可以添加或修改参数的备注名
  • 在第一步注册服务之后可在流程图中添加函数服务节点引用服务
  • 在函数节点的配置中,需要用户输入每一个参数的值,可以是具体的值,或者是对应的参数;同时用户还需输入函数的返回值,用于后续逻辑
  • 我们训练并测试一下

5. 模块

5.1 模块节点

  • 将会被重复使用的对话放入模块,以便于多次使用模块,并且让对话图更加整洁。编辑模块时,通过屏幕上方的导航条跳转到其他界面。

6. 条件和赋值


6.1 进入节点条件

  • 对于每一个节点,都可以在节点中设置进入该节点的条件。如果设置了条件,只有满足相关条件,流程才会进入该节点进行后续的流程。
  • 点开任意节点,点击中间的按钮
  • 在进入节点的条件下,点击添加条件,即可增加一个条件
  • 除了等于之外,还可以选择多种条件判断,后续会添加更丰富的判断
  • 目前支持多个条件,继续点击添加条件,可以继续添加,同时可以选择多个条件之间的关系,目前支持且与或
  • 同时支持条件的嵌套,用户如果需要将条件 A&&B 扩充成(A||C)&&B,可以在 A 条件的右上角点击加号+,这样即相当于在 A 条件外添加一个括号,同时继续添加条件

6.2 赋值

  • 对于每一个节点,都可以在节点中设置赋值。即可以在进入节点前进行赋值,也可以在节点完成后进行赋值。
  • 若需要在节点前进行赋值,点击中间的按钮,在“进入节点的参数设置”下点击“添加条件”,既可以进行赋值
  • 赋值时,可以选择多种赋值方式,如整数,字符串,参数等等
  • 若需要在节点后进行赋值,点击右边的按钮,在“进入节点的参数设置”下点击“添加条件”,既可以进行赋值

7. 企业流程模板和组合


7.1. 企业流程模板

  • 当前 TDE 为用户提供了四个企业流程模板,可以让用户在创建 TDE 技能时候选择。选择模板后,会自动载入模板数据,为用户搭建起一个完整的流程图。
  • 用户可以根据自己的需求,选取相似的模板,然后再已有的流程上进行修改,这样大幅度减少了用户画图的时间。
  • 当前有四个企业流程模板:分别为”定会议室”,“新冠问诊”,“汽车保险”和“招聘求职”
  • 鼠标浮动到对应模板上之后,可以对模板进行预览,进行聊天
  • 选择“使用该模板”,则会载入对应模板。
  • 如果用户不需要载入模板,点击右上角的“不使用模板,直接创建”,即可直接传建一个新的空白流程
  • 后续会继续添加多种类型,垂类的模板,方便不同用户使用

7.2 系统节点组合

  • 除了企业流程模板外,TDE 还为用户提供了一些简单的节点组合,方便用户进行画图。节点组合不像流程模板,体量更小,更加灵活。
  • 点击“节点”右边的“组合”,即可进入节点组合配置页面
  • 当前系统的节点组合一共有 6 个。分别是“单轮信息收集”,“多轮信息收集”,“用户输入”,“快速回复”,“卡片列表”和“随机输出”
  • 选择某一个节点组合,拖动进入画板,即进入配置页面

- 设置好,点击确定,则会自动根据用户的输入信息,生成对应的节点组合
  • “单轮信息收集”:方便用户收集单一信息
  • “多轮信息收集”:方便用户手机多个信息
  • “用户输入”:支持添加多个输入,自动添加万能节点,跳转回输入
  • “快速回复”:支持快速回复,自动添加回复对应的输入节点和万能节点
  • “卡片列表”:支持卡片,自动添加回复对应的输入节点和万能节点
  • “随机输出”:支持随机选择多个输出

7.3 用户自定义组合


  • TDE 同时支持用户自定义组合,与系统预设组合不同,用户自定义组合不支持配置选项。用户选择了哪些节点存入,使用时自动复制一份到对应的画布上。
  • 若要使用自定义组合,首先选择需要保存的节点列表,按住 shift,逐一选择节点。或者直接使用 multiselect 选择节点。选中的节点会高亮展示
  • 点击右键,选择“Addnewgroup”,然后为自定义组合命名(非常重要,方便后续找到自己需要的组合),即保存到后台
  • 在组合页面,选中自定义,即可看到自己保存的自定义组合。
  • 拖动对应的组合到画布上,即复制了一份节点列表到画布