我如何在Rasa中的自定义操作中使用action_listen

问题描述

我想收听自定义操作中的用户,然后继续执行该自定义操作。 基本上我正在寻找的是

我在自定义操作中有一个循环,从0到5。 对于每个值,我想从用户那里获取一些输入并继续执行该循环。

def Action():
   for 0 to 5:
      input = action_listen
      // do something with input

解决方法

为此,您应该使用form。表单会循环显示您定义的一组插槽,直到所有插槽都填满。

在常规操作中使用action_listen循环是行不通的,因为操作只有一个run()方法,并且仅在返回run()方法后,事件才会添加到跟踪器中,操作完成后(您将无法恢复操作)。

https://rasa.com/docs/rasa/core/forms/

,

感谢您的回复,但是一些技巧也可以让我在自定义操作中执行相同的操作。

我在每次迭代时都以 FollowUpAction 的形式返回了 Form ,并将循环变量减少了一个。

现在,表单将要求用户获取所需的插槽(对信息进行必要的处理),然后再次使用SlotSet将插槽设置​​为“无”。现在,以 FollowUpAction 的形式返回 Action

通过这种方式,Bot会从用户那里获得响应。

global i = 0
class Action():
   def run():
      for i to 5:
         return [FollowUpAction('ActionForm')]

class ActionForm():
   def requiredslot():
         return ['take_value']

   def submit():
         //Do needful with input
         return [SlotSet("take_value",None),FollowUpAction("my_action")]

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...