如何实现具有多个工作空间的 watson 对话

How to implement watson conversation with multiple workspaces

在网络研讨会中,它提到了使用多个对话工作区来处理项目的不同主题(例如,功能性对话与题外话)。我们应该如何实现这个设计?

假设我们有两个工作区,一个是功能性主题,另一个是题外话。如何确定请求应该进入哪些工作空间以及逻辑?

这个判断逻辑应该在服务器后端还是在工作区逻辑中实现?

谢谢。

您使用要分类的内容创建第一组意图。其中一个意图应该是 "Offtopic" 并保留您所有的题外话问题。

第二个工作区只是您的题外话,但分解为相关主题。

当您拨打电话并获得 Offtopic 时,请调用第二个工作区。它应该 return 题外话的性质,以便您可以对其采取行动。

您必须 test/tweak 设置您的主要意图,以免干扰主题内容。例如,如果对话涉及销售体育用品,那么与体育相关的题外话可能更难捕捉。

此时您可能需要考虑保密因素。

向我建议并且我目前正在试验的另一种方法是拥有一个主路由工作区和可能的多个应用程序工作区。在第一个实例中,用户的输入进入主控,主控具有高级意图,确定要路由到哪个应用程序工作区。应用程序工作区的意图可以分解为更多细节。

微妙之处在于将所有后续输入并行发送到选定的应用程序工作区和主路由器。与前面描述的顺序方法相比,这种方法的潜在优势在于主工作区可以争夺控制权,而不必因为离题或信心不足而放弃控制权。这意味着除了允许集中偏离主题之外,您还可以使用与初始路由相同的 intent 在 master 中获得到其他工作区的动态路由。

我是通过让编排层将会话作为一组上下文来管理的,就像这样

{
   currentWs: xxxx,
   contexts:  {
      ws_idn: {}, // basically an array of conversation contexts,
      ....       // keyed on workspace_id's
   }  
}

输入被发送到主工作区和被主工作区标记为当前的工作区(连同该工作区的相关上下文对象)。您可以在多个聊天机器人应用程序之间无缝来回切换,而不会丢失其中任何一个的上下文。