Rasa教程系列-Core-4-Actions

Actions(操作)是機器人對用戶輸入的響應,在Rasa有四種actions:
(1)Utterance actions: 以utter_爲前綴並向用戶發送特定信息
(2)Retrieval actions: 以respond_爲前綴,所發送的信息來自於 retrieval model
(3)Custom actions: 運行任意代碼併發送任意數量的消息 (or none)
(4)Default actions: 如action_listen, action_restart, action_default_fallback

Utterance Actions

定義utterance action(ActionUtterTemplate),可以向domain文件中添加以utter_爲前綴的utterance template,如下:

templates:
  utter_my_message:
    - "this is what I want my action to say!"

utterance action 的名稱通常以utter_爲前綴。如果缺少這個前綴,仍然可以在自定義action中使用該模板,但是模板不能被直接預測爲它自己的操作。更多細節見Responses

如果使用外部 NLG service,則不需要在domain中指定模板,但是仍然需要將utterance names添加到domain的 actions 列表中。

Retrieval Actions

檢索操作使得處理大量類似的意圖(如聊天和常見問題FAQs)變得更容易。更多信息參見檢索操作

Custom Actions

一個action 可以運行任何你想要的代碼。自定義action 可以打開燈,將事件添加到日曆中,檢查用戶的銀行餘額,或者可以想象的任何其他事情。
當預測自定義action時,Rasa將調用預先指定的endpoint 。這個endpoint 是一個webserver,能夠響應這個調用,運行代碼並可選地返回修改對話狀態的信息。
endpoints.yml中指定action server如下:

action_endpoint:
  url: "http://localhost:5055/webhook"

endpoints.yml的傳遞方式是用--endpoints參數來指定的,即在腳本後跟上--endpoints endpoints.yml

雖然可以用node.js, .NET, java等其他語言創建action server,但是官方提供了一個小型的python SDK,這使開發變得更加容易。

注意:
Rasa使用票證鎖定(ticket lock)機制來確保來自相同會話ID的傳入消息不會相互干擾,並按正確的順序進行處理。如果希望自定義 action 的運行時間超過60秒,請將TICKET_LOCK_LIFETIME環境變量設置爲你自己的期望值。

Custom Actions Written in Python

對於用python編寫的 actions,官方提供了一個方便的Rasa SDK,它可以啓動 action server。

Execute Actions in Other Code

Rasa將向你的服務器發送一個HTTP POST請求,其中包含要運行哪個action。此外,此請求將包含關於對話的所有信息。Action Server展示了詳細的API規範。

作爲對來自Rasa的action 調用的響應,我們可以修改tracker,例如通過設置槽位並將響應發送回用戶。所有修改都是使用events事件完成的。事件中有所有可能的事件類型的列表參考這裏

Proactively Reaching Out to the User Using Actions

如何使用動作主動接觸用戶?當希望主動接觸用戶,例如顯示長時間運行的後臺操作的輸出或將外部事件通知用戶。
爲此,可以POST 到此endpoint,在請求體中爲特定用戶指定需要運行的action。使用output_channel查詢參數指定應該使用哪個輸出通道將助理的響應返回給用戶。如果消息是靜態的,則可以在domain文件中使用相應的模板定義一個utter_ action。如果需要更多控制,可以在domain中添加自定義action,並在action server中實現所需的步驟。在自定義 action 中分發的任何消息都將被轉發到指定的輸出通道。

主動接觸用戶取決於通道的能力,因此並非每個通道都支持。如果有些通道不支持,可以考慮使用CallbackInput通道向webhook發送消息。

注意:
在對話中運行一個 action 會改變對話歷史並影響助手的下一次預測。如果不希望發生這種情況,請確保action通過將一個ActionReverted事件附加到對話 tracker 的末尾來恢復自身。

Default Actions

默認的actions如下列表:

默認 action 介紹
action_listen 停止預測更多action,等待用戶輸入
action_restart 重置整個對話。如果映射策略包含在策略配置中,則可以通過輸入/restart在對話期間觸發。
action_session_start 開始一個新的對話會話。佔據所有設置的槽位,標記新對話會話的開始,並重新應用現有的SlotSet事件。domain中Session configuration 中的session_expiration_time參數定義的不活動時長,超過之後自動觸發該action。可以通過輸入/session_start在對話期間手動觸發。所有的對話都以action_session_start開始。
action_default_fallback 撤消最後一條用戶消息(就好像用戶沒有發送它,機器人也沒有反應一樣),併發出一條機器人不理解的消息。具體看回退操作
action_deactivate_form 解除激活形態並重置請求的槽位。也可以參見處理不愉快的路徑
action_revert_fallback_events 恢復TwoStageFallbackPolicy期間發生的事件。參看回退操作
action_default_ask_affirmation 請用戶確認他們的意圖。建議使用自定義action 覆蓋此默認操作,以獲得更有意義的提示。
action_default_ask_rephrase 要求用戶重新表述他們的意圖。
action_back 撤消最後一條用戶消息(就好像用戶沒有發送它,機器人也沒有反應一樣)。如果策略配置中包含映射策略,則可以通過輸入/back在對話期間觸發。

所有默認action都可以覆蓋。爲此,請將 action 名稱添加到domain中的 actions 列表中:

actions:
- action_default_ask_affirmation

然後,Rasa將調用你的action endpoint,並將其視爲所有其他自定義action。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章