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。