Chat bot KITT.AI ChatFlow

ChatFlow對話生命周期控制及變數使用

葉文華 2018/10/17 23:00:15
1362

ChatFlow對話生命周期控制及變數使用


簡介

用ChatFlow開發聊天機器人時,必需要知道ChatFlow的對話生命周期,以及使用變數,便可以幫助記得對話中的資訊,以達成控制並維持有意義的對話。

作者

葉文華



1、前言

從開始跟聊天機器人說話到結束,可定義成進行了一輪對話的完整生命周期,在ChatFlow中即為一個session的對話。在一個session中通常會有多次的問答來回,而由使用者發出的訊息到聊天機器人的回覆可視為一次transaction。在多次的transaction過程中,可利用ChatFlow收集使用者資訊,並回覆且達成使用者對話的目的,即完成一輪有意義的對話。

2、開始前準備

  • Google Chrome
  • ChatFlow開發帳號

3、ChatFlow中session的控制

 3.1、一輸對話session的有效性,有以下兩種方式可以控制:
  • router 節點設置Timeout
  • state 節點勾選Dialogue ends here

3.2、如下圖中設置了router中的Timeout,預設值是1800秒,當該輪對話session閒置超過設定時間後即對話session結束。
 
3.3、如下圖state中勾選Dialogue ends here。
 
  • 勾選了Dialogue ends here後的state將會提示如下圖呈現。

4、ChatFlow中變數的使用

 4.1、ChatFlow中常用的變數,以使用時機區分來看,有以下4個用法:
  • 一個transaction內有效:在input時存在的參數msg,除了msg.kitt或msg.payload(輸入訊息及其他http response...輸入、輸出)等保留用變數外,皆可自行定義msg.變數名稱使用。
  • 一個session內有效:msg.kitt.變數名稱(在訊息進入router處理開始生效)。
  • 一個ChatFlow app內有效:App variables節點設定變數,並以msg._config.變數名稱方式使用。
  • 全域有效:以global.set(變數名稱,變數值)、global.get(變數名稱)方式使用,由於會建立後持續存在,任何情況下都可以存取到,必須慎用避免不斷擴充膨脹影響系統效能。

4.2、一個transaction內有效的變數,可以在function、state節點如下圖方式設定:
 
 4.3、一個session內有效的變數,必須在訊息進入router後開始使用 一樣可以在function、state節點內 如下圖方式設定:
 
4.4、一個ChatFlow app內有效的變數,必須在專屬的App variables節點內設定:
  • App variables節點設定的變數,將以msg._config.變數名稱方式使用:
 
4.5、全域有效的變數, 可以在function、state節點如下圖方式設定:

5、設計一個測試用ChatFlow對話流程

設計以下流程(針對調整節點說明由左往右、由上到下):
  •  流程設計圖
  •  設定App variables變數
  •  設定router中Timeout為30秒
  •  在initial state後初始化各變數
  •  設定對話中enter節點規則
  •  在對話中取得各變數值
  •  設定Session結束enter節點規則
  •  對話結束後取得各變數值

6、測試對話流程及說明

6.1、以下連續經4次問答來回:
  • localCode在第1次問答initial state初始化時可取得,第2次問答後即無法取得
  • kittCode在4次問答中皆可取得並累加
  • appCode皆可取得
  • globalCode皆可取得
6.2、以下2次連續問答,並超過30秒後接續問答:
  • 2次問答連續,該輪session對話是連貫的
  • 第3次問答與前次已過Timeout設定30秒,已經變成了另一輪session對話的開始
葉文華