Hi, I’m building a bot which ask questions and answers are free text. Because the logic goes like this “is the answer in list of accepted answers or is it anything else” I use action server to make this analysis.
Rasa version is 2.2
Rasa-sdk version is 2.2
Here is my actions.py
from typing import Any, Text, Dict, List
from rasa_sdk.events import SlotSet
from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher
from rasa_sdk.types import DomainDict
class kysymyksienTarkistus1(Action):
def name(self) -> Text:
return "action_tarkista_kysymys_01"
def run(
self,
dispatcher: CollectingDispatcher,
tracker: Tracker,
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
vastaus = tracker.latest_message["text"]
# tarkistetaan onko vastaus oikein
if vastaus == "puolikas":
dispatcher.utter_message(response = "utter_kysymys01_oikein")
#dispatcher.utter_message(text=f"vastaus oikein")
return []
else:
dispatcher.utter_message(response = "utter_kysymys01_vaarin")
#dispatcher.utter_message(text=f"vastaus väärin")
return []
class kysymyksienTarkistus2(Action):
def name(self) -> Text:
return "action_tarkista_kysymys_02"
def run(
self,
dispatcher: CollectingDispatcher,
tracker: Tracker,
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
vastaus = tracker.latest_message["text"]
# tarkistetaan onko vastaus oikein
if vastaus == "100":
dispatcher.utter_message(response = "utter_kysymys02_oikein")
return []
else:
dispatcher.utter_message(response = "utter_kysymys02_vaarin")
return []
class kysymyksienTarkistus4(Action):
def name(self) -> Text:
return "action_tarkista_kysymys_04"
def run(
self,
dispatcher: CollectingDispatcher,
tracker: Tracker,
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
vastaus = tracker.latest_message["text"]
# tarkistetaan onko vastaus oikein
if vastaus == "100":
dispatcher.utter_message(response = "utter_kysymys01_oikein")
return []
else:
dispatcher.utter_message(response = "utter_kysymys04_vaarin")
return []
class kysymyksienTarkistus5(Action):
def name(self) -> Text:
return "action_tarkista_kysymys_04"
def run(
self,
dispatcher: CollectingDispatcher,
tracker: Tracker,
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
vastaus = tracker.latest_message["text"]
# tarkistetaan onko vastaus oikein
if vastaus == "100":
dispatcher.utter_message(response = "utter_kysymys01_oikein")
return []
else:
dispatcher.utter_message(response = "utter_kysymys05_vaarin")
return []
Here is debug from shell
2021-06-17 12:16:15 DEBUG rasa.core.policies.memoization - There is a memorised next action 'action_tarkista_kysymys_01'
2021-06-17 12:16:15 DEBUG rasa.core.policies.ensemble - Made prediction using user intent.
2021-06-17 12:16:15 DEBUG rasa.core.policies.ensemble - Added `DefinePrevUserUtteredFeaturization(False)` event.
2021-06-17 12:16:15 DEBUG rasa.core.policies.ensemble - Predicted next action using policy_0_AugmentedMemoizationPolicy.
2021-06-17 12:16:15 DEBUG rasa.core.processor - Predicted next action 'action_tarkista_kysymys_01' with confidence 1.00.
2021-06-17 12:16:15 DEBUG rasa.core.actions.action - Calling action endpoint to run action 'action_tarkista_kysymys_01'.
2021-06-17 12:16:15 DEBUG rasa.core.processor - Policy prediction ended with events '[<rasa.shared.core.events.DefinePrevUserUtteredFeaturization object at 0x7fde807a8190>]'.
2021-06-17 12:16:15 DEBUG rasa.core.processor - Action 'action_tarkista_kysymys_01' ended with events '[BotUttered('None', {"elements": null, "quick_replies": null, "buttons": null, "attachment": null, "image": null, "custom": null}, {"response": "utter_kysymys01_oikein"}, 1623932175.3445601)]'.
2021-06-17 12:16:15 DEBUG rasa.core.policies.memoization - Current tracker state:
[state 1] user intent: aloita | previous action name: action_listen
[state 2] user intent: aloita | previous action name: utter_kysymys_01
[state 3] user intent: vastaus01 | previous action name: action_listen
[state 4] user intent: vastaus01 | previous action name: action_tarkista_kysymys_01
2021-06-17 12:16:15 DEBUG rasa.core.policies.memoization - There is a memorised next action 'action_listen'
2021-06-17 12:16:15 DEBUG rasa.core.policies.ensemble - Predicted next action using policy_0_AugmentedMemoizationPolicy.
2021-06-17 12:16:15 DEBUG rasa.core.processor - Predicted next action 'action_listen' with confidence 1.00.
2021-06-17 12:16:15 DEBUG rasa.core.processor - Policy prediction ended with events '[]'.
2021-06-17 12:16:15 DEBUG rasa.core.processor - Action 'action_listen' ended with events '[]'.
2021-06-17 12:16:15 DEBUG rasa.core.lock_store - Deleted lock for conversation '0e2913fd53434c9ab1b9d74f949c3808'.
and here is start of strories
version: "2.0"
stories:
- story: aloitus ja kysymys 01
steps:
- intent: aloita
- action: utter_kysymys_01
- intent: vastaus01
- action: action_tarkista_kysymys_01
- story: lopetus 01
steps:
- action: utter_kysymys01_oikein
- action: utter_lopetus
and here domain.yml
version: "2.0"
intents:
- aloita
- vastaus01
- vastaus02
- siirry_diaan_09
- siirry_diaan_10
responses:
utter_kysymys_01:
- text: "- Potilaalle on määrätty tyroksiinia 50 mikrogrammaa. Thyroxin tablettien vahvuus on 0,1 mg. Kuinka monta tablettia annat potilaalle? \n- Montako tablettia otat purkista ja annat potilaalle? \n- Kirjoita vastauksesi alle"
utter_kysymys01_oikein:
- text: Hienoa, oikea vastaus! potilas saa oikean annoksen lääkettä.
utter_lopetus:
- text: potilas saa oikean annoksen lääkettä.
image: "https://i.imgur.com/nGF1K8f.jpg"
utter_kysymys01_vaarin:
- text: "- Vastauksesi on väärin, lasketaan yhdessä uudestaan."
utter_kysymys_02:
- text: "- Aloitetaan siitä, että muunnetaan ensin yksiköt samaan yksikköön. \n- Koska potilaalle on määrätty lääkeannos mikrogrammoissa, sinun täytyy muuttaa lääkepurkin vahvuutena oleva milligrammat samaan yksikköön eli mikrogrammoiksi (potilaalle oli määrätty 50 mcg) \n- Purkissa olevan yhden tabletin vahvuus on? mikrogrammaa, kirjoita yksikönmuunnos vastauksesi alle."
utter_kysymys02_oikein:
- text: Hienoa, nyt on oikeat yksiköt laskua varten.
buttons:
- title: " en tiedä"
payload: "/siirry_diaan_09"
- title: " tarkistetaan mikä olikaan potilaalle määrätty annos "
payload: "/siirry_diaan_10"
- title: " annetaan potilaalle 0,05 tablettia"
payload: "/siirry_diaan_09"
utter_dia_09:
- text: Käydäänpä läpi miten yksikönmuunnokset tehdään.
utter_dia_10:
- text: "Käydäänpä läpi miten yksikönmuunnokset tehdään."
utter_kysymys02_vaarin:
- text: Väärin
utter_kysymys_03:
- text: Mikä olikaan potilaalle määrätty annos mikrogrammoina ? Tarvitset tämän tiedon pystyäksesi jatkamaan laskua. kirjoita vastauksesi alle.
utter_kysymys_04:
- text: Eli jos purkissa oleva tabletti on 100 mikrogrammaa ja potilaalle on määrätty 50 mikrogrammaa. Eli kuinka monta tablettia annat?
utter_dia_12:
- text: Kokeillaanpa laskea verranto -laskutavalla. X = kuinka monta tablettia pitää antaa?
utter_kysymys_05:
- text: Lasketaan verranto -laskutavalla /n- Kerrotaan ristiin 100 x X ja 50 x 1 /n- 100x = 50 /n- X = 50/100 /n- X = 0,5 eli ___ tbl /n- kirjoita vastauksesi alle
utter_kysymys05_vaarin:
- text: Katso matikkapirkon video verranto -laskutapa
utter_kysymys04_vaarin:
- text: lisää oikea teksti
utter_dia_13:
- text: tähän kanssa lisää
actions:
- action_tarkista_kysymys_01
- action_tarkista_kysymys_02
- action_tarkista_kysymys_04
- action_tarkista_kysymys_05
session_config:
session_expiration_time: 60
carry_over_slots_to_new_session: true
#rasa #rasa2.2 #actionserver