Чатбот с использованием RASA с Python и Flask - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь изучить и создать чат-бота с помощью RASA, который должен передать входные данные из cmdline в Dataframe Python, представленный как Flask API, и получить ответ обратно.

Все биты и кусочки работают хорошо по отдельности, но когда я сшиваю вместе, я не могу передать входной параметр в Pandas из командной строки RASA.

Вот общий итог то, что я сделал до сих пор :

  • Создал Panda Dataframe и выставил его в качестве Flask API.
  • Возможность ударить его вручную и увидеть результат в браузере.
  • Изменен маршрут API Flask как "@ app.route (" / webhook ")" для сбора данных от RASA.
  • RASA endpoint.yml также содержит адрес "webhook".
  • Создал пользовательское действие и упомянул также файл domain.yml.содержимое настраиваемого действия - actions.py упоминается ниже.
  • Domain.yml также имеет это утверждение «action_factory: remote», которое, я считаю, должно использовать настраиваемое действие.Хотя не уверен.
class ActionBookSearch(Action):
def name(self):
  return 'action_genre_search'

def run(self, dispatcher, tracker, domain):
  import pyflask_api ### File name of the Python Flask code
  genre_val = tracker.get_slot('genre') ### Defined slots in domain.yml
  print(genre_val)   ### This always gives None :( That's the issue. Not able to get the value from cmdline
  genre_results = pyflask_api.get_genre(genre="Action") ### Method present in pyflask_api.py code
  if genre_results:
      dispatcher.utter_message(genre_results)
  return [SlotSet("genre", genre_results if genre_results is not None else "Nothing Matched. Please Try again")]

Работа вокруг:

Так как я не смог получить значение из командной строки BotЯ жестко запрограммирован в следующей строке для проверки:

genre_results = pyflask_api.get_genre (genre = "Action")

Это значение передается в код Flaskи извлекает данные из фрейма данных Panda и успешно возвращает ответ в командную строку.

что нужно сделать:

Так что единственное, что ожидает, - это я должен получитьзначение успешно из cmdline, так что всякий раз, когда print (genre_val) выполняется в коде actions.py, он должен возвращать значение, взятое из cmdline, а не «None», как сейчас.

UPDATE:

содержимое domain.yml:

entities:
    - genre

slots:
    genre:
        type: text

action_factory: remote

intents:
  - greet
  - book_search
  - thanks
  - goodbye

actions:
  - utter_greet
  - utter_goodbye
  - action_genre_search
  - utter_happy_reading

содержимое Stories.md:

#create your story here
## greet
* greet
- utter_greet

## get genre
* book_search{"genre": "Fantasy"}
- action_genre_search

## good bye
* goodbye
- utter_goodbye

## Thank you
* thanks
- utter_happy_reading

Содержимое nlu_data.md:

## intent:greet
- hey
- hello

## intent:book_search
- I want to read some Fantasy books
- I want to read some Classics books
- I want to read some Fictional books

## intent:thanks
- perfect
- very good

## intent:goodbye
- bye

1 Ответ

0 голосов
/ 04 января 2019

Вы должны аннотировать ваши примеры NLU например:

## intent:book_search
 - I want to read some [Fantasy](genre) books
 - I want to read some [Classics](genre) books
 - I want to read some [Fictional](genre) books

Также вам нужно добавить больше примеров, чтобы сделать извлечение сущности более устойчивым.Для этого убедитесь, что ner_crf находится в вашем конвейере NLU.

...