当前位置:   article > 正文

对话机器人(六)——RASA:Actions_rasa action

rasa action

action:接收用户输入和对话状态信息,按照业务逻辑进行处理,并输出改变对话状态的事件回复用户的消息

1. 回复动作

和domain中的response关联在一起,当调用这类动作时,会自动查找response中同名的模板并渲染。

需要和回复模板名字相同。

2. 表单

填表:多次和用户交互,收集任务所需要的要素,直到所需的要素收集完整。

a. 流程

(1)用户表达自己的需求(意图和实体)。

(2)根据用户意图,确定合适的表单,将用户在对话中提供的实体信息填入其中。机器人查看表单中缺失的字段,按照一定的策略询问用户关于缺失字段的问题。

(3)用户提供缺失字段信息。

(4)机器人将缺失信息填入表单,询问下一个缺失字段。

(5)往复迭代,直到机器人发现表单填写完整,于是开始执行具体任务。

b. 用法

需要添加RulePolicy到policies中:

policies:
- name: RulePolicy
  • 1
  • 2
(1) 定义表单
  • 表单名:stories/rule中执行处理表单操作的名称。

  • required_slots:列出需要的槽

# domain.yml
entities:
- cuisine
- number
slots:
  cuisine:
    type: text
    mappings:
    - type: from_entity
      entity: cuisine
  num_people:
    type: any
    mappings:
    - type: from_entity
      entity: number
# 表单restaurant_form,需要填充的槽:cuisine、num_people
forms:
  restaurant_form:
    required_slots:
        - cuisine
        - num_people
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

ignored_intents:表单要忽略的意图列表,这些意图将添加到表单中每个槽映射的not_intent键中。

如,若不希望在意图是“闲聊”时填写表单的任何插槽,需要定义以下内容:

forms:
  restaurant_form:
    ignored_intents: 
    - chitchat
    required_slots:
        - cuisine
        - num_people
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

一旦表单操作被第一次调用,表单就会被激活,并提示用户输入下一个所需的槽值。它通过查找一个名为utter_ask_<form_name>_<slot_name>utter_ask_<slot_name>的回复来实现。请确保在domain文件中为每个所需的插槽定义这些响应。

(2) 激活表单

添加一个故事或规则,描述机器人何时运行表单。

# 在request_restaurant意图下触发表单
rules:
- rule: Activate form
  steps:
  - intent: request_restaurant
  - action: restaurant_form
  # 表示表单在运行restaurant_form后被激活。
  - active_loop: restaurant_form
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
(3) 停用表单

一旦所有必需的槽位都被填满,表单将自动停用。若没有添加适用的故事或规则,则机器人将在表单完成后自动侦听下一条用户消息。

rules:
- rule: 提交表单
  condition:
  # 条件是:表单处于活跃状态
  - active_loop: restaurant_form
  steps:
  # 表单停用
  - action: restaurant_form
  - active_loop: null
  - slot_was_set:
    - requested_slot: null
  # 一旦槽填满后,提交表单时要运行的动作
  - action: utter_submit
  - action: utter_slots_values
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
(4)为不愉快的表单路径编写故事/规则

用户有可能没有按照表单的填充形式回复,即用户回复的内容不是需要填充槽的内容。

当表单处于活跃状态时,用户输入未填满请求的槽,则表单操作的执行将被拒绝,即自动引发ActionExecutionRejection。以下是表单将引发ActionExecutionRejection的特定场景:

  • 已请求插槽,但用户最新一条消息没有填充该插槽,并且没有定义用于验证插槽或提取插槽的自定义动作。
  • 已请求插槽,但用于验证插槽或提取插槽的自定义操作未返回任何SlotSet事件。
rules:
- rule: Example of an unhappy path
  condition:
  # 条件是:表单处于活跃状态
  - active_loop: restaurant_form
  steps:
  # 这条不愉快的路径处理的是意图“chitchat”的情况。 
  - intent: chitchat
  - action: utte
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/934445
推荐阅读
  

闽ICP备14008679号