意图、事件和上下文的命名约定

Naming conventions for intents, events and contexts

我想知道 Dialogflow 中是否有针对意图、事件和上下文的命名约定。

如果有 none,那么如果您分享您自己的命名约定,我将不胜感激!

老实说,真的没关系!只要它易于在代码中复制并为可能在您的代理上工作的任何其他人清除 see/understand,那么一切都很好。一般来说,尽管使用典型的编码符号(例如 CamelCase)可能不是一个坏主意。

不幸的是,没有,而且系统足够灵活,所以这无关紧要。选择有意义的名字 (duh)。

尽管大多数示例都使用它,但我避免 在名称中使用 space。我把它们更像是函数名,所以里面有一个 space 破坏了我的审美。

我倾向于根据他们正在进行的对话的哪一部分对意图进行分组,这通过使用设置的上下文来管理,并用点分隔部分和子部分的名称,所以它看起来很模糊包名称。我会将 Intents 命名为

calculate.fallback
calculate.number
calculate.operation
fallback
welcome

其中 "calculate" 个都有 "calculate" 的输入上下文。

最重要的是,请记住 Intents(以及它们的名称)代表 用户所说的而不是您的代码所做的那。这是它与函数名的最大区别。

我将从基于服务的公司项目的角度来回答这个问题。

在我的项目中,我们使用了与内置 small-talk 意图类似的意图命名约定,因为它易于理解和分类。像 FAQ.Comapny.your_questionBuy.Drinks.coffee
(出于某些未知原因,我们将主要意图类别的第一个字母大写,在 small-talk 中,所有字母都应该小写)。

对于事件,我们对通用常量使用了类似的符号,例如 INVOKE_EVENT

对于参数和上下文,我们使用 snake_case 即 coffee_cost

基本上,只要易于理解和复制,这并不重要。但是你应该始终有一个你和你的整个团队在整个项目中遵循的基本结构。

我发现'it doesn’t really matter as long as it‘s easy to understand for others'有点矛盾。如果有命名约定,人们将更容易理解新的 Dialogflow 机器人。


这是我的看法:

意图

我使用点来分组意图并暗示层次结构。意图名称的第一部分最好只是一个词,可以清楚地表明意图的主要主题。例如 name 将是一个接收用户名作为输入的意图。 name.confirm 将是收到名称确认的后续意图。 name.confirm.yes 将是用户已确认的意图。

这是在收集联系人数据的机器人的上下文中,因此隐含了 input 函数。在混合类型更多的聊天机器人中,您可以将意图类型添加为第一个词,以更好地对您的意图进行分类。例如。 input.name.confirm.yesFAQ.shipping.overseassmalltalk.agent.location ('Where are you?').

我对回退意图使用相同的方法:fallback.name 将是当机器人正在等待用户输入他们的名字但不理解答案时触发的回退意图。

上下文

对于上下文,我使用 snake case。例如 awaiting_email 将是当机器人等待用户输入他们的电子邮件地址时设置的上下文。获得电子邮件地址后,我会设置一个上下文 email 来转发信息,以便其他意图可以将其用作上下文。或者,如果我正在收集有关用户的几条数据,我将设置上下文 user 并且其他意图可以访问某些参数,例如通过 user.email.


我也制作了有关该主题的视频:https://youtu.be/kgKuS2RJcy4

很明显,每个人的角度都略有不同,因为他们的应用领域不同。我相信我们最终会达到一个共同的标准!