未来的计划是让 Assistant 支持多种技能以及自定义技能。暂时作为数据_henrik https://stackoverflow.com/a/55999573/1167890提到,您可以使用V1 API来调用每个技能。
但拥有多种技能仍然存在挑战,这可能会给您一些见解。
这些是您可以采取的一些方法(在某些情况下名称是虚构的:)。
喷洒并祈祷
在这种方法中,您将用户话语发送到所有工作区,并选择得分最高的一个。
如果您有大量意图 (>1,000) 并且这些意图之间存在明显差异,则需要此选项。这也是通话费用最高的。
Gateway
在此设置中,您拥有顶级技能。这试图了解每个问题应发送到何处的意图。然后,您将其建议的第二项技能称为其返回的意图。
如果您有大量意图但主题相似,但不够相似而无法分组到单个技能,则此方法有效。
Router
与网关类似,除非您确定了要路由给您的最终技能,然后只转到该技能。如果该技能不理解后面的问题,则会将其路由回顶级技能以找出它应该去的地方。
如果您的客户有明确的目的地路径,那么这种方法很有效。因为他们倾向于在同一领域提出所有问题。
Graph
与路由器类似,除了当子技能不理解该人询问的内容时,它不会返回到顶层,而是尝试找出哪些其他子技能与自身有共同的关系(如果它不能)它返回到顶部)。
这有助于多种技能可能具有相似的意图,但在已经提出的其他问题的背景下,您会选择一种技能而不是另一种技能。
Chain
在链设置中,您尝试回答第一项技能中的用户问题。如果你不能,那么你就转向你的第二个技能,然后依此类推。
在这种情况下,您的意图按照已知频率的顺序映射。
如果您的意图非常相似,但您知道人们提出的最常见问题,则此方法很有效。但它是最难实施和维护的之一。
其他要点。
首先,每项技能都需要一个上下文对象。您无法跨技能共享上下文对象的系统部分。如果您使用的是 Premium 或 Watson Assistant Plus,那么这将在技能本身内进行处理(因此您只需存储对话 ID)。
“网关”、“喷雾和祈祷”和“链”失去了在没有认真工作的情况下进行复杂对话流的能力。
如果您计划从一项技能到另一项技能的一次性调用,您可以使用云函数来实现这一点。它降低了复杂性,并将逻辑置于应用程序层之外。我实现了这样的事情我的语言翻译示例 https://sodoherty.ai/2019/03/30/multi-lingual-chat-bot-with-cloud-functions/.
通过使用技能而不是助手,您将失去进行基于版本控制的部署的能力。您可以创建多个助手来解决这个问题,但这会让事情变得更加混乱。