【问题标题】:DialogFlow: controlling intent identification upon context conflictDialogFlow:在上下文冲突时控制意图识别
【发布时间】:2018-12-09 16:05:15
【问题描述】:

我正在构建一个具有多个意图的 DialogFlow 代理,其中一些具有冲突的变量,并且我正在努力创建一个干净的对话流 - 特别是围绕在意图之间来回移动的区域。

例如,假设我支持提供有关天气和航班的信息,我为每个人构建了相应的意图。考虑以下对话框:

  • 用户:我想订今天的机票。
  • 代理:去哪里?
  • 用户:罗马的天气怎么样?
  • 特工:在罗马是 21°C。
  • 用户:那就是罗马。

此时,我希望飞行意图得到识别,并获取“罗马”作为参数,以及之前保存的“今天”参数。 但是,我无法判断系统是否会识别航班或天气意图,因为这句话可能同时适用于两者 - 取决于上下文。

我通过为每个对话主题定义一个主要和 2 个与上下文相关的参数意图(即以航班作为输出上下文的航班、以航班作为输入和输出上下文的航班时间、以航班作为输入和输出上下文,天气也一样),通过将每个上下文的生命周期设置为 1,并在其他意图完成后在代码中恢复它 - 以保留已填充的插槽,并支持诸如此类的短语作为“罗马”并理解它们是上下文的。我还考虑过动态更改意图优先级,但不确定是否可行。

话虽如此,我觉得这是我应该从基础设施中开箱即用的东西。我指的是类似堆栈的意图优先级,因此最后一个未实现的意图上下文将获得最高优先级。大家有遇到过这样的问题吗?我是否缺少一些可以帮助我更自然地实现这种行为的关键功能?也许是一种干扰意图识别的方法?

【问题讨论】:

    标签: dialogflow-es google-assistant-sdk


    【解决方案1】:

    我认为使您的方法绊倒的是对话不一定类似于堆栈,并且 Intent 在 Dialogflow 模型中没有“实现”。意图只是匹配用户所说的,如果合适的话,可以根据上下文缩小范围。能够设置上下文可以让您确定如何处理用户响应的方向,但您仍然可以使用这些输入来确定用户响应的内容。

    通常,我会保留一个具有参数的长寿命上下文,这些参数仅维护我想要保留的所有状态,从而使用户朝着他们的目标前进。每次用户说什么时,我可能会根据较短的上下文和触发的实际 Intent 更新该状态。我在很大程度上避免使用后续意图,因为它们最终会成为重复的老鼠窝。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-31
      • 2023-04-07
      相关资源
      最近更新 更多