bot framework/LUIS - 当服务 运行 在多台机器上时对话上下文丢失

bot framework/LUIS - conversation context is lost when service running on multiple machines

我们使用 MS 机器人框架在本地(不是 Azure)部署了一个机器人。目前该服务 运行ning 在三台机器上,所有机器都服务于单个 api 端点。当我们只在一台机器上使用 运行ning 服务时,一切正常。但是,如果我们在所有三个上都 运行 它,对话上下文可能会丢失。例如,这是我们的流程:

  1. 用户说他们想做 x
  2. 机器人匹配正确的 LUIS 意图,并询问更多信息
  3. 用户提供必要的信息(IP地址)
  4. Bot 运行 是一种查找他们想要的信息并将其 returns 提供给他们的方法。我们通过 context.Wait().
  5. 来做到这一点

如果我们在多台机器上使用 运行ning 服务,有时会发生这种情况:

  1. 机器 A 处理步骤 1 和 2
  2. 机器 B 上的控制器获得用户在步骤 3 中提供的答案,我假设因为它没有机器 A 拥有的对话上下文,所以它将该文本发送到 LUIS 而不是调用应该是的方法叫。 LUIS 没有与 IP 匹配的意图,因此发生错误。

当服务 运行 在多台机器上运行时,维护对话上下文的最佳方法是什么? Context.Forward? And/or 其他想法?

谢谢!

有点奇怪的问题。 LUIS 运行s 的方式是它首先检查 Intent,然后找出与 Intent 相关的实体,从而为我们提供响应的预测。 无论您 运行 在本地主机中使用什么服务,您都必须记住,azure cloud.The SDK 中的关键语言处理器 运行 只是实现。这样它可以简化聊天界面(在您的情况下是机器人模拟器)和 LUIS 应用程序服务(MS 认知服务)之间的通信。 我仍然不清楚你提到的这个架构。

这个问题的解决方案原来是使用非内存状态存储。感谢 Eric Dahlvang 指出这一点。我以为就是这样,但后来认为它一定不是,因为它有时与处理对话的多台机器一起工作,有时与内存状态存储无关。仍然不清楚为什么它有时有效而不是其他。 (如前所述,一个复杂的问题是我无法在出现行为的环境中进行调试,因此我依赖日志记录来查看发生了什么。 我正在查看的日志记录可能具有误导性。我想不出 如何 它可能会产生误导,但这是可能的,这是一种可能的解释。)