開源專題五:Botpress 對話機器人引擎Dialog Engine

Botpress使用我們所謂的對話引擎來處理對話。對話引擎負責與機器人的每次互動。它處理用戶輸入和機器人響應。但是在兩者之間,發生了很多事情。

Overview

對話引擎使用代表機器人總體對話邏輯的流程,流程由執行一系列指令的節點組成。指令是Node生命週期的一部分,可以執行Actions。Actions通常是您自己編寫的代碼,是由Botpress或其他人提供的代碼(稍後會詳細介紹)。

Flows

較複雜的機器人通常分為多個較小的Flow,而不只是一個較大的流程。將漫遊器分解為多個流的原因是為了簡化可維護性和可重用性。

Flow Lifetime

Flow總是startNode從其*.flow.json文件的開始。起始節點指示開始節點的名稱。一旦選擇了節點,對話引擎將使活動節點的指令排隊。然後它將順序處理指令。

對話引擎是基於事件的,默認情況下是非阻塞的,這意味著流將執行它可以執行的所有操作,直到需要等待為止。

注意:目前有兩個原因導致Flow“等待”:

* 節點被標記為等待用戶輸入

* 一個節點無法滿足轉換到另一個節點的條件

處理完第一個節點後,對話框引擎將繼續執行Flow中的下一個節點,直到到達最後。

節點也有自己的生命週期,節點在Flow中負責執行具體的工作,而Flow僅是用於編排它們。這個有點類似操作系統的Process和Thread。

Storage

流作為JSON文件存儲在機器人的源文件中。在本教程的上下文中,流存儲在data/bots/trivia-bot/flows/文件夾中。每個流都分為兩個文件:邏輯(*.flow.json)和特定於視覺的屬性(*.ui.json)。拆分這些內容是為了使維護和檢查更改更加容易。

  • *.ui.json 文件幾乎總是可以從代碼審查中忽略,因為它們不影響機器人的功能。
  • *.flow.json從理論上講,文件也可以由開發人員手動創建,而不是使用GUI。技能就是這種情況,我們將在後面介紹。

Nodes

Node是機器人對話邏輯的主要單元。一個活動對話(我們稱為“ 會話 ”)始終只有一個活動節點

。一個節點通常過渡到另一個節點或流。如果沒有,則對話結束。然後,來自用戶的下一條消息將成為一個全新會話的一部分。

甲節點被分離成三個不同的階段:的OnEnter(A),的onReceive(B)和onNext(C)。

開源專題五:Botpress 對話機器人引擎Dialog Engine

Node Lifetime

onEnter

onEnter進入節點時將執行的指令列表。如果定義了多個動作,則將依次執行所有動作。

onReceive

onReceive是當節點成為活動節點時收到消息時將執行的指令列表。一旦定義了動作,該節點將自動等待用戶輸入(橙色節點)。

保留該屬性不使用時,該節點將處於非阻塞狀態(黑色),這意味著它將直接從流動onEnter到onNext。


開源專題五:Botpress 對話機器人引擎Dialog Engine


全流程onReceive

您可以定義一個onReceive指令,該指令將始終在每個節點的onRecieve之前執行。

示例:接收時全流程

Audit Trail:記錄在此特定流範圍內接收到的消息的特定日誌

Authentication Gate:運行一些驗證

Sentiment Analysis:確保對話情緒保持健康

要定義新的“new Flow-wide On Receive Actions”,請導航至相關Flow,然後雙擊方格背景上的任意位置以顯示“Flow Properties Pop up”。您也可以單擊Flow編輯器左上角的鏈接。在“ On Receive”部分下,單擊“ Add Action ”按鈕以添加新操作。


開源專題五:Botpress 對話機器人引擎Dialog Engine


onNext

onNext(也稱為Transitions)與Flow-wide Transitions完全相同,除了條件僅在執行之後onReceive或onEnter已執行的情況下進行評估。

特殊情況:如果未定義任何條件,則默認行為是對話結束。如果定義了條件但不匹配,則什麼也不會發生,即當前節點保持活動狀態,並且當條件匹配時它將流動。默認情況下,onNext僅在onReceive重新調用後才會重試。

目標:轉換始終有一個目標,我們稱之為目標。有可能:

  • 不同的節點
  • 不同的流程
  • 上一個流程(請參閱流程堆棧)
  • 自身(回過頭來)
  • 對話結束

全流程onNext

當條件成功時,使用Flow-wide onNext指令可以覆蓋節點轉換。

示例:全流程onNext

身份驗證門:如果用戶未通過身份驗證,則將其重新路由到登錄流程情感分析:如果會話質量下降,則將用戶重新路由到人工後備節點匹配流範圍內的意圖,例如“ cancel”等。

State

每個對話都有一個與之關聯的State。狀態在會話會話開始時創建,並在會話結束時銷燬。

在本教程的上下文中,這意味著將在輸入“ entry ”節點之前和執行“ over ”節點之後立即創建狀態。

開源專題五:Botpress 對話機器人引擎Dialog Engine

注意:狀態是對話的全局狀態,因此,如果對話跨越多個流,則該狀態將為所有流共享

Session Timeout

當對話框引擎正在等待非活動用戶的輸入時,一段時間後會話將超時。超時允許您根據需要優雅地結束對話。在刪除會話之前進行一些處理也很有用。例如,您可以將用戶聯繫信息保存到外部數據庫,或者告訴用戶如何與您聯繫,或者通知用戶其會話已超時。

Timeout Flow

您可以使用超時流來處理超時邏輯。它就像常規流程一樣工作。您要做的就是向timeout.flow.json您的漫遊器添加一個Flow ,並指定一個起始節點。對話框引擎將在用戶下一次超時時檢測您的超時流。

Timeout Node

與超時流非常相似,應該調用超時節點,該節點timeout應該屬於當前流。您不必將其鏈接到任何其他節點。對話框引擎將根據其名稱檢測節點。

Timeout Transition

另一個需要一些編碼的選項是將屬性添加timeoutNode到*.flow.json文件中,並將其分配給應處理超時的節點的名稱。它可以是任何節點,不需要稱為特定方式。

重要說明:對話引擎處理完超時後,將刪除會話。

Actions

一個行動是在Node.js的虛擬機執行JavaScript代碼。可以是您想要的任何東西。調用API,將某些內容存儲在數據庫中或將某些內容存儲在鍵值存儲中。操作由onEnter和onReceive指令調用。有兩種類型的動作:

  • 腳本:用戶定義的操作,用於運行自定義代碼。
  • Output:一個輸出動作,用於使機器人輸出一些東西。

要了解有關操作的更多信息,請參閱“ 自定義代碼”部分。

Skills

構建了幾個流程/機器人之後,您會很快注意到,有一些常見的模式會一遍又一遍地實現。技能可以解救。

技能是在流程之上的更高層次的抽象。實際上,技能是動態生成器。

它們可以看作是多個流甚至多個漫遊器之間的可重用組件。

Install Skills

每個技能都必須由一個模塊公開。模塊可以承載許多技能。您所要做的就是安裝所需的模塊,您將可以使用其技能。

Use Skills

Botpress Flows GUI應該使用技能。安裝技能模塊後,在“圖形流程編輯器”中導航至流程,然後在頂部工具欄中找到“插入技能”下拉菜單:


開源專題五:Botpress 對話機器人引擎Dialog Engine


填寫表單後,您將能夠單擊流中的任何位置以插入其他節點要使用的技能。

Persistence

技能以流的形式存儲在該data/bots/your-bot/flows/skills文件夾下。

您還可以通過GUI可視化生成的技能:


開源專題五:Botpress 對話機器人引擎Dialog Engine


Editing skills

生成技能節點後,您可以單擊該節點,然後單擊左側面板上的“編輯”以編輯該節點,這將在後臺自動更新生成的流程。


開源專題五:Botpress 對話機器人引擎Dialog Engine


分享到:


相關文章: