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)