使用聊天机器人处理用户的换行符或多行响应?

时间:2018-11-14 09:29:52

标签: chatbot watson-conversation

有没有一种已知的方式来处理用户在多行上写响应的问题? -最好在客户端处理这种情况吗?例如,检查用户是否仍在打字并且在两次响应之间有延迟,或者可以在Watson上以某种方式处理?

一个例子是:

启动:

What's Your Name?

用户:

My name is 
Nour

这些是用户在2行上的两条独立消息。

2 个答案:

答案 0 :(得分:1)

最好始终在一个请求中将完整的“话语”发送给Assistant,因为该处理在对Assistant的多个拆分调用中不起作用。否则,您将需要对上下文变量进行一些复杂的逻辑处理,或者向用户询问他们的名字(如果他们说出“我的名字是”而没有实际名字)。

通常,客户端UI将等待用户按下Enter键,然后再将语音发送给Assistant。因此,您可以确定他们已经输入了完整的语音。

但是,也许如果他们说“我的名字是”,您可能有一个检查名称的意图和一个提取名称的实体,以及一个对话框节点,如果找到该意图,则该对话框节点具有一个确保该实体为也发现了。这样,如果他们确实说“我的名字是”而没有名字,则机器人会询问他们的名字。

答案 1 :(得分:0)

DSeager的方法可能是您所举示例的正确方法。原因是在您的总体问题中,您有一个实体。

实体实体在哪里呢?例如:

两个意图。

  • 支付我超速的车费
  • 支付我的停车罚款

在这里,您正在使用意图来理解答案,而无需实体。有些人会争论Intent-> Entity方法,但是根据您的解决方案,它通常无法很好地扩展,而仅是一个意图答案。

因此,您的用户现在输入以下内容:

How do I pay my 
parking fine

实体解决方案在这里实际上并不起作用,因为您没有他们要支付的上下文。

一种方法。

1。发送“我该如何付款”到WA。假设您已经对系统进行了良好的培训,那么它应该以低置信度或不相关的方式返回。

2。在回应用户之前,请先查看是否已缓存其他语音以进行发送。如果有,则附加某种标记并发送。例如:

How do I pay my !! parking fine

这将返回正确的答案。


但是请稍等,如果他们这样做呢?

How do I pay my parking fine?
Where do I pay it?

两个都是有效的问题,但是第二个将失败,您不能将其附加到前一个。

在这种情况下,当答案显示时,将设置一个$anaphora上下文变量。然后,如果您获得低置信度/不相关的响应,请尝试附加附加$anaphora值来进行询问。

例如:

Q: How do I pay my parking fine? 
A: <Answer>  $anaphora = "parking fine"
Q: Where do I pay it? 
A: <Irrelevant>
Q: parking fine !! Where do I pay it?

这两项都需要在应用程序层进行一些工作。