actions/actions.py
#此文件包含可用于运行的自定义操作
#自定义Python代码。
# https://rasa.com/docs/rasa/custom-actions
#这是一个简单的自定义动作示例,它会说出“你好,世界!”
from typing import Any, Text, Dict, List
from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher
class ActionHelloWorld(Action):
def name(self) -> Text:
return "action_hello_world"
def run(self, dispatcher: CollectingDispatcher,tracker: Tracker, domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
dispatcher.utter_message(text="Hello World!")
return []
return 高级用法
return [SlotSet("name", name), FollowupAction("utter_greet")]
这里,run 函数返回了一个包含两个事件的列表。
第一个事件是 SlotSet 事件,用来将一个名为 name 的 slot 设置为 name 变量的值。
第二个事件是 FollowupAction 事件,用来指示 Rasa Core 接下来应该执行一个名为 utter_greet 的 action,向用户发送一个问候消息。
重置槽
from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher
from rasa_sdk.events import EventType
from rasa_sdk.events import AllSlotsReset
from rasa_sdk.events import Restarted
from rasa_sdk.events import FollowupAction
class ActionRestarted(Action):
def name(self):
return 'action_restarted'
def run(self, dispatcher, tracker, domain):
print("restarted")
return[Restarted()]
class ActionAllSlotsReset(Action):
def name(self):
return 'action_slot_reset'
def run(self, dispatcher, tracker, domain):
print("action_slot_reset")
return[AllSlotsReset()]
常用语法
# 意图名称
intent = tracker.latest_message['intent']['name']
print("意图名称:", intent)
# 获取槽变量
city = tracker.get_slot("address") or "本地"
输出
#显示文本
dispatcher.utter_message(response="utter_ask_is_ok")
# 使用模板(新版不推荐使用)
dispatcher.utter_template("utter_ask_is_ok", tracker)
# 模板的新用法
dispatch.utter_message(template="utter_ask_confirm", **tracker.slots)