从 Rasa 操作获取之前的意图名称?

ara*_*ao6 3 rasa-core

我有一个名为的意图intent_yes,它在几个不同的会话流中共享。当用户说“是”或“是”等时,它将调用我的 webhook / Rasa 操作。我需要知道他们对什么表示同意。我们如何从 Rasa webhook 操作中获取之前的意图名称?

Wal*_*ale 5

我想我同意OP的观点。有时,某个意图会因完全不同的原因而被激活。

例如,你有“为什么?”之类的词。“如何?” 对于某些特定的意图,其相应的动作会被无差别地触发。如何防止在最不可能的情况下触发此类基本表达式?

当然,为“为什么”和“如何”的每个可以想象的对话轮流写故事是效率不高的。

这就是为什么我想要一个解决方案来检查对话的状态并确定在运行之前是否已触发特定意图。

汤姆上面的解决方案是有道理的。我会尝试一下。

更新:这是我的解决方案:

def get_latest_event(events)
  latest_actions = []
    for e in events:
        if e['event'] == 'action':
            latest_actions.append(e)

    return latest_actions[-2:][0]['name']

get_latest_event(tracker.events)
Run Code Online (Sandbox Code Playgroud)
  • 我认为最好将其包装在一个函数中以实现可移植性。
  • 我初始化一个空列表。
  • 浏览所有给定的事件。
  • 如果该事件是一个action事件,我会将其推入上面的空列表中。
  • 然后我返回最后两个对象,选择第一个对象的名称。

假设我们正在寻找最后触发的操作。

同样,我的用例是,我想要一种方法来控制我对一般后续问题的回答。

例如,用户问why

我想知道机器人所说的最后一句话(动作)触发了该事件why

如果我感兴趣的是边缘情况,我会以不同的方式处理。如果没有,我一般性地回答。

这是哈克吗?或许。但是,直到我找到一种方法来阻止自己为用户可以问“为什么?”的所有可能方式编写故事之前,这都可以。我愿意接受更好的建议。