rasa 分支实现
示例,表单填完后是否重新填写表单
1、设定slot,其名为form_ok,设定填写该slot的表单form_is_ok_or_not
form_ok:
type: rasa.shared.core.slots.TextSlot
initial_value: null
auto_fill: true
influence_conversation: false
form_is_ok_or_not:
required_slots:
form_ok:
- type: from_text
2、当表单填写完毕后,填写表单form_is_ok_or_not,实际上是填槽form_ok。for_ok有两个值:正确和错误。
#表单完成后,对form_ok槽进行赋值
- rule: submit form
condition:
- active_loop: infor_form
steps:
- action: infor_form
- active_loop: null
- action: form_is_ok_or_not
- active_loop: form_is_ok_or_not
3、使用custom action判断form_ok的值,从而进入不同的分支。
#对form_ok赋值后,进入自定义操作action_rewrite_form_or_not
#action_rewrite_form_or_not通过form_ok的不同值,进入不同操作分支。
- rule: form is ok or not
condition:
- active_loop: form_is_ok_or_not
steps:
- action: form_is_ok_or_not
- active_loop: null
#下方这个自定义action根据不同的form_ok值,返回不同的行为。
- action: action_rewrite_form_or_not
wait_for_user_input: false
4、custom action的代码实现
class ActionRewriteFormOrNot(Action):
def name(self) -> Text:
return "action_rewrite_form_or_not"
def run(self,
dispatcher: CollectingDispatcher,
tracker: Tracker,
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
temp = tracker.get_slot('form_ok')
if temp == '错误':
#form_ok是错误,那么重新填写信息:重置表单,激活表单
dispatcher.utter_message(text="对不起,马上为您重新填写信息。")
return [AllSlotsReset(),FollowupAction(name = "infor_form")]
else:
#form_ok是正确,那么进行下一步操作,这里是我的下一个环节。
return [FollowupAction(name = "action_utter_question")]