这应该是一个常见的问题,但我找不到任何讨论它的来源。相反,关于发送多个响应到单一请求的讨论却很多。
在人与人之间的聊天中,常见一种风格,即A迅速发送第二条消息来补充或纠正第一条消息。这种方式也经常被尝试用于与聊机器人的交互,例如:
机器人:我们应该把披萨送到哪里?
用户:123 main street sprnigfelid
用户:springfield
机器人:(对输入#1的响应)
机器人:(对输入#2的响应)
现在的问题是,如果机器人足够聪明,能够识别拼写错误,或者足够开放地接受来自第一个输入的拼写错误,对话将如下进行:
用户:123 main street sprnigfeld
用户:springfield
机器人:好的,123 Main St., Springfield。你在哪个州?
机器人:明白了,我会送到123 Main St., Springfield, Springfield。这个位置正确吗?
还有许多其他情况和方式,机器人可能会误解这些快速的多重输入,而双重响应会让用户感到困惑,不知道对话进行到哪里了。
那么,有没有人尝试过处理这种情况呢?
我正在寻求处理这种情况的一般指导,但如果有人有具体的答案,我使用的是用户和Lex机器人之间的PHP代理。我使用这个代理来验证和解析传入的消息,然后再将它们传递给Lex。我还存储会话信息。我尝试过存储一个输入计数#,以尝试检测在发送第一个响应之前是否有新的输入进来。
然而,似乎PHP可能会将第二个输入排队,直到第一个输入完成,因此我的输入计数#从未发生变化。所以即使用户发送了许多快速输入,我的机器人也会对每一个做出响应。
回答:
当前的聊机器人开发系统没有机制(至少没有明确的机制)来处理这种情况(如果我错了,请纠正我)。通常是基于规则的问答。也同意将输入延迟发送给聊机器人不是一个好的普遍解决方案。不过,你可以做的是创建一个包装器来检查这种情况。它可以按以下方式工作:
机器人:我们应该把披萨送到哪里? 用户:123 main street sprnigfelid(你将第一个输入发送给聊机器人) 用户:springfield(你将第二个输入发送给聊机器人,你记下在第一个答案之前发送了两个输入) 机器人:(对输入#1的响应)(你收到答案,但你知道还有第二个输入,你等待第二个答案) 机器人:(对输入#2的响应)(你比较来自聊机器人的答案 - 它们是否相同?)
棘手的部分是比较答案是否“相同” – 如果你知道聊机器人是用地址来响应的,你可以比较地址。你还可以通过比较两个输入消息来检测用户是否立即在修正拼写错误 – 如果是这种情况,你可以尝试完全跳过第二个输入到机器人,并使用第一个答案的对话上下文继续对话(大多数聊机器人工具包都支持这种操作)。
总的来说,我认为这通常不是用户与聊机器人交流时遇到的主要问题。在这个特定例子中,聊机器人给出了两个答案,但我认为用户理解了并且没有感到困惑 – 我认为这是聊机器人的主要目标。