中文字幕无码久久精品,13—14同岁无码A片,99热门精品一区二区三区无码,菠萝菠萝蜜在线观看视频高清1

您當前的位置是:  首頁 > 新聞 > 國內(nèi) >
 首頁 > 新聞 > 國內(nèi) >

Chatopera多輪對話設(shè)計器

2018-08-01 11:23:05   作者:   來源:CTI論壇   評論:0  點擊:


多輪對話設(shè)計器

多輪對話設(shè)計器

概述

多輪對話設(shè)計器 (Conversation Designer)是以自然語言為輸入,定義聊天機器人邏輯思維的工具。它可以很方便的通過Chatopera支持的腳本語法描述復(fù)雜的對話邏輯,并且通過函數(shù)的形式集成企業(yè)的其它服務(wù)。企業(yè)的業(yè)務(wù)人員可以很容易的學(xué)習(xí)腳本語法,制作滿足企業(yè)業(yè)務(wù)需求的聊天機器人。
多輪對話設(shè)計器是設(shè)計滿足業(yè)務(wù)需求的對話機器人的PC端應(yīng)用程序,現(xiàn)已支持Windows和Mac OSX平臺。多輪對話能力是聊天機器人模仿人的對話能里的一大挑戰(zhàn),在復(fù)雜的上下文和需要很多背景知識的前提下,現(xiàn)有的人工智能技術(shù)是無能為力的,在Chatopera,我們相信在企業(yè)服務(wù)中,當話術(shù)或流程固定的情況下,依賴Chatopera的產(chǎn)品可以輸出用對話完成任務(wù)的服務(wù),比如用對話完成點餐、報銷、請假。這些對話可以在企業(yè)的聊天工具中,也可以通過智能音箱的等其他客戶端。

安裝

僅支持Mac OSX和Windows操作系統(tǒng)。

下載地址

下載地址:
https://www.chatopera.com/product/conversation-designer
  • MacOS:dmg為文件后綴的安裝文件,雙擊打開,根據(jù)安裝向?qū)О惭b。
  • Windows:exe為文件后綴可執(zhí)行文件,雙擊打開,根據(jù)安裝向?qū)О惭b。

啟動應(yīng)用

  • 安裝完打開應(yīng)用程序,如下圖:
多輪對話設(shè)計器打開后頁面
可能遇到的問題
1. Macos上首次啟動警告
MacOS權(quán)限問題
解決方案
在應(yīng)用中心,找到“多輪對話設(shè)計器”:
應(yīng)用中心
選擇“多輪對話設(shè)計器”并且右鍵:
右鍵打開
點擊“打開”(“Open”)。

快速開始

下載安裝包后,雙擊打開,進入安裝向?qū)А?br /> 安裝完打開應(yīng)用圖標后進入主面板,如下圖:
應(yīng)用主面板
 

導(dǎo)入示例程序

下載示例程序包文件:小叮當-1.0.0-conversations.c66
https://github.com/chatopera/conversation-sampleapp
示例程序下載地址
在主面板點擊界面的右上方的“導(dǎo)入”按鈕,選擇剛才下載的示例程序小叮當-1.0.0-conversations.c66如圖:
導(dǎo)入對話框
導(dǎo)入成功,可以看到在聊天機器人界面有一條數(shù)據(jù)顯示,“名字 小叮當”等;點擊小叮當?shù)?ldquo;管理”按鈕,可以看到它的多輪對話列表,包括:chatopera,profile,weather。如下圖:
多輪對話列表
對話 功能
chatopera 關(guān)于Chatopera的公司信息
profile 機器人的畫像
weather 提供天氣查詢功能的對話

測試示例程序

可以針對上面的三個多輪對話,進行一番聊天測試,下面測試主要以“問天氣”為例子。
選擇 “weather” 對話的編輯按鈕,進入weather對話的編輯窗口,包括:
概念 描述
腳本 按照多輪對話語法規(guī)則來描述機器人對話邏輯
函數(shù) 執(zhí)行JavaScript代碼的環(huán)境,聲明的接口可以直接從腳本中調(diào)用
日志 函數(shù)中debug方法的輸出
邏輯 聊天機器人的思維邏輯導(dǎo)圖,保存腳本后自動生成
對話 實時測試聊天機器人的窗口
在“對話”區(qū)域的下方輸入框輸入:你知道哪些天氣信息
多輪對話編輯窗口
點擊“發(fā)送”按鈕,可以看到對話區(qū)域有了問答的信息流,并且“邏輯”區(qū)域也有了對話狀態(tài),對話路徑顯示“綠色”高亮。
測試對話
在此界面可以進行多輪對話測試,如下截圖:
多輪對話
 

增加新的對話

測試新對話
我:今天北京適合游玩么?
機器人:風(fēng)清氣爽,當然可以啊~
在腳本區(qū)域可以自行設(shè)計腳本,非常簡單,例如增加:
+ 今天 (*) 適合游玩么?
- 風(fēng)清氣爽,當然可以啊~
點擊界面上方“保存”按鈕,會使得剛才定義的對話生效,并且可以在聊天區(qū)域直接測試。

保存新版本

剛才點擊“保存”按鈕時,同時將weather的對話生成一個快照,我們隨時可以回退到某個快照。
查看快照
回到聊天機器人列表頁面,可以點擊“發(fā)布”按鈕,可以將當前聊天機器人生成新版本,相關(guān)的信息如圖:
發(fā)布新版本
點擊上圖的“確認”按鈕,發(fā)布新版本成功,點擊“版本管理”,看到剛才發(fā)布的1.0.1版本的信息。

各個版本之間比較

對于聊天機器人的發(fā)布的各個版本差異,可以使用版本比較工具,比較具體的差異,包括:腳本比較和函數(shù)比較。 點擊上圖1.0.1對應(yīng)的“對比差異”,可以“對比變化”界面,其中分為三個部分,
    - “左上”為被對比的參考版本;本例子為:1.0.0
    - “右上”為要對比的目標版本,本例子為:1.0.1
    - “下方”為兩版本數(shù)據(jù)的差異,具體:
        * 綠色:新增的內(nèi)容;
        * 紅色:刪除的內(nèi)容;
        * 灰色:沒有變化的內(nèi)容;
剛進入“對比變化”界面,默認對比的是:函數(shù),本例子請在選擇“版本號”的右邊切換“腳本”為“對話”,如圖:
版本之間比較差異
對比的差異部分為綠色,表示新增。

導(dǎo)出特定版本

多輪對話設(shè)計器屬于設(shè)計階段,在機器人滿足需求后,可以導(dǎo)出為對話應(yīng)用.c66文件,方便分發(fā)和部署。在生產(chǎn)環(huán)境,導(dǎo)入到智能問答引擎中,作為多輪對話應(yīng)用的運行時。
在“版本管理”界面,選擇剛才發(fā)布的“1.0.1”的“導(dǎo)出”,可以選擇一個路徑存儲該導(dǎo)出的文件,如圖:
導(dǎo)出文件

腳本語法

術(shù)語

在正式介紹腳本語法前,我們先來認識下面的術(shù)語:
概念 描述
對話 滿足設(shè)定需求的多輪對話
輸入 用戶向聊天機器人發(fā)送的消息的文字形式
觸發(fā)器 匹配用戶輸入文字的字符串,可以聲明槽位,當用戶的輸入發(fā)生時,會按照算法順序匹配觸發(fā)器
回復(fù) 機器人回復(fù)用戶輸入的文字
多輪對話 根據(jù)上一次回復(fù)的狀態(tài),聲明下輪對話的優(yōu)先匹配規(guī)則
函數(shù) 可以從腳本中接受輸入,并通過JavaScript執(zhí)行任務(wù)返回結(jié)果的代碼
對話

   

觸發(fā)器

觸發(fā)器是對話的基礎(chǔ),當用戶向聊天機器人發(fā)送一條消息時,機器人引擎會從所有定義的觸發(fā)器中找到匹配的一個。在機器人引擎中,觸發(fā)器用半角字符加號( + )表示。機器人的回答用半角字符減號( - )表示。
例如,我們可以這樣定義一個對話:
+ 晚飯吃什么
- 北京烤鴨   
注意:這里( + )和( - )和文字之間需要隔一個空格。

槽位

為了讓觸發(fā)器能適應(yīng)復(fù)雜的需求,機器人引擎使用槽位規(guī)則,槽位既能讓規(guī)則具有更好的匹配能力,也能讓回復(fù)和函數(shù)中使用不同槽位的值。
注意:下面的某些槽位左右?guī)в锌崭瘢@些空格是必須的。

通用槽位

解釋示例:通用槽位
匹配:客服你好
匹配:你好
匹配:你好嗎
通用槽位會匹配零到無窮個字符、單詞。此處的輸入也會被系統(tǒng)捕獲或者存儲。
+ (*) 你好 (*)
- 歡迎光臨

確定長度槽位

解釋示例:確定長度槽位
匹配:早安北京
不匹配:早安烏魯木齊
如果你知道你想要的字符長度,可以試試確定長度槽位。此處的槽位可以被系統(tǒng)捕獲,而且可以在回答中使用
語法為:*n, 其中n代表長度。
+ 早安 *2
- 早安

可控長度槽位

解釋示例:可控長度槽位
匹配:早安
匹配:早安北京
匹配:早安哈爾濱
匹配:早安烏魯木齊
不匹配:早安君士坦丁堡
如果只想匹配一些字符,可控長度的槽位是個不錯的選擇。語法為:*~n, n代表你想匹配的最大長度
+ 早安 *~4
- 早安

區(qū)間槽位

解釋示例:區(qū)間槽位
匹配:早安北京
匹配:早安烏魯木齊
不匹配:早安
如果想匹配一個確定的區(qū)間,比如2到4個字符之間,區(qū)間槽位絕對可以滿足需要。語法為:*(最短-最長),此槽位可以被系統(tǒng)捕獲和用在回復(fù)中。
+ 早安 *(2-4)
- 早安

必選項

解釋示例:必選項
匹配:早安北京
不匹配:早安西安
不匹配:早安
必選項用在你有一系列可選項,但是必須有一個被匹配。輸入中的可選項會被系統(tǒng)捕獲和用在回復(fù)中
+ 早安(北京|上海|天津)
- 早安

可選項

解釋示例:可選項
匹配:早安北京
匹配:早安美麗的北京
不匹配:早安熱鬧的北京
可選項用來確定一些額外的內(nèi)容
+ 早安 [美麗的] 北京
- 早安

回復(fù)

在觸發(fā)器中,我們已經(jīng)學(xué)到了怎么添加一個回答。事實上你可以添加任意數(shù)量的回答。這里還有一些高級功能可以幫助你完成更多的任務(wù)。

簡單形式

+ 在嗎
- 你好,在的
如果添加了多個回答,系統(tǒng)會從中隨機挑選一個作為回復(fù), 然后丟掉這個回答。
+ 在嗎
- 親,在的
- 親,有什么需要幫助
- 你好,請問遇到什么問題了嗎?
所謂丟掉這個答案,是指機器人針對同一個用戶,在半個小時內(nèi)再次匹配上該觸發(fā)器時,選擇回復(fù)時,不考慮使用過的回復(fù)。 在一個觸發(fā)器中聲明多個回復(fù)后,保存,邏輯中將出現(xiàn)分支。
機器人對話邏輯
如果不想讓系統(tǒng)丟掉使用過的回復(fù),可以在回復(fù)前添加{keep}。
+ 在嗎
- {keep} 親,在的
- 親,有什么需要幫助
- 你好,請問遇到什么問題了嗎?
也可以在觸發(fā)器前添加{keep},就不用在每個回答中都添加了
+ {keep} 在嗎
- 親,在的
- 親,有什么需要幫助
- 你好,請問遇到什么問題了嗎?
如果回答很長,可以通過“^”分割以方便可讀性。可以通過“\n”實現(xiàn)換行
+ 在嗎
- 你好,這里是客服中心,\n
^ 請問遇到什么問題了嗎?   
它等價于
+ 在嗎
- 你好,這里是客服中心,請問遇到什么問題了嗎?

槽位取值

解釋示例:槽位取值
匹配:小明比小紅高
回答:你確定小明比小紅高嗎?
有些時候,在回答中需要使用輸入中的槽位值,這時可以使用達到目的。
+ 我是 *~3
- 你好,
如果用戶輸入,“我是張三”,那么系統(tǒng)將回復(fù)“你好,張三”,當有多個槽時,可以使用多個。
+ *2 比 *2 高
- 你確定比高嗎?
在對話中,我們有時候會需要以前的槽位值,看一下下面這個例子:
+ 我叫 *~3
- 你好,

    + 你猜我叫什么?
    % 你好,
    - 你剛說了,你叫
代表了以前的槽位。其中N代表在在對話中之前的問答,M代表捕獲的位移。
槽位取值
 
此處,還有一個重要語法:%。(%) 開頭的句子代表觸發(fā)器“你猜我叫什么?”只服務(wù)于“你好,”作為回復(fù)時,它會被優(yōu)先匹配。上一輪對話的回復(fù)通過(%)的方式指定了接下來的邏輯,形成多輪對話。 關(guān)于(%)的用法,后文還會進行詳細介紹,此處,讀者只需要掌握從上下文的槽位取值便可。
另外,(+, %, -) 前的空格不是必須的,在多輪對話中,空格可以增強腳本的可讀性,但是系統(tǒng)是忽略的。

重定向 {@__reply__}

有些時候,在問答對中重用一些回復(fù)能使編寫腳本效率更高,這時可以定義一個問答對,并在腳本其它位置引用它。
+ 在嗎
- {@__greeting__} 請問有什么能幫助您?

+ __greeting__
- 親,在的。
- 你好,客服小美為您服務(wù)
- 親親,稍等,客服馬上就到
引用的方式就是 “{@觸發(fā)器}”,觸發(fā)器中的下劃線不是必須的,但是它能增強腳本的可讀性。

多輪對話

在實際應(yīng)用中,和機器人聊天時,很可能要通過多輪對話完成一個任務(wù)。我們用(%)來定位之前回復(fù),聲明新的觸發(fā)器,(%)后的內(nèi)容是和某個回復(fù)內(nèi)容一樣的字符串。
+ *
- 您身高多少

  + *(3-5)
  % 您身高多少
  - 我的身高也是
讓我們一起看看這個例子:
  1. 當用戶輸入任何文字,我們用通用槽位觸發(fā)回答,然后系統(tǒng)回復(fù)“您身高多少”。
  2. 當用戶繼續(xù)輸入時,系統(tǒng)會先從歷史中查看之前的回復(fù)中是否有對應(yīng)的上下文,在這里指的是“% 您身高多少”
  3. 最后,如果用戶輸入3到5個字符,系統(tǒng)匹配觸發(fā)器“+ *(3-5)”, 并且回復(fù)“我也是”。“”代表的就是用戶輸入的內(nèi)容。

函數(shù)

函數(shù)是一個強大而有趣的設(shè)計。在回復(fù)中,可以使用函數(shù)來獲取整條消息對象,用戶對象或者其它資源,比如數(shù)據(jù)庫。把槽位值當做變量傳給函數(shù),例如下面這個例子:
+ 我的用戶名是 *(2-10)
- ^getUserAccount()
所以,調(diào)用函數(shù)的方式就是使用“^”。在函數(shù)的編輯窗口中,可以這樣定義:
exports.getUserAccount(account, cb) {
  cb(null, "對不起,系統(tǒng)沒有找到" + account);
}
函數(shù)的聲明中,參數(shù)列表首先是槽位的值,可以傳多個,然后最后一個參數(shù)始終是回調(diào)函數(shù)(cb),cb的參數(shù)列表為(error, text)。text作為文本添加到回復(fù)中。

復(fù)合函數(shù)

在回復(fù)中,可以添加任意多的函數(shù),比如
+ ...
- 聯(lián)合 ^callFunction1() 和 ^callFunction2()

嵌套函數(shù)

在函數(shù)的回調(diào)函數(shù)中,函數(shù)名會被解析成對應(yīng)的函數(shù),所以放心的在回復(fù)中添加任意合法的函數(shù),比如在腳本中這樣寫:
+ ...
- ^nestedAFunction()
然后,在函數(shù)中,定義如下:
exports.nestedAFunction = function(cb) {
  cb(null, "張三 ^nestedBFunction()");
}
exports.nestedBFunction = function(cb) {
  cb(null, "和李四");
}

總結(jié)

以上是多輪對話設(shè)計器 v1.x 版本中支持的腳本語法,這些語法能夠保證業(yè)務(wù)人員實現(xiàn)滿足需求的聊天機器人,除了函數(shù)部分的有一點門檻外,其它內(nèi)容是非常容易掌握的。對于函數(shù),只需要一點JavaScript基礎(chǔ)知識,就可以掌握。

示例應(yīng)用

本節(jié)介紹使用多輪對話設(shè)計器實現(xiàn)一個“聊天機器人”的具體過程。我們以實現(xiàn)天氣問答機器人為例,我們選擇這個場景并不是因為它簡單,而是因為它容易理解,使用多輪對話設(shè)計器可以實現(xiàn)更復(fù)雜,更有價值的應(yīng)用。我們先一睹為快,這個機器人是什么樣子的。
視頻:天氣查詢機器人Demo
是不是很實用?如果你掌握了多輪對話設(shè)計器,就可以實現(xiàn)聊天機器人。

需求分析

首先,我們需要梳理一下需求:
1) 我想知道任意城市的天氣信息,比如“今天上海天氣怎么樣”;
2) 我還比較關(guān)心空氣,我可以通過“今天上?諝庠趺礃”獲得空氣質(zhì)量信息;
3) 我想知道今天適不適合戶外運動,就問“今天上海適合運動么”;
4) 如果我問了一個城市的天氣狀況,我還想繼續(xù)詢問這個城市更多信息,這樣我不用每次都告訴機器人城市名稱。
當然,我的每個意圖都有多種表述方式,機器人能支持一些變化的問法。如果我的問題不夠嚴謹,機器人還應(yīng)該提醒我合理的表達。

調(diào)研提供天氣信息查詢的API

現(xiàn)在很多服務(wù)以API的形式提供,從搜索引擎中查找“天氣查詢服務(wù) API”,我們就能得到一些供應(yīng)商,經(jīng)過一些比較,我選擇了和風(fēng)天氣,它數(shù)據(jù)豐富,免費額度大方。
和風(fēng)天氣
AI音箱
Chatopera與杭州任你說科技達成戰(zhàn)略合作伙伴關(guān)系,所以,我們的對話系統(tǒng)產(chǎn)品與任你說音箱可以直接集成。
任你說官網(wǎng)
 
 

第一條規(guī)則

第一次打開多輪對話設(shè)計器后,我們看到如下的面板,我們稱之為主面板。
和風(fēng)天氣
點擊新建按鈕,彈出創(chuàng)建機器人的表單:
創(chuàng)建聊天機器人
填入“小叮當”,當前多輪對話設(shè)計器支持中文(zh_CN)和英文(en_US),我們選擇“zh_CN”,點擊“確認”。然后我們就得到了一個聊天機器人。
聊天機器人
在操作中,有幾個按鈕:
  • 管理:管理聊天機器人的多輪對話。
  • 版本管理:管理不同版本的機器人,導(dǎo)出機器人和在不同版本之間進行比對。
  • 環(huán)境變量:機器人函數(shù)中依賴的全局變量,這些變量在“設(shè)計對話”的階段和在IT人員“部署到生產(chǎn)環(huán)境”下的值是不同的,比如一些接口服務(wù)的認證鍵值對。
  • 發(fā)布:發(fā)布當前機器人為最新版本。
  • 刪除:將機器人刪除。
點擊“管理”,進入多輪對話管理頁面,點擊“新建對話”,在彈出的窗口中,填寫“對話名稱”為“weather”,點擊“確認”。這時,我們看到了新建的對話,我們將修改它的內(nèi)容完成天氣對話服務(wù)。
創(chuàng)建對話
點擊“編輯”,進入對話編輯窗口。在左側(cè)的“腳本區(qū)域”,寫下第一條規(guī)則。
+ 今天 (*) 天氣 [怎么樣]
- {keep} 天氣挺好的
點擊“保存”,這時右側(cè)的“邏輯區(qū)域”有了變化,出現(xiàn)了一個線條,在線條左右兩端分別是問題和答案。在“對話區(qū)域”,我們輸入“今天北京天氣怎么樣”,點擊發(fā)送,這時機器人回復(fù)了。
對話編輯窗口
從我們需求上看,這沒什么用,但是它工作了,我們就一點點優(yōu)化它。對于在這條規(guī)則中,我們使用的語法,(*)代表一個槽位,代表在回復(fù)中取槽位的值,[怎么樣]是可有的字符串,{keep}代表這條規(guī)則始終生效,keep涉及到對話的狀態(tài)管理,我們將在文檔中提供更多規(guī)則的描述,現(xiàn)在,讀者看懂本示例就可以了。

添加函數(shù)

在多輪對話設(shè)計器中,怎么請求和風(fēng)天氣的數(shù)據(jù)呢?使用函數(shù)。函數(shù)是多輪對話支持的使用JavaScript實現(xiàn)的程序。
我們在“對話編輯窗口”點擊函數(shù),粘貼如下代碼:
var WForewast = function (apiKey) {

    if (!apiKey) throw new Error('Invalid token, get it from http://www.heweather.com/my/service');
    this.key = apiKey;
}


WForewast.prototype.getWeatherByCity = function (city) {
    return new Promise((resolve, reject)=>{
        let url =  "https://free-api.heweather.com/v5/weather?city=" + encodeURIComponent(city) + "&key=" + this.key
        http
            .get(url)
            .then((res)=>{
                resolve(res.data.HeWeather5[0].suggestion);
            })
            .catch(function (err) {
                if (err) return reject(err);
            });
    })
}

const wf = new WForewast('182f1b6826d94c6285a489d2414f3ad0');


exports.getWeatherByCity = function(city, cb){
    debug("getWeatherByCity: %s", city);
    wf.getWeatherByCity(city)
        .then((suggestions)=>{
            cb(null, {
                text: suggestions["comf"]["txt"]
            })
        }, (err)=>{
            debug("error:%j", err)
            cb(null, {
                text: `很抱歉,沒有獲得${city}的天氣信息。`
            })
        })
}

exports.getAirByCity = function(city, cb){
    debug("getAirByCity: %s", city);
    wf.getWeatherByCity(city)
        .then((suggestions)=>{
            cb(null, {
                text: suggestions["air"]["txt"]
            })
        }, (err)=>{
            cb(null, {
                text: `很抱歉,沒有獲得${city}的空氣信息。`
            })
        })
}


exports.getSportByCity = function(city, cb){
    debug("getSportByCity: %s", city);
    wf.getWeatherByCity(city)
        .then((suggestions)=>{
            cb(null, {
                text: suggestions["sport"]["txt"]
            })
        }, (err)=>{
            cb(null, {
                text: `很抱歉,沒有獲得${city}的信息。`
            })
        })
}

exports.getDresscodeByCity = function(city, cb){
    debug("getDresscodeByCity: %s", city);
    wf.getWeatherByCity(city)
        .then((suggestions)=>{
            cb(null, {
                text: suggestions["drsg"]["txt"]
            })
        }, (err)=>{
            cb(null, {
                text: `很抱歉,沒有獲得${city}的信息。`
            })
        })
}
在函數(shù)中,我們實現(xiàn)了根據(jù)城市請求天氣、空氣質(zhì)量、著裝建議和運動建議的接口,分別是getWeatherByCity,getAirByCity,getDresscodeByCity和getSportByCity。
細心的讀者會發(fā)現(xiàn),在函數(shù)中,多輪對話設(shè)計器直接支持了http,debug作為工具類,發(fā)起網(wǎng)絡(luò)請求和輸出日志信息。這兩個接口極大的擴展了函數(shù)的能力,我們也會在函數(shù)中詳細描述它們的使用。
然后,回到“腳本區(qū)域”,修改一下規(guī)則,更新如下:
+ 今天 (*) 天氣 [怎么樣]
- {keep} ^getWeatherByCity()
在回復(fù)中,我們調(diào)用了getWeatherByCity,并且傳入了城市名稱。 接著,在“對話區(qū)域”,輸入“今天北京天氣怎么樣”,回復(fù)與上次不一樣了。
測試對話
這次,我們看到了期望的回復(fù),正是從和風(fēng)天氣返回的北京今天的天氣狀況。

使用環(huán)境變量

在上面的函數(shù)中,我們有一個敏感的信息:和風(fēng)天氣的API密鑰。在實際應(yīng)用中,我們希望設(shè)計階段部署階段,它的值是不同的。這時,就需要使用環(huán)境變量,環(huán)境變量正是為解決這個問題而設(shè)計的。
回到主面板,在“小叮當”操作中,點擊環(huán)境變量,創(chuàng)建如下鍵值對:
設(shè)置環(huán)境變量
讀者可以從和風(fēng)天氣獲得該密鑰,為驗證用途,可以粘貼下面的值:
"HEWEATHER_URL": "https://free-api.heweather.com/v5",
"HEWEATHER_KEY": "182f1b6826d94c6285a489d2414f3ad0"
保存后,回到天氣對話腳本的“對話編輯窗口”,在函數(shù)中,使用下面的腳本:
var WForewast = function (apiKey) {
    if (!apiKey) throw new Error('Invalid token, get it from http://www.heweather.com/my/service');
    this.key = apiKey;
}


WForewast.prototype.getWeatherByCity = function (city) {
    return new Promise((resolve, reject)=>{
        let url = config["HEWEATHER_URL"] + "/weather?city=" + encodeURIComponent(city) + "&key=" + this.key
        http
            .get(url)
            .then((res)=>{
                resolve(res.data.HeWeather5[0].suggestion);
            })
            .catch(function (err) {
                if (err) return reject(err);
            });
    })
}

const wf = new WForewast(config["HEWEATHER_KEY"]);


exports.getWeatherByCity = function(city, cb){
    debug("getWeatherByCity: %s", city);
    wf.getWeatherByCity(city)
        .then((suggestions)=>{
            cb(null, {
                text: suggestions["comf"]["txt"]
            })
        }, (err)=>{
            debug("error:%j", err)
            cb(null, {
                text: `很抱歉,沒有獲得${city}的天氣信息。`
            })
        })
}



exports.getAirByCity = function(city, cb){
    debug("getAirByCity: %s", city);
    wf.getWeatherByCity(city)
        .then((suggestions)=>{
            cb(null, {
                text: suggestions["air"]["txt"]
            })
        }, (err)=>{
            cb(null, {
                text: `很抱歉,沒有獲得${city}的空氣信息。`
            })
        })
}


exports.getSportByCity = function(city, cb){
    debug("getSportByCity: %s", city);
    wf.getWeatherByCity(city)
        .then((suggestions)=>{
            cb(null, {
                text: suggestions["sport"]["txt"]
            })
        }, (err)=>{
            cb(null, {
                text: `很抱歉,沒有獲得${city}的信息。`
            })
        })
}

exports.getDresscodeByCity = function(city, cb){
    debug("getDresscodeByCity: %s", city);
    wf.getWeatherByCity(city)
        .then((suggestions)=>{
            cb(null, {
                text: suggestions["drsg"]["txt"]
            })
        }, (err)=>{
            cb(null, {
                text: `很抱歉,沒有獲得${city}的信息。`
            })
        })
}
這次,代碼內(nèi)容和前一版本相比,使用了config對象,config是一個包含環(huán)境變量的JSON數(shù)據(jù)。所以,我們更加利于將來部署對話應(yīng)用了。

支持更多對話

回想我們需要的幾種天氣信息,我們根據(jù)需求變更腳本,一個滿足需求的腳本呈現(xiàn)如下:
// 技能介紹

+ 你知道哪些天氣信息
- 我知道今天的空氣,著裝建議和適不適合運動

// 天氣

+ 今天 (*) 天氣 [怎么樣]
- {keep} ^getWeatherByCity()

+ [今天] (天氣|氣候) [怎么樣]
- {@__wf_guide_}

+ (*) 今天天氣 [怎么樣]
- {keep} ^getWeatherByCity()

    + (*) 空氣 (*)
    % ^getWeatherByCity()
    - {keep} ^getAirByCity()


+ __wf_guide_
- {keep} 添加城市名哦,比如“今天北京天氣怎么樣”或者“北京天氣怎么樣”
- 我需要知道城市名稱,比如“今天北京天氣怎么樣”或者“北京天氣怎么樣”
- 要告訴我城市名,比如“今天北京天氣怎么樣”或者“北京天氣怎么樣”


// 空氣

+ [今天] 空氣 [怎么樣]
- {@__wf_guide_air}

+ (*) 今天空氣 [怎么樣]
- {keep} ^getAirByCity()

+ 今天 (*) 空氣 [怎么樣]
- {keep} ^getAirByCity()

+ __wf_guide_air
- {keep} 添加城市名哦,比如“今天北京空氣怎么樣”或者“北京空氣怎么樣”
- 我需要知道城市名稱,比如“今天北京空氣怎么樣”或者“北京空氣怎么樣”
- 要告訴我城市名,比如“今天北京空氣怎么樣”或者“北京空氣怎么樣”


// 運動

+ [今天] 適(合|宜)運動(么|嗎)
- {@__wf_guide_sport}

+ (*) 今天適(合|宜)運動(么|嗎)
- {keep} ^getSportByCity()

+ 今天 (*) 適(合|宜)運動(么|嗎)
- {keep} ^getSportByCity()

+ __wf_guide_sport
- {keep} 添加城市名哦,比如“今天北京適合運動么”或者“北京今天適合運動么”
- 我需要知道城市名稱,比如“今天北京適合運動么”或者“北京今天適合運動么”
- 要告訴我城市名,比如“今天北京適合運動么”或者“北京今天適合運動么”


// 衣著

+ [今天] 適(合|宜)穿什么
- {@__wf_guide_dresscode}

+ (*) 今天適(合|宜)穿什么
- {keep} ^getDresscodeByCity()

+ [今天] (*) 適(合|宜)穿什么
- {keep} ^getDresscodeByCity()


+ __wf_guide_dresscode
- {keep} 添加城市名哦,比如“今天北京適合穿什么”或者“北京今天適合穿什么”
- 我需要知道城市名稱,比如“今天北京適合穿什么”或者“北京今天適合穿什么”
- 要告訴我城市名,比如“今天北京適合穿什么”或者“北京今天適合穿什么”
這也就是我們在天氣查詢機器人Demo中看到的機器人的腳本,在設(shè)計過程中,我們通過對話區(qū)域來測試機器人的回復(fù)是否符合預(yù)期,我們通過邏輯窗口來查看當前機器人的思維邏輯導(dǎo)圖,當前機器人對話的狀態(tài)會被高量,被命中的規(guī)則呈現(xiàn)為路徑。
機器人思維邏輯
另外,在設(shè)計過程中,每次保存自動為腳本和函數(shù)生成快照,使用快照下拉列表,我們能方便的回退。
快照管理
多輪對話設(shè)計器中,業(yè)務(wù)人員可以更專注于對話機器人的對話邏輯滿足需求。

發(fā)布機器人

現(xiàn)在,有了可以工作的腳本,我們想發(fā)布一個版本,這時回到主面板,點擊“發(fā)布”,填入如下信息,點擊“確認”。
發(fā)布機器人導(dǎo)出機器人
最終,我們需要得到一個“服務(wù)”,它能時刻被訪問,以及和AI音箱集成。我們需要將天氣機器人導(dǎo)出為對話應(yīng)用,然后部署到智能問答引擎。在主面板,點擊版本管理,我們看到操作中有三項。
  • 對比差異:在多個版本中比較差異,包括腳本和函數(shù)。
  • 導(dǎo)出:將機器人導(dǎo)出為對話應(yīng)用文件。
  • 覆蓋:使用這個版本覆蓋當前機器人,包括腳本和函數(shù)等。
多輪對話設(shè)計器支持導(dǎo)出機器人后,極大的方便了分發(fā)和部署。

【免責(zé)聲明】本文僅代表作者本人觀點,與CTI論壇無關(guān)。CTI論壇對文中陳述、觀點判斷保持中立,不對所包含內(nèi)容的準確性、可靠性或完整性提供任何明示或暗示的保證。請讀者僅作參考,并請自行承擔(dān)全部責(zé)任。

專題