Google Dialogflow 中的多租户

Multitenancy in Google Dialogflow

我公司目前正在尝试使用 Google Dialogflow 构建多租户聊天机器人。 我们正在探索可用的工具,但有关该主题的文档仍然很少。在这种情况下,我们对多租户的理解和定义将使我们能够根据最终用户工作的公司而拥有略有不同的对话流程。例如:

公司 Foo 的用户 A 想要订购冰淇淋。 Company Foo 提供一组口味(巧克力、香草、薄荷)并且只供应冰淇淋甜筒,但允许用户在他们的冰淇淋中添加装饰物(巧克力片、糖屑)。

Bar公司的用户B想点一份冰淇淋。 Company Bar 提供一套口味(草莓、开心果、柠檬),供应冰淇淋甜筒和杯子,但不提供装饰。

两个用户应该进行完全相同的对话,除了可用的口味和冰淇淋容器列表将取决于租户。此外,还应该有 扩展 部分对话流程的选项,例如公司 A 提供添加装饰的能力。两个对话应该以相同的意图开始和结束(我想要 ice-cream/I 准备好付款)。

我们的次要目标是尽量减少 Dialogflow 端的冗余:理想情况下,只有一个代理,理想情况下,不需要重复的意图不应重复。

我们的架构不是客户端驱动的;客户端总是被我们的后端服务器 (C#) 拦截,它负责处理与 Dialogflow 的互操作。我们认为这为我们提供了更大的灵活性并更好地与我们现有的堆栈集成。

我们已经确定了这些有前途的功能:

但我们还没有找到明确的路径。我们也在考虑可用的替代方案,例如 Microsoft 的 BotBuilder、Amazon 的 AWS Chatbot 和开源的 ChatterBot。

简而言之,在这方面有最佳实践吗?如果没有,欢迎任何关于此事的想法和想法。

首先我要说的是,目前还没有完善的指导方针,聊天机器人世界正在不断发展。

我个人认为有两种方法:

  • 基于平台:聊天机器人对话建立在平台上(即DialogFlowChatfuel, 等.. 很多)它提供了 NLP 功能,一种对话设计器,指标可能和(主要是所有平台)添加用于集成后端的 webhook 的可能性
  • 基于框架:聊天机器人建立在支持design/development/execution 代码中的对话。

在第一种情况下,使用 DialogFlow 有几个优势,但您有 2 个主要限制:云依赖(所有用户流量都通过 Google)和对话设计的灵活性有限。
如果你实现了保持一个对话流,那么你的 webhook 可以按需填充数据(即不同的风格,不同的选项),那是非常可行的。
您的对话还可以包含您通过事件激活的分支(添加装饰)(如果公司数据具有特定标志,则从 webhook 生成),这也是可行的,但它开始使对话变得更加麻烦。

在第二种方法中,你有更多的灵活性(所有对话流都在你的代码中)但显然你需要 'provide' 缺少的功能,例如为 NLU 集成 LUIS 等
Rasa 如果您对这种方法感兴趣的话,它是一个很好的框架:它基于 Python 并提供内置的 NLU 功能以及通道集成。