赞
踩
action:接收用户输入和对话状态信息,按照业务逻辑进行处理,并输出改变对话状态的事件和回复用户的消息。
和domain中的response关联在一起,当调用这类动作时,会自动查找response中同名的模板并渲染。
需要和回复模板名字相同。
填表:多次和用户交互,收集任务所需要的要素,直到所需的要素收集完整。
(1)用户表达自己的需求(意图和实体)。
(2)根据用户意图,确定合适的表单,将用户在对话中提供的实体信息填入其中。机器人查看表单中缺失的字段,按照一定的策略询问用户关于缺失字段的问题。
(3)用户提供缺失字段信息。
(4)机器人将缺失信息填入表单,询问下一个缺失字段。
(5)往复迭代,直到机器人发现表单填写完整,于是开始执行具体任务。
需要添加RulePolicy到policies中:
policies:
- name: RulePolicy
表单名: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
❃ ignored_intents:表单要忽略的意图列表,这些意图将添加到表单中每个槽映射的not_intent键中。
如,若不希望在意图是“闲聊”时填写表单的任何插槽,需要定义以下内容:
forms:
restaurant_form:
ignored_intents:
- chitchat
required_slots:
- cuisine
- num_people
一旦表单操作被第一次调用,表单就会被激活,并提示用户输入下一个所需的槽值。它通过查找一个名为utter_ask_<form_name>_<slot_name>
或utter_ask_<slot_name>
的回复来实现。请确保在domain
文件中为每个所需的插槽定义这些响应。
添加一个故事或规则,描述机器人何时运行表单。
# 在request_restaurant意图下触发表单
rules:
- rule: Activate form
steps:
- intent: request_restaurant
- action: restaurant_form
# 表示表单在运行restaurant_form后被激活。
- active_loop: restaurant_form
一旦所有必需的槽位都被填满,表单将自动停用。若没有添加适用的故事或规则,则机器人将在表单完成后自动侦听下一条用户消息。
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
用户有可能没有按照表单的填充形式回复,即用户回复的内容不是需要填充槽的内容。
当表单处于活跃状态时,用户输入未填满请求的槽,则表单操作的执行将被拒绝,即自动引发ActionExecutionRejection。以下是表单将引发ActionExecutionRejection
的特定场景:
SlotSet
事件。rules:
- rule: Example of an unhappy path
condition:
# 条件是:表单处于活跃状态
- active_loop: restaurant_form
steps:
# 这条不愉快的路径处理的是意图“chitchat”的情况。
- intent: chitchat
- action: utte
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。