【问题标题】:Dialogflow: is there a way to prevent first-level intents to get triggered?Dialogflow:有没有办法防止触发一级意图?
【发布时间】:2025-12-02 03:25:02
【问题描述】:

我有一组可以触发的意图。

  • 打开灯
  • 关灯
  • 关门
  • 开门

对于每个意图,我都有一组后续意图,例如

  • 打开灯
    • 选择光源(输入上下文light-on-followup
    • 选择光源后备(输入上下文light-on-followup

我想确保如果用户触发了turn light on 意图,并且我问他which light source do you want to turn on?,他可以触发select light source,或者如果话语不匹配,则触发了回退意图。

我面临的问题:如果用户在turn light on 对话框中说turn light off,则不会触发回退意图,但用户会触发更高阶的意图turn light off。我想防止这种情况发生。有没有办法做到这一点?

我将输入上下文用于回退意图,但显然对更高阶意图的高置信度会导致 Dialogflow 改为触发更高阶意图。

【问题讨论】:

    标签: bots dialogflow-es actions-on-google dialogflow-es-fulfillment


    【解决方案1】:

    首先 - 你确定要这个吗?

    想象以下场景:

    User:  Turn the light on
    Agent: Which light do you want to turn on?
    User:  Oh, no, I meant turn it off
    

    这不是一次可能发生的不寻常的对话。如果用户改变主意,或者意识到他们的意思是别的,他们应该能够这样做。一个好的 VUI 设计原则是用户可以随时向任何方向进行对话,您应该尽可能地允许他们这样做。

    Dialogflow 有意以这种方式工作,通过尝试查找在整体上下文中最有意义的匹配项,而不是默认情况下强迫用户走窄路。

    但是,如果你真的想按照你的要求去做,你可以尝试这样的事情:

    • 为您今天期望用户的所有根级 Intent 设置一个输入上下文(在此示例中我们称之为 root
    • 当根级 Intent 被识别时,将其输出上下文设置为 root 的生命周期为 0,这意味着它们都不匹配。
    • 对于任何后续 Intent 的输出上下文,再次设置 root 上下文,这样就只能识别根级 Intent。

    【讨论】:

    • 感谢您的提醒。我完全理解你来自哪里。也许我选择的示例是通用的,但假设您在一个更重要的对话框中。例如设置并重复您的密码。在所有其他对话框中,您希望能够更改回*意图,但在这个特定的对话框中,它不应该被允许,例如只有取消才能停止对话。我想我会尝试检查我的履行端点中的当前上下文并手动重定向到另一个意图。但我实际上可能只是遵循你的指导方针!谢谢!
    最近更新 更多