Я пытаюсь изучить и создать чат-бота с помощью 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