【发布时间】:2018-11-14 09:29:52
【问题描述】:
是否有已知的方法来处理用户在多行中编写响应? - 最好在客户端处理这种情况吗?比如检查用户是否仍在打字并且响应之间有延迟,或者这是否可以在 Watson 上以某种方式处理?
一个例子是:
机器人:
What's Your Name?
用户:
My name is
Nour
这些是用户通过 2 行发送的两条独立消息。
【问题讨论】:
标签: chatbot watson-conversation
是否有已知的方法来处理用户在多行中编写响应? - 最好在客户端处理这种情况吗?比如检查用户是否仍在打字并且响应之间有延迟,或者这是否可以在 Watson 上以某种方式处理?
一个例子是:
机器人:
What's Your Name?
用户:
My name is
Nour
这些是用户通过 2 行发送的两条独立消息。
【问题讨论】:
标签: chatbot watson-conversation
最好始终在一个请求中将完整的“话语”发送给 Google 助理,因为该处理无法跨多次拆分调用 Google 助理进行。否则,您将需要对上下文变量执行一些复杂的逻辑,或者如果用户说出“我的名字是”而没有实际姓名,则向用户询问他们的姓名。
通常,客户端 UI 会等待用户按 Enter 键,然后再将话语发送给 Google 助理。所以你可以确定他们已经输入了完整的话语。
但也许如果他们确实说出“我的名字是”,您可能会有一个检查名称和提取名称的实体的意图,以及一个对话节点,如果找到该意图,则该节点有一个插槽,可确保实体是也发现了。这样,如果他们说“我的名字是”但没有名字,机器人会询问他们的名字。
【讨论】:
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?
这两个都需要在应用层做一些工作。
【讨论】: