功能概述
表達式配置進?步提升阿?云智能客服對話機器?平臺的可擴展性,支持更為復雜的實際業務場景。
語法規范及說明
?前?持的表達式類型如下:
槽位:在填槽節點上配置的槽位,使? slotVars['完整槽位名'] 或slotVars['完整槽位名.origin']語法
進?引?,求值結果為對應的槽位值,該值在當前開啟意圖內有效,如:
sysVars['查天?意圖.地點'] 或sysVars['查天?意圖.地點.origin'],求值結果為對應的槽位值
或對應的歸?化值
變量:客戶??在平臺機器?內定義的變量,使? botVars['變量名稱']語法進?引?,求值結果為對應的變量值,該值在整通對話有效,如:botVars['城市名稱'];返回值為?定義變量“城市名稱”對應的值(如:北京)
服務返回參數:全局服務/?定義函數內返回的參數,使? svcVars['xxx']語法進?引?,該值在整通對話有效,如:svcVars['全局服務名稱.返回參數名']:返回值為引?的全局服務對應的某個返回參數值
對話環境參數:上游系統隨路傳?的變量,使? envVars['環境參數名稱']語法進?引?,求值結果為對應的變量值,該值僅當前輪對話有效,如:envVars['VENDOR_PARAM']:返回值為環境參數VENDOR_PARAM對應的值
常?的環境參數有:VENDOR_PARAM、SENDER_ID、SENDER_NICK、TAG、EMOTION_POLARITY、EMOTION_NAME、CURRENT_QUERY
舉例:envVars['VENDOR_PARAM']['key1']:返回VENDOR_PARAM中key1對應的值
系統參數:云?蜜機器?問答過程中,DS內?動維護的變量,使? sysVars['xxx']語法進?引?,在整通對話有效,分三?類:
獲取當前的?戶意圖: sysVars['?戶意圖']
獲取指定意圖的觸發次數,如:sysVars['查天?意圖.intentHitTimes']
Start節點或交互節點中的分?觸發計數,如:sysVars['節點名稱.分?名稱.hitTimes']
內置變量:系統內部提供的?些??具,通常以sys開頭,?前?持的如下:
sysTurn:當前對話輪數
sysDate:當前系統?期,格式為yyyy-MM-dd
sysTime:當前系統時間,格式為HH:mm:ss
sysQuery:獲取當前?戶query,等效于:envVars['CURRENT_QUERY']
sysGetRandom(n):返回指定范圍[1,n]內的隨機數字,如:sysGetRandom(10),求值后為7
實體:使?@符號作為實體名稱前綴進?輸?,通常?于DS畫布中條件判斷,僅當前輪對話有效,如:
@?戶編號:求值結果為識別到的“?戶編號”實體對應的某個實體成員(當為系統實體時,結果為對應的識別值,如:北京)。其中,當?于條件判斷時,其求值結果為true(識別到該實體)/false(未識別到該實體)
意圖:使?#符號作為意圖名稱前綴進?輸?,通常?于DS畫布中條件判斷,僅當前輪對話有效,如:
#查天?意圖:求值結果為該意圖置信度值(如:0.95)。其中,當?于條件判斷時,其求值結果為true(識別到該意圖)/false(未識別到該意圖)
使用舉例
條件判斷類
條件判斷類表達式求值結果只能是true/false,邏輯操作符(not,and, or)的操作數的類型必須為String、Integer、Boolean、null。常?舉例如下:
表達式內容 | 表達式含義 |
#查天?意圖 | 判斷用戶問句是否包含“查天氣意圖”; |
@sys.date | 判斷用戶問句是否包含“yyyy-MM-dd”格式的時間; |
sysDate>='2022-01-01' | 判斷當前日期是否在'2022-01-01'之后; |
botVars['?戶編號'] =='123456789' | 判斷自定義變量“?戶編號”是否等于“123456789”; |
sysQuery matches'.*獎牌.*' | 判斷用戶問句中是否包含“獎牌”二字; 說明 matches為內置關鍵字,?于嚴格匹配,使?標準正則表達式。 |
botVars['地點'].contains('北京') | 判斷自定義變量“地點”返回的值是否包含“北京”; |
(new java.util.Date().getTime() - new java.text.SimpleDateFormat("yyyy-MM-dd").parse(@sys_date).getTime())/1000>=1 * 30 * 24 * 3600 | 判斷?戶輸?的時間是否為1個?前。 |
變量賦值及回復話術類
可選槽:舊DS畫布需要配置可選槽位時,在新畫布中只需在?戶分?添加變量賦值即可,如:
表達式內容 | 描述 |
全局變量1=entityVars['地址實體'][0].normalizedValue |
|
全局變量2=sysDate | 將當前?期賦值給全局變量2; |
全局變量3=sysGetRandom(5) | 在[1,5]范圍內?成?個隨機數,并賦值給全局變量3。 |
高級用法舉例
列表型回復話術配置
場景:有些業務場景,三?服務返回的結果為列表型,且列表?度不定(如:庫存列表),如何通過表達式,?持運營?員在畫布上靈活配置回復話術。
?案:引?函數類的表達式求值語法,可直接配置到機器?說的?本框,格式為:<f:?法名 input=輸?表達式 output=輸出表達式/> ,其中元素說明如下:
?法名,?持的有:list(表示枚舉)
輸?表達式:?持所有可求值的表達式,返回類型需與函數標識(list)?致
輸出表達式:?持所有可求值的模板表達式(與回復話術?致)。
內置的變量有:&list_index表示list的下標、&list_element表示list中的元素。
如果list中每個元素為Map,則Map中key的取法為:&list_[key]。
舉例:
Json數組型:
svcVars['查明細服務.result']值為:{"ret":[{"category":"?裝","detail":"?貨"},{"category":"玩具","detail":"有貨"}]}
表達式為:<f:list input=svcVars['查明細服務.result']['ret'] output=明細-第${&list_index+1}項:品類${&list_category }, 狀態:${ &list_detail},/>
對應的求值結果為:明細-第1項:品類 ?裝, 狀態:?貨;第2項:品類 玩具, 狀態:有貨,
簡單數組型:
vcVars['查列表服務.result']值為:["?裝","玩具"]
表達式為:<f:list input=svcVars['查列表服務.result'] output=第${&list_index+1}項:${&list_element},/>
對應的求值結果為:第1項:?裝,第2項:玩具,
其他
獲取當前指定實體的原值:rawEntities['實體名'][0].entityValue
暫不?持場景
以#開頭的表達式(意圖),在變量賦值及回復話術暫不?持。
以@開頭的表達式(實體),在回復話術中暫不?持。