根据story.md训练rasa_core以预测下一个意图

时间:2018-11-28 10:29:16

标签: rasa-nlu rasa-core

对此需要帮助。我想知道如何训练我的机器人以根据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文件中指定它吗?还是我需要在配置文件中添加它以及如何添加?

谢谢您的帮助

1 个答案:

答案 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()时,该插槽将充满整个消息。

相关问题