我有一个名为intent_yes
的意图,它在几种不同的对话流中共享。当用户说“是”或“是”等时,它将调用我的webhook / Rasa操作。我需要知道他们对他们说了什么。我们如何从Rasa Webhook操作中获取先前的意图名称?
答案 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'}]
内给出了意图