通过Rasa操作获取以前的意图名称?

时间:2019-04-08 06:35:13

标签: rasa-core

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

2 个答案:

答案 0 :(得分:2)

我认为我同意OP。 有时候,出于完全不同的原因而激活了意图。

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

当然,对于每个可能的“ Why”和“ How”的会话故事写故事都是没有效率的。

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

汤姆的上述解决方案很有意义。 我会尝试的。

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

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)
  • 我认为最好将它包装在一个函数中以实现可移植性。
  • 我初始化了一个空列表。
  • 经历所有给定的事件。
  • 如果该事件是action事件,则将其推送到上方的空白列表中。
  • 然后我返回最后两个对象,选择第一个对象的名称。

假设是我们正在寻找触发的最后一个动作。

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

例如,用户问why

我想知道机器人说出的最后一句话(动作),它触发了why

如果这是我感兴趣的一个极端案例,我将以不同的方式处理它。 如果没有,我会做出一般答复。

这是hacky吗? 也许。 但是,直到我找到一种方法来阻止自己以用户可以问“为什么?”的所有可能方式写故事时,这种方法才能做到。 我愿意接受更好的建议。

答案 1 :(得分:0)

这可能不是一个很好的设计-您最好为每个流程编写单独的故事,然后针对每种情况进行相应的操作,但是在自定义操作的react-router-dom方法中,您可以访问{{1} }。该对象将对话的所有事件保存在名为run的列表中,该列表 看起来像这样:

tracker

要获取用户消息,请在此列表上向后迭代,直到找到tracker.events并在[{'event': 'action', 'timestamp': 1558688062.7624729, 'name': 'action_listen', 'policy': None, 'confidence': None}, {'event': 'user', 'timestamp': 1558688062.7628329, 'text': '/joke', 'parse_data': {'text': '/joke', 'intent': {'name': 'joke', 'confidence': 1.0}, 'intent_ranking': [{'name': 'joke', 'confidence': 1.0}], 'entities': []}, 'input_channel': 'rest'}] 内给出了意图