RASA3.0-表单Form

以完成任务为核心目的的对话过程,可以理解为引导用户填写表单form的过程。

  1. 机器人会问用户想干什么。

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

  1. 机器人按照用户的意图,确定合适的表单,并将用户在对话中提供的尸体信息填入其中。随后机器人查看表单中缺失的字段,按照一定的策略(字段顺序)询问用户关于缺失字段的问题。

  1. 用户提供缺失字段的信息。

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

  1. 往复循环,直至机器人发现表单填写完整,于是开始执行具体任务。


第一步:

在domain.yml中定义表单,如下所示:

forms: ##定义表单
  weather_form: ##表单名称
    ignored_intents: [] ##为整个表单定义要忽略的意图列表
    required_slots:  ##表单必须的词槽
      - address
      - date-time
##一旦表单操作被第一次调用,表单就会被激活,并提示用户输入下一个所需的槽值

第二步:

同时在domain.yml中定义和循环询问表单缺失词槽有关的意图,动作及回复,每次调用表单操作时,机器人都会要求用户提供尚未设置的required_slots中的下一个插槽,它通过查找名为utter_ask_{slot_name}的响应来做到这一点,如下所示:

intents:
- info_date
- info_address
actions:
  - utter_ask_address
  - utter_ask_date-time
responses:
utter_ask_address:
  - text: 想查询哪里的天气呢?
utter_ask_date-time:
  - text: 想查询什么时候的天气呢?

Tips:

记得先定义表单包含的词槽及对应的实体,如下所示:

entities:
  - address
  - date-time
slots:
  address:
    type: text
    influence_conversation: false #仅用于存储信息,不会影响对话行为
    mappings:
      - entity: address
        type: from_entity
  date-time:
    type: text
    influence_conversation: false
    mappings:
      - entity: date-time
        type: from_entity

第三步:

在config.yml中添加相关组件及策略,ResponseSelector及RulePolicy,如下所示:

pipeline:
- name: ResponseSelector
policies:
- name: RulePolicy 

第四步:

在rules.yml中添加表单激活及提交的规则,如下所示:

rules:
  - rule: activate weather form #通过规则指定什么时候进入表单,即激活表单
    steps:
      - intent: weather #意图
      - action: weather_form #映射到动作
      - active_loop: weather_form #动作副作用 进入填槽-询问的循环过程
  - rule: Submit form
    condition:
      # Condition that form is active.
      - active_loop: weather_form
    steps:
      - action: weather_form
      - active_loop: null #循环结束
      - slot_was_set:
          - requested_slot: null #词槽完成
      # The action we want to run when the form is submitted.
      - action: action_weather_form_submit

最后:

在nlu.yml中添加询问缺失词槽意图的训练数据,如下所示:

- intent: info_date
  examples: |
    - [明天](date-time)
    - [后天](date-time)
    - [下个星期日](date-time)怎么样
    - 还需要[昨天](date-time)的
    - 我还要[昨天](date-time)的
    - [明天](date-time)如何
    - [后天](date-time)如何
    - [星期六](date-time)呢
    - [后天](date-time)的呢
    - [明天](date-time)的怎么说
    - [两天后](date-time)的大概什么样
    - [前天](date-time)的
    - 帮我查查[三天前](date-time)
    - 帮我查查[下星期五](date-time)的
    - 还要[明天](date-time)的
- intent: info_address
  examples: |
    - 告诉我[广州](address)怎么样
    - [广州](address)
    - 那么[辽宁](address)呢
    - [北京](address)啥情况
    - [厦门](address)怎么样
    - [武汉](address)呢
    - [香港](address)呢
    - 我在[杭州](address)
    - [上海](address)
    - 在[宁波](address)呢
    - [宁波](address)
    - [首都](address)

大功告成啦!!!

你可能感兴趣的:(RASA,对话机器人,nlp,自然语言处理,人工智能)