对此需要帮助。我想知道如何训练我的机器人以根据story.md中的内容来预测下一个意图。
要明确:我有一个意图“问题”,我不知道用户可以录音什么。用户可能会认为这是他自己遇到的所有问题。我所知道的是,这种意图将在对话的某个阶段发生。例如:
## story1
* greet
- utter_greet
* confirm
- utter_step1
* probleme
- action_SendIntentProbleme
- utter_probleme_site
所以在这里我知道总是在utter_step1之后,用户会给我他的问题,而我不需要理解它,我只需要机器人将它限定为意图问题,之后就可以执行action_sendintentproblem然后执行utter_problem_site 。机器人对此目的的回答是笼统的。不管这个意图的内容是什么。
我希望我的机器人在Utter_step1之后听用户的声音时知道下一个输入将是意图“问题”,我可以在data.md文件中指定它吗?还是我需要在配置文件中添加它以及如何添加?
谢谢您的帮助
答案 0 :(得分:1)
您可以在此用例中使用forms。
故事应该像这样:
## story1
* greet
- utter_greet
* confirm
- utter_step1
- problem_form
- form{"name": "problem_form"}
- form{"name": null}
- action_SendIntentProbleme
- utter_probleme_site
在您的域文件中添加:
intents:
...
slots:
problem_message
type: unfeaturized
...
forms:
- problem_form
actions:
- utter_ask_problem_message
templates:
utter_ask_problem_message:
text: "What is your problem?"
在您的核心策略配置中,添加表单策略:
policies:
- name: FormPolicy
...
然后具有如下形式:
from rasa_core_sdk.forms import FormAction
class ProblemForm(FormAction):
"""Accept free text input from the user for suggestions"""
def name(self):
return "problem_form"
@staticmethod
def required_slots(tracker):
return ["problem_message"]
def slot_mappings(self):
return {"problem_message": self.from_text()}
def submit(self, dispatcher, tracker, domain):
return []
此表格将调用utter_ask_problem_message
,直到用户填补了空位。当我们调用self.from_text()
时,该插槽将充满整个消息。