【问题标题】:Dealing with newlines or multi line responses from a user with a chatbot?使用聊天机器人处理用户的换行符或多行响应?
【发布时间】:2018-11-14 09:29:52
【问题描述】:

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

一个例子是:

机器人:

What's Your Name?

用户:

My name is 
Nour

这些是用户通过 2 行发送的两条独立消息。

【问题讨论】:

    标签: chatbot watson-conversation


    【解决方案1】:

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

    通常,客户端 UI 会等待用户按 Enter 键,然后再将话语发送给 Google 助理。所以你可以确定他们已经输入了完整的话语。

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

    【讨论】:

      【解决方案2】:

      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?
      

      这两个都需要在应用层做一些工作。

      【讨论】:

        猜你喜欢
        • 2018-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多