bot framework/LUIS - 当服务 运行 在多台机器上时对话上下文丢失
bot framework/LUIS - conversation context is lost when service running on multiple machines
我们使用 MS 机器人框架在本地(不是 Azure)部署了一个机器人。目前该服务 运行ning 在三台机器上,所有机器都服务于单个 api 端点。当我们只在一台机器上使用 运行ning 服务时,一切正常。但是,如果我们在所有三个上都 运行 它,对话上下文可能会丢失。例如,这是我们的流程:
- 用户说他们想做 x
- 机器人匹配正确的 LUIS 意图,并询问更多信息
- 用户提供必要的信息(IP地址)
- Bot 运行 是一种查找他们想要的信息并将其 returns 提供给他们的方法。我们通过 context.Wait().
来做到这一点
如果我们在多台机器上使用 运行ning 服务,有时会发生这种情况:
- 机器 A 处理步骤 1 和 2
- 机器 B 上的控制器获得用户在步骤 3 中提供的答案,我假设因为它没有机器 A 拥有的对话上下文,所以它将该文本发送到 LUIS 而不是调用应该是的方法叫。 LUIS 没有与 IP 匹配的意图,因此发生错误。
当服务 运行 在多台机器上运行时,维护对话上下文的最佳方法是什么? Context.Forward? And/or 其他想法?
谢谢!
有点奇怪的问题。 LUIS 运行s 的方式是它首先检查 Intent,然后找出与 Intent 相关的实体,从而为我们提供响应的预测。
无论您 运行 在本地主机中使用什么服务,您都必须记住,azure cloud.The SDK 中的关键语言处理器 运行 只是实现。这样它可以简化聊天界面(在您的情况下是机器人模拟器)和 LUIS 应用程序服务(MS 认知服务)之间的通信。
我仍然不清楚你提到的这个架构。
这个问题的解决方案原来是使用非内存状态存储。感谢 Eric Dahlvang 指出这一点。我以为就是这样,但后来认为它一定不是,因为它有时与处理对话的多台机器一起工作,有时与内存状态存储无关。仍然不清楚为什么它有时有效而不是其他。 (如前所述,一个复杂的问题是我无法在出现行为的环境中进行调试,因此我依赖日志记录来查看发生了什么。
我正在查看的日志记录可能具有误导性。我想不出 如何 它可能会产生误导,但这是可能的,这是一种可能的解释。)
我们使用 MS 机器人框架在本地(不是 Azure)部署了一个机器人。目前该服务 运行ning 在三台机器上,所有机器都服务于单个 api 端点。当我们只在一台机器上使用 运行ning 服务时,一切正常。但是,如果我们在所有三个上都 运行 它,对话上下文可能会丢失。例如,这是我们的流程:
- 用户说他们想做 x
- 机器人匹配正确的 LUIS 意图,并询问更多信息
- 用户提供必要的信息(IP地址)
- Bot 运行 是一种查找他们想要的信息并将其 returns 提供给他们的方法。我们通过 context.Wait(). 来做到这一点
如果我们在多台机器上使用 运行ning 服务,有时会发生这种情况:
- 机器 A 处理步骤 1 和 2
- 机器 B 上的控制器获得用户在步骤 3 中提供的答案,我假设因为它没有机器 A 拥有的对话上下文,所以它将该文本发送到 LUIS 而不是调用应该是的方法叫。 LUIS 没有与 IP 匹配的意图,因此发生错误。
当服务 运行 在多台机器上运行时,维护对话上下文的最佳方法是什么? Context.Forward? And/or 其他想法?
谢谢!
有点奇怪的问题。 LUIS 运行s 的方式是它首先检查 Intent,然后找出与 Intent 相关的实体,从而为我们提供响应的预测。 无论您 运行 在本地主机中使用什么服务,您都必须记住,azure cloud.The SDK 中的关键语言处理器 运行 只是实现。这样它可以简化聊天界面(在您的情况下是机器人模拟器)和 LUIS 应用程序服务(MS 认知服务)之间的通信。 我仍然不清楚你提到的这个架构。
这个问题的解决方案原来是使用非内存状态存储。感谢 Eric Dahlvang 指出这一点。我以为就是这样,但后来认为它一定不是,因为它有时与处理对话的多台机器一起工作,有时与内存状态存储无关。仍然不清楚为什么它有时有效而不是其他。 (如前所述,一个复杂的问题是我无法在出现行为的环境中进行调试,因此我依赖日志记录来查看发生了什么。 我正在查看的日志记录可能具有误导性。我想不出 如何 它可能会产生误导,但这是可能的,这是一种可能的解释。)