在得物客服機器人自研早期,傳統一問一答式的FAQ解決方案粒度較粗,在實際的業務場景中,越來越難以滿足用戶的諮詢需求,也沒有差異化的流程解決方案精準的引導使用者解決問題,大量使用者的諮詢仍依賴人工客服解決問題。早期的多輪SOP引擎主要依賴三方平台,三方反應速度比較慢,提供的服務可客製化的能力不足,在流程配置上,效率也比較低。隨著業務的快速發展,提高機器人在複雜場景下的解決能力,降低人工客服的成本,提供靈活的可視化多輪SOP流程配置後台,是非常必要的,至此開啟了自研多輪SOP流程引擎的里程。
在了解業務背景之後,可能很多人對客服場景中的多輪不太了解,這裡結合實際的人機對話來介紹下機器人是如何基於多輪解決用戶問題的。
從上面可以看出,使用者諮詢的過程按照問答的流程一步一步走完,期間並沒有人工客服的介入,在多輪的會話中,客服機器人解決了用戶的問題。那這裡可能會有個疑問,機器人是怎麼知道該問什麼該答什麼的?語意辨識or演算法識別,其實都不是,在配置後台有對應的可視化搭建頁面來配置多輪的流程。
在明確需求之後,透過什麼樣的技術能力建構機器人多輪SOP流程,是從0到1去實現還是基於開源的框架去實現是當時面臨的主要的選擇問題。從0到1去實現當然是最好的,也是很多技術同學挑戰自我的機會,不過當時面臨的主要問題是流程的搭建涉及Canvas畫布以及圖形編輯,這塊如果沒有專業知識的背景,難度相對會比較大,再加上當時業務的快速發展,亟需自研的多輪產品來做客製化的能力,所以當時選擇了基於開源的框架去實現。在開源框架的研究上,也參考了比較多流程配置的實現,具體如下:
每個框架都有自己的優缺點,最後選擇了基於antv-x6圖編輯引擎做二次開發,其主要原因如下:
明確了技術選型之後,接下來就是具體的技術實現了。多輪SOP流程引擎不僅需要前端這塊的設計實現,也離不開後端的設計實現,整體的架構設計如下圖所示:
前端配置層主要包括多輪SOP視覺化流程建置、上線管理、版本管理及介面管理四個功能模組。
後端服務層核心部分是在流程執行引擎模組,在實際應用場景中,會根據使用者輸入的問題來配對最適合的流程以解決使用者的問題。在執行符合的流程的過程中,執行引擎會先建立流程的上下文,這裡會從redis快取裡面載入上下文信息,根據上下文中記錄的流程執行狀態,確定從哪個節點開始執行,執行完以後進行上下文資訊的更新。當流程執行結束的時候,再做上下文的銷毀操作。
應用層主要是多輪SOP流程具體的使用場景,目前主要包括得物客服機器人和坐席輔助SOP兩個使用場景。
透過資料建模解決節點與節點之間關聯關係的問題。
在多輪SOP流程視覺化搭建過程中,畫布節點的創建與連結是最複雜的,有些多輪場景的節點超過100個,節點之間的關係在畫布上的體現就非常重要。目前業務自訂的節點有4個類,如下:
#每個節點都有自己的業務屬性,這裡主要透過資料建模的想法把每個節點的業務屬性以及關聯關係屬性做了抽象,其想法如下:
X6提供的原始資料類型相對比較簡單,只有id、html、data、shape等這些基本屬性字段,在實際的業務場景中需要基於原始的屬性字段去做擴展,X6提供的data屬性就能很好的滿足自訂業務資料的需求。分析四類業務節點之後,每個業務節點可以抽象化通用的資料模型,其主要欄位的意義如下:
不同的節點關聯關係透過語意化屬性表示之後,再基於X6提供的addNode/addEdge方法實現節點和邊的連接,這樣無論畫布中有多少個節點,節點之間的關聯關係都非常的明確。
透過RXJS事件訂閱和單向資料流解決不同功能模組資料流向的問題
在多輪SOP可視化搭建後台,有三個不同的功能區:工具列、畫布區和資料配置區,每個區域的操作都會涉及到節點資料的變更,如果沒有明確的資料流,將會導致資料變更混亂,保存的時候潛在資料錯亂的風險。這裡我們採用了RXJS事件訂閱以及單向資料流的設計模式,具體實作如下圖所示:
整個過程,從節點資料流向表單資料再流向快取數據,整個流向是單向的,不管在哪個模組觸發最終的流向都是資料記憶體快取。
對於資料流,目前有許多開源的框架可以使用,像是redux、vuex、dva等等,這裡為什麼要採用RXJS?主要是因為RXJS比較輕量,同時跟技術棧無關,後續可擴展性更好。
透過流程編排技術解決複雜多輪流程搭建的問題
截止到上半年,線上的多輪已經將近200個,有些複雜的流程包含100多個節點,對於100多個節點的複雜流程如果是一個節點一個節點去配置的話,那配置效率是極度低的,那我們是怎麼實現複雜流程快速搭建的呢?這裡用到了流程編排技術。
流程編排是指透過拖曳視覺化業務元件來編排業務流程,然後由流程引擎來執行這個流程。其標準化的協議是BPMN協議,BPMN協議包含了流程編排裡面的各種圖標、元件的含義和使用規範。在實際的應用情境中,我們並沒有完全使用BPMN協議,而是遵循了BPMN協議,做了自訂的元件元件。對於複雜的流程,我們透過不同的子流程進行編排,其想法如下:
這裡透過取消訂單多輪流程舉例,其流程拆分如下:
從上圖可以清楚的看到,取消訂單多輪流程包含了判斷使用者身分子流程、判斷使用者訴求子流程、取消訂單子流程這三個子流程,其中每個子流程又是一個獨立完整的流程。這樣透過三個子流程的編排,就可以建構出取消訂單複雜的多輪流程。
以上三點是在自研過程中遇到的主要的技術挑戰,其實在做的過程中,還有很多的難點,比如上百個節點如何做到渲染秒開、複雜的邏輯(複製、剪下)如何編排、複雜的判斷節點如何做到一鍵展開與折疊等等,這裡就不一一闡述了。
客服多輪SOP流程引擎的自研,完全取代了三方服務,不僅節省了每年至少幾十萬的外採服務成本,並且在業務上取得了不錯的成效,做到了靈活定制,快速支撐業務的發展。自上線之後,主要覆蓋得物客服機器人和坐席輔助機器人兩個業務場景,其中得物機器人多輪SOP流程有上百個,坐席輔助機器人多輪SOP流程有幾十個,在很大程度上提升了客服的解決率,減少了轉人工成本。上線之後,以今年其中一個月份的數據為例,客服機器人的解決率有比較明顯的提升,其中SOP的解決率相對於FAQ的解決率提升了15%多,SOP接待數是FAQ接待數的2倍多,在很大程度上節省了轉人工成本。
客服機器人多輪SOP流程引擎從立項到發布,整個週期差不多一個月左右的時間,從無到有的過程,是各投入方一起努力的結果。目前多輪流程引擎除了服務上述兩個場景之外,也在工單業務、質檢業務探索使用場景,同時也在持續豐富坐席輔助場景,為一線客服提供標準化的服務流程,提升一線客服的解決率。在功能上,我們也會持續完善流程引擎的能力,支援更多業務場景的使用,將流程引擎的能力不斷完善,打造成為業界的標竿。
以上是得物客服機器人多輪SOP流程引擎技術實踐的詳細內容。更多資訊請關注PHP中文網其他相關文章!