gpt4 book ai didi

dialogflow - 如何使用DialogFlow触发意图?

转载 作者:行者123 更新时间:2023-12-01 11:16:54 30 4
gpt4 key购买 nike

我与dialogflow进行了交谈,以选择最喜欢的饮料类型,然后根据饮料的类别,选择跟进问题(即跟进意图)。

在“意图”选项卡下,我具有以下意图:

  • 默认欢迎意图
  • 最喜欢的饮料意图
  • 咖啡意图
  • 跟进
  • 软饮料意图
  • 跟进
  • 果汁意图
  • 跟进

  • 我在“最爱喝饮料的意图”中使用了训练短语,并询问:

    “你最喜欢的饮料是什么?”

    并将响应存储在实体@drink中。

    但是我不知道如何根据用户的响应触发意图“软饮料”,“果汁”或“咖啡”意图。如果我正在编写代码,则将使用switch语句或if / else,但该问题不适用于此处。

    我不确定是否必须使用实现内联编辑器,还是可以从Intent UI中执行此操作。

    谢谢

    最佳答案

    通常,将Intents视为捕获用户可能在说什么。尽管Intent也有答复,但这不是其主要目的。

    根据您要尝试执行的操作,有几种方法。所有这三个都需要执行代码,您可以使用内置编辑器执行该代码,或者(更好)在您的控制下使用Webhook

    如果要使用Intent确定如何回复

    这实际上不是最好的主意,但是有可能。在您的履行代码中,您将拥有一个针对用户选择的参数的switch语句。基于此,您将在实现中触发followup event。您的其他Intent的Event部分将填充可能的事件,并且系统将选择触发哪个事件并将其用于实现/响应。

    可能是您想要的东西有点模糊。

    更新以根据评论中的问题进行澄清。直接发送事件会触发另一个Intent。有时这是您想要的,但是有些例外。大多数时候,您想使用以下方法之一。特别是,您应该记住,意图主要是用来表示用户正在尝试做的事情(他们“打算”去做的事情),而意图主要是由他们在说什么。意图可以很好地捕捉人们说话的复杂方式,而不是迫使他们进行类似于电话树的“对话”。

    如果您只是想以不同的方式答复每个可能的用户响应

    您可以使用实现Webhook代码来确定应将什么响应发送给用户。您没有指明正在使用的库,但是通常您会编写代码,该代码将根据所选的饮料类型确定应向用户发送哪些消息,并将其作为语音和/或显示文字显示在response

    在这种情况下,您不会使用其他特定于饮料的Intent。不需要它们。除非...

    您希望以不同的方式答复每个用户的响应,并且后续对话可能会有所不同

    请记住-意图实际上最适合于指定您希望用户说的话。不是您希望回复的内容。因此,根据他们选择的是“咖啡”(您可能会问他们想要多少糖)还是“果汁”(您可能会问他们是否想要一根吸管),您可能会有不同的对话。

    在这种情况下,您仍然会像上一个情况一样进行操作(使用您的成就在您的回复中包含定制的消息,可能会提示他们输入该信息),并在回复中包含一个Output Context,指示他们的选择。您应该将此操作作为响应的一部分,而不是在Intent中进行设置,因为您要为每种饮料类型命名不同的名称。

    然后,您可以根据您今天希望用户的需求创建针对每种饮料类型的Intent。对于特定于Coffee的内容,您可以将Input Context设置为要求已设置coffee context。苏打水环境(如果指定了苏打水),依此类推。

    更新,因为您在评论中指出这听起来像是您感兴趣的途径。

    在这种情况下,您将按照描述进行操作(几乎):

  • 使用类似下面的代码获取drink参数的值
    const drink = request.body.queryResult.parameters.drink;
  • 在此基础上进行切换,并在每种情况的主体中设置我们将答复的内容以及应记住的上下文。像这样的伪代码,也许是:
    switch( drink ){
    case 'coffee':
    context = 'order_coffee';
    msg = 'Do you want sugar with that?';
    break;
    case 'soda':
    context = 'order_soda';
    msg = 'Do you want a bottle or can?';
    break;
    case 'juice':
    context = 'order_juice';
    msg = 'Would you like a straw?';
    break;
    }
    // Format JSON setting the message and context
  • 然后,您将具有基于两件事的组合触发的Intent:
  • 上下文是什么
  • 用户所说的

  • 例如,您需要一个上下文(我们将其称为“coffee.black”),如果 order_coffee上下文处于活动状态,并且用户使用“否”或“仅黑色”或其他有效组合回答了您的问题,则将触发该上下文。

    但是,如果 order_juice上下文处于活动状态并且用户回答“否”,则您需要一个不同的上下文(例如,“juice.nostraw”)。

    如果在 order_soda上下文处于活动状态时用户说“否”,那根本就没有多大意义,因此您希望尝试将它们引导回手头的主题。
    记住,意图是针对用户所说的。不是您的语音代理所说的。您的代理通常不会“触发”意图-用户会根据自己的意图触发它。

    在我给出的示例中,可能还有其他对这些上下文均有效的Intent。例如,您可能有一个对 order_coffee上下文有效的“coffee.sugar”意图,并回答他们说“是”。还有一个人可能会说“Just cream”。他们可能还会说很多其他话,但是对您的经纪人来说,重要的是他们给您的指示必须与订购咖啡有关。

    关于您的原始问题...

    (要回答您原来的,现在已编辑的问题:是的,您可以在实现中创建Intent。但是,您几乎肯定不想这样做。)

    关于dialogflow - 如何使用DialogFlow触发意图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49715353/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com