Обучите rasa_core предсказывать следующее намерение согласно stories.md

Нужна помощь для этого. Я хочу знать, как я могу научить своего бота предсказывать следующее намерение в соответствии с данными в Stories.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? или мне нужно добавить это в файл конфигурации и как?

Спасибо за помощь


person chemssou    schedule 28.11.2018    source источник
comment
Моя первая идея, чтобы противостоять этому, - сказать пользователю, чтобы он начал свою отправку с: проблема: а затем в моем data.md я объявляю проблему намерения, которая содержит: проблема: но не уверен, будет ли это работать всегда, а затем Если у меня много таких намерений, я буду каждый раз просить пользователя начать рассылку с чего-то, что нехорошо.   -  person chemssou    schedule 28.11.2018
comment
какие проблемы подпадают под проблему намерения? Это конкретные проблемы, связанные со здоровьем, которые вы пытаетесь уловить?   -  person Srikar    schedule 30.11.2018
comment
На самом деле речь идет о проблемах в управлении. Он на французском, но я постараюсь привести примеры. Один человек может сказать: я не могу найти способ заставить мой проект работать. Другой пользователь скажет: Мы не общаемся в нашей группе. Другой пользователь скажет: «Мне тяжело с моими сотрудниками и т. Д. И это всего лишь примеры, с которыми я пришел, я ничего не знаю о том, что пользователь мог бы расценить как проблему для него».   -  person chemssou    schedule 30.11.2018
comment
Один из способов - обработать его как default_fallback, а затем в резервном действии вы можете захватить его и произнести то, что вам нужно, а затем вернуться в предыдущее состояние.   -  person Srikar    schedule 30.11.2018
comment
Спасибо, Шрикар, не могли бы вы привести пример того, как это сделать, или документацию. Я знаю, что такое действие default_fallback, но не знаю, как использовать его так, как хочу. Я новичок в этом   -  person chemssou    schedule 30.11.2018
comment
См. Код в документации: rasa.com/docs/core/ _modules / rasa_core / actions / action / В блоке выполнения выполните свои функции.   -  person Srikar    schedule 01.12.2018


Ответы (1)


В этом случае вы можете использовать формы.

Рассказ должен выглядеть так:

## 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(), слот будет заполнен всем сообщением.

person Tobias    schedule 28.11.2018
comment
Да, я понимаю, но проблема в моем намерении заключается в том, что пользователь действительно может сказать все, что приходит в голову. Я могу привести 30 примеров проблем с намерениями, и тот, который предоставит пользователь, будет совершенно другим. Что касается моей контр-идеи, я знаю, что нечего терять из-за того, что я использую интеллектуального бота. Но я не нашел другого способа сделать это. - person chemssou; 29.11.2018
comment
Да, я понимаю, но проблема в моем намерении заключается в том, что пользователь действительно может сказать все, что приходит в голову. Я могу привести 30 примеров проблем с намерениями, и тот, который предоставит пользователь, будет совершенно другим. Что касается моей контр-идеи, я знаю, что она теряет тот факт, что я использую интеллектуального бота. Но я не нашел другого способа сделать это. - person chemssou; 29.11.2018
comment
@chemssou Теперь у меня была проблема, аналогичная вашей, и я решил ее с помощью форм. Я отредактировал свой ответ предложенным решением. - person Tobias; 14.12.2018
comment
Пожалуйста :-) примите ответ как правильный, если это помогло вам, чтобы другие пользователи могли его найти. - person Tobias; 20.12.2018
comment
На самом деле я не могу, потому что у меня меньше 15 репутации. Каждый раз, когда я хочу это сделать, он сообщает мне, что голосование принято, но не отображается, так как у меня недостаточно репутации для голосования. - person chemssou; 21.12.2018
comment
Не беспокойтесь :-) Главное, что я смогу помочь вам почти через месяц :-D - person Tobias; 21.12.2018
comment
Да, сэр, еще раз спасибо. Могу я связаться с вами? через linkedin например - person chemssou; 21.12.2018