2017 年 3 月

第 32 卷,第 3 期

本文章是由機器翻譯。

Bot Framework - 讓 Bot 更智慧

Kevin 艾| 2017 年 3 月

Microsoft Bot 架構、 LUIS、 Azure Bot 服務、 Azure 函式,我聽到有人到處這些天︰ bot 是新的應用程式。其中一個原因是方便與它們帶到一般工作的效率。把它︰ 而不是跳躍 Bing 或 Google 的兩個或三個 Web 站台或多個一個班機或保留項目在餐廳裡,您就可以直接詢問某種類型的數位助理,為您執行項目。但可能會有應用程式開發人員採用這種趨勢,更重要的原因︰ 行動應用程式變得越來越昂貴而建立。建置一個行動應用程式讓 30000 和一半一百萬美金,每個平台之間的任何位置︰ iOS、 Android 和 Windows。

為 true,有一些跨平台技術,例如 Unity 或 Xamarin —,可協助減輕開發多個平台的成本。但 bot 會逐漸成為另一個選項,典範轉移採用交談的介面。這個方法會利用數千年來使用最高的通訊,並跨越語音和文字 (想像 Skype 或 Messenger)。交談的 UI (CUI) 也可以增強影像、 視訊和傳統的控制項,例如按鈕和 CardActions。在 bot,重點在於簡單和自然的層面的輸入,而不是製作的傳統控制項的 UI。

好處? 可能建置每個螢幕開發架構的不同 Ui 離開組織時,彙總節省數十億金錢,並改為採用交談跨所有裝置和外型規格的畫面,或不含運作的介面。比方說,我建置了使用中的適用性 bot,可協助您尋找執行循環、 登山、 滑雪和其他鄰近的追蹤。(請造訪bit.ly/2knZVbr加入 Skype。) 應用程式功能豐富的 UI 和控制項,雖然 bot 旨在交談式的輸入,了解所示**[圖 1**。

顯示您的使用中的適用性 Bot 軌跡
[圖 1 顯示您的使用中的適用性 Bot 軌跡

影響超出應用程式開發。Bot 可以解決問題的網站,也變得越來越不容易瀏覽,與許多使用老舊或過時的 Web 架構或標準。嘗試完成任何客戶服務 Web 站台上的工作,例如,您可能會花費很好的半個小時,嘗試瀏覽的網站] 功能表。

而且沒有 bot 的唯一範圍。想像一下卡遊戲應用程式,例如 [接龍]。之前 bot,我要建置每個平台的版本。現在,不過,bot 會中斷是平台鎖定設陷。突然,我的 Windows 架構應用程式處理為 bot 我朋友的所有 iPhones 或 Androids。為什麼會這樣? 由於 bot 都會在通道中 — Skype Telegram、 Facebook Messenger、 Slack 和其他常見的應用程式平台。

我認為一定很酷建置使用 Microsoft Bot 架構,因此,全球最受歡迎的遊戲**[圖 2**顯示 [接龍],所有準備好播放我。(請造訪bit.ly/2jrzP7S加入 Skype。)

我的接龍 Bot Skype 上用來處理每週 500000 要求
[圖 2] 上每週的 Skype 處理 500000 要求我接龍 Bot

若要開始建立 bot,請移至 Microsoft Bot 架構網站 (dev.botframework.com)。您可以建置 bot 使用 Microsoft.NET Framework 或 Node.js,無論您偏好的技術。最近,Microsoft 服務加入至 Azure Bot (bit.ly/2knEtU6),另一個實作 bot 的便利方式。Azure Bot 服務提供了建置 bot 方便使用範本從瀏覽器為基礎的經驗。服務會使用 Azure 函式,使用 「 函式 」 事件為基礎的無伺服器程式碼架構,讓您節省成本,並調整您 bot 更好。 

什麼是 Azure 函式優點如下︰ 當我開始建置 bot 時,我發現的每當我需要的 bot,則必須在建立新的 Web 應用程式,以提供應用程式容器。很好的一個應用程式,但是未針對多個 bot,每個需要另外的基礎結構。相反地,Azure 函式可讓您主機的小型程式碼在雲端中,而不需擔心整個應用程式基礎結構。

智慧和 Bot 開發

應用程式,就像 bot 此處並可協助您進行系統管理員可以執行最適合特定工作。比方說,我接龍 bot 可以接龍的玩法與您,或許甚至告訴您規則以及遊戲的秘訣。為 true,它可能不會通過 Turing 測試 (以量值是由 Alan Turing 1950 在電腦的智慧方式),但是,可能會對大部分 bot。

同樣地,適用於本機汽車 office bot 應該知道有關送出付款授權註冊或如何幫助您支付票證或送出驅動程式授權延伸模組的某些項目。天氣 bot 需要回答天氣相關的問題,而且的 bot 智慧可能包含找出特定的天氣資料的位置和使用者需求的方式。

Bot 可以自動化許多事情透過交談的介面,但也可以增強影像、 按鈕和其他控制項,可與行動裝置,讓互動更方便。交談而開放 bot 智慧真的發揮作用。使用一組預先定義之答案的對話方塊是標準且相當簡單的程式設計工作。相反地,人類的交談,回應意味著智慧。所幸,Microsoft Bot 架構可讓您以這兩種︰ LuisDialogs 可支援自然語言為基礎的交談,而較傳統的控制項可讓使用者按下按鈕、 轉盤的資訊或其他控制項以選取的選項。

智慧是啟用與人類使用者直覺互動交談 UI 許多 bot,所採用的核心。越來越多的認知 Microsoft 服務 (bit.ly/2jx1kMQ) 可以讓您直接將您的機器人插入智慧型的功能。這些服務包括 (但不限於)︰

  • 遠景
  • 語音
  • 語言
  • 知識
  • 搜索
  • 位置

請參閱 Alessandro Del Sole 的認知的服務列在上很棒的文章msdn.com/magazine/mt742868。 

讓您的機器人更有智慧,牽涉到一些一般量值,可能會將它設為透過 Turing 測試,但的確會改善 bot 與交談使用︰

  • 對話方塊影像和其他方法可用來收集正規化的資料,傳達的訊息,以及簡化交談
  • 當地語系化
  • 說明和對話方塊的管線,以改善基本 bot 函式
  • 使用者資料 (例如位置) 以消除複製問題

您不想要太野心勃勃,然後重試建立 bot 類似 Douglas Adams 縣 (市) 大小深層認為的電腦 (「 Hitchhiker's Guide to Galaxy) 」。相反地,當我開始建置我 bot,我限於它們所不可或缺的主要工作的函式 — 例如玩的撲克牌遊戲,或建議最佳的軌跡,以執行 — 和再利用智慧增強它們。

LUIS 的語言智慧功能

第一個要考慮到交談的介面新增的智慧元件是 Microsoft 語言了解智慧服務 (LUIS)。此服務的運作方式是分析交談或句子您傳送給它,並擷取實際的對應方式和其他應用程式特定的實體。若要將 LUIS 對話方塊加入至您的機器人,只要建立繼承 LuisDialog,註冊在 luis.aiand LUIS 應用程式提供應用程式識別碼與金鑰],加入您的對話方塊︰

[LuisModel("<YOUR_LUIS_APP_ID>", "<YOUR_LUIS_APP_KEY>")]
[Serializable]
public class IntelligentLanguageDialog : LuisDialog<object>

如需詳細的深入 LUIS 指引,請造訪 Ashish Sahu 年 1 月 20176 的 MSDN magazine 》 文章, msdn.com/magazine/mt745095

在我的作用中或軌跡 bot ([圖 3) 我定義了所有活動都相關的對應方式,和預期使用者提供智慧型的 bot 一部分的位置或活動交談。我想讓使用者能夠說,比方說,「 顯示我 ski 軌跡哪,「 和 bot 應該了解這一點,並找出一組記錄。我使用中的所有應用程式的使用者執行數以百萬計的軌跡每日,並查詢作用中他們可以將對應從我 LUIS 的模型,它會傳回 geography GetActivityLocation 目的的適用性和活動實體回到 bot。

LUIS 中的模型
[圖 3 LUIS 模型

假設有多少程式碼撰寫我需要從非標準化的使用者輸入擷取的資料 ! 即使是簡短的人力句子通常牽涉到機器學習工具可了解和處理的複雜層級。加入這個簡單的句子的所有可能變化,您了解 bot 智慧是重要的工作。所幸,LUIS 做為智慧型交談分析器和擷取程式 」,為您做的努力。您只需要是將它加入至您的機器人。

一旦定義此模型之後,我可以藉由提供可協助了解何謂我對應方式以及如何取得我 bot 實體 LUIS utterances 來進行定型。訓練的模型,我 GetActivityLocation 意圖、 所提供下列 utterances: [顯示循環附近,軌跡] 」 顯示最新雪板軌跡奧地利,「 和 」 的最長 ski 軌跡 utah? 」 做為**[圖 4**顯示,LUIS 處理實體時,它會反白顯示我在我的模型中指定的實體。如果 LUIS 無法識別實體? 這是藉由手動對應實體您訓練的位置。比方說,我必須訓練我 bot 辨識為活動的 「 雪板 」。

LUIS 在模型培訓
[圖 4 LUIS 模型訓練

接下來,您會定義處理 LUIS 模型傳回的對應方式的方法。您可以處理意圖或任何其他方式,從您的模型,做為方法**[圖 5**顯示。

[圖 5 的處理方式

[LuisIntent("None")]
  public async Task NoneIntent(IDialogContext context, LuisResult result)
  {
    await context.PostAsync(
      $"You have reached the none intent. You said: {result.Query}"); //
    context.Wait(MessageReceived);
  }
  // Go to https://luis.ai and create a new intent,
  // then train/publish your luis app.
  // Finally, replace "GetActivityLocation" with the name of your newly
  // created intent in the following handler.
  [LuisIntent("GetActivityLocation")]
  public async Task GetActivityLocation(IDialogContext context, LuisResult result)
  {
    await context.PostAsync(
      $"You have reached the GetActivityLocation intent. You said:
      {result.Query}"); //
    context.Wait(MessageReceived);
  }

每次模型判斷輸入符合 GetActivityLocation 意圖,它會呼叫我 bot 方法。結果由 LUIS LuisResult 物件中,而且包含的實體,例如位置和活動。比方說,我想要檢查是否該些實體包含國家/地區。若要這樣做我使用 TryFindEntity LuisResult 物件方法,尋找 「 builtin.geography.country 」 實體的類型。LUIS 提供一些預先建立的實體,而大幅簡化您的工作。您可以找到這些實體的完整清單bit.ly/2kWgCHR

請注意 builtin.geography 實體包含子實體,例如國家 (地區) 和縣 (市)。包含子實體的實體稱為複合實體。在此情況下,我想要特別是在國家/地區的子實體,如所示**[圖 6**。

[圖 6 尋找國家/地區

// Go to https://luis.ai and create a new intent, then train/publish your luis app.
  // Finally, replace "GetActivityLocation" with the name of your
  // newly created intent in the following handler.
  [LuisIntent("GetActivityLocation")]
  public async Task GetActivityLocation(IDialogContext context, LuisResult result)
  {
    await context.PostAsync(
      $"You have reached the GetActivityLocation intent. You said:
      {result.Query}"); //
    EntityRecommendation country;
    if(result.TryFindEntity("builtin.geography.country", out country))
    {
      await context.PostAsync($"Country: {country.Entity}");
    }
    context.Wait(MessageReceived);
  }

實際 Bot 秘訣

Microsoft 在推入硬碟 bot 開發前端,釋放要幫助簡化建立和管理軟體的這個新類別的語言智慧服務 (LUIS) 和 Azure Bot 服務之類的工具。好消息是,大部分的應用程式現在可以輕鬆地轉換 bot,與交談 UI (CUI) 對多個工作和應用程式類型。若要充分利用 bot 開發工作,以下是要考慮的一些事項︰

播放範圍︰ 關於 bot 最受矚目的事情之一是它們執行每個 PC、 tablet 和 smartphone 找到的通道中 — 例如 Skype、 Facebook Messenger 和 Telegram。將發佈至多個通道的 bot 最大化的接觸客群。此外,利用當地語系化為多種語言程式 bot 可用的服務。

是 Conversationalist: 善用交談的介面,也就是理想的多個工作和應用程式類型。為了獲得最佳結果,著重在交談的介面,就像對談、 語音和語言,而不是傳統的 UI 控制項與按鈕。

服務,請︰ 新的 Azure Bot 服務是以雲端為基礎的平台基礎結構的額外負荷降至最低,並可讓您的機器人專案調整規模。後面這項功能是 Azure 函式,可讓開發人員主機一些定域機組中的程式碼片段。

重點︰ 在建置時 bot,專注於特定工作或每個 bot 需要解決的工作。不要 overcomplicate — 詳細 AI 不一定更好。開始您的機器人,就需要解決問題,然後插入智慧的主要工作。

說︰ 請利用 LUIS 內建智慧來啟用開啟交談,並提供您的機器人的輸入。為了獲得最佳結果,格外謹慎以訓練您的 LUIS 模型,將焦點放在實體和對應方式的精確的集合。減少 「 fuzziness 」 模型中的,將會執行好 AI !

當然,我還需要知道活動實體 (您可以使用作用中的所有追蹤 50 個以上的活動,例如執行、 循環、 滑雪和滑板)。因此,當我問︰ 」,最佳滑雪奧地利? 」 我希望返回 「 滑雪 「 為我的活動實體的使用中的適用性 bot 示**[圖 7**。

Bot 模擬器 GetActivityLocation 目的作用中
[圖 7 GetActivityLocation 意圖動作中使用 Bot 模擬器

因此,我更新我的 GetActivityLocation 方法傳回的活動。請注意,不同於 builtin.geography.country,我的活動不是內建的實體。儘管如此,LUIS 圖形它相當完善一旦我將提供一些 utterances 在定型模型時,所示**[圖 8**。

[圖 8 培訓與 Utterances 模型

// Go to https://luis.ai and create a new intent, then train/publish your luis app.
  // Finally, replace "GetActivityLocation" with the name of your newly
  // created intent in the following handler.
  [LuisIntent("GetActivityLocation")]
  public async Task GetActivityLocation(IDialogContext context, LuisResult result)
  {
    await context.PostAsync(
      $"You have reached the GetActivityLocation intent. You said:
      {result.Query}"); //
    EntityRecommendation country;
    if(result.TryFindEntity("builtin.geography.country", out country))
    {
      await context.PostAsync($"Country: {country.Entity}");
    }
    EntityRecommendation activity;
    if (result.TryFindEntity("activity", out activity))
    {
      await context.PostAsync($"Activity: {activity.Entity}");
    }
    context.Wait(MessageReceived);
  }

Bot 架構提供深入的一般程式碼範例適用於 C# 在bit.ly/2gHupjg,以及在 Node.js bit.ly/2kWolWx

取得位置相關的智慧

許多 bot 都會提供位置為基礎的回應,但需要為位置回應很乏味。在上述範例中,我可以使用 LUIS 智慧來取得由 LUIS 剖析交談中內建地理實體。所幸,Microsoft 地圖位置控制項現在是 Bot 架構,可讓開發人員的收集位置為基礎的資料更容易的一部分。

Bot 架構的位置控制項也提供包含對應的視覺介面 (請參閱**[圖 9**)。這可以是很方便,如果您的機器人需要提供包含通道,例如 Skype 和 Facebook Messenger 中的郵遞區號、 城市、 區域和位置的資料運作的簡單用或原生介面的位址。

使用 Bing 地圖視覺介面的位置控制項
[圖 9 位置控制項使用 Bing 地圖視覺介面

若要開始使用 Bing 位置控制項,只取得 Bing 地圖 API 金鑰和.NET 專案 (透過 NuGet) 或 (透過 npm) 的位置] 對話方塊元件則會初始化及呼叫您的程式碼中的 [位置] 對話方塊中的執行個體︰

var options = LocationOptions.UseNativeControl | LocationOptions.ReverseGeocode;
var requiredFields = LocationRequiredFields.Locality |
                     LocationRequiredFields.Region |
                     LocationRequiredFields.Country;
var prompt = "Where are you looking for trails?";
var locationDialog = new LocationDialog(
  apiKey, this.channelId, prompt, options, requiredFields);
context.Call(locationDialog, this.ResumeAfterLocationDialogAsync);

LocationDialog 提供選項來要求不同的地址欄位和自訂的提示。當傳回結果時,您可以處理在繼續方法中,如所示圖 10

[圖 10] 處理位置產生 Resume 方法

private async Task ResumeAfterLocationDialogAsync(
  IDialogContext context, IAwaitable<Place> result)
  {
    var place = await result;
    if (place != null)
    {
      var address = place.GetPostalAddress();
      var formattedAddress = string.Join(", ", new[]
      {
         address.Locality,
         address.Region,
         address.Country
      }.Where(x => !string.IsNullOrEmpty(x)));
      await context.PostAsync(
        "Where are you looking for trails " + formattedAddress);
    }
    context.Done<string>(null);
  }

LUIS 之外

除了 LUIS,認知服務還提供許多其他 Api,能夠幫助您 bot 似乎很 incomprehensibly 個別開發人員或商務實作複雜的技術。幸運的是,您不需要對它︰

  • 建議 API 可讓您包含產品 (例如,通常會一起購買的產品) 的建議,或個人化的使用者建議。
  • 願景 API 會將您識別物件、 人的表面、 年齡、 性別或甚至感覺 bot 進階的影像和視訊的技能。
  • 學術知識 API 可以加入 academic 知識、 建立 Q i 一樣,並加入您的機器人的特定知識基礎技術。

值得一提的是 bot 會開放給協力廠商 Api 和服務。您可以使用您自己的服務和 Api,讓您 bot 成為唯一的並解決之前尚未解決的問題。事實上,Bot 架構帶來商機,以及人力知識發展和協助工具,可透過簡單的交談介面和方便使用 Api 的新世界。

嶄新

除了 Bot framework 的.NET Framework 和 Node.js,以及 REST Api 的定期更新,Microsoft 最近新增功能,可讓 bot 開發一層樓。

Bot 架構,Azure Bot 服務時,最新功能之一現在提供簡單的方式,利用的便利性和 bot 專案定域機組的延展性 (bit.ly/2knEtU6)。Bot 服務時,所示**[圖 11**,使用 Azure 函式和快速入門範本集合來協助您充分運用您的機器人的程式碼,並允許您調整為任何層級的 bot (bit.ly/2kuo9Bb)。比方說,您可以選擇從基本、 表單、 主動式、 LUIS,或問題和答案 bot 範本,各自提供已備妥執行 bot 您可以展開視。

在瀏覽器中直接編輯 Bot 服務程式碼
[圖 11 編輯 Bot 服務直接在瀏覽器中的程式碼

Azure 函數會提供事件驅動的經驗,無伺服器架構和隨計算為基礎的 Azure Bot 服務背後的技術。真正的意義是針對每個 bot 不再需要耗費資源的應用程式裝載基礎結構。相反地,您可 bot 許多詳細的輕量型、 更輕鬆地進行調整並儲存在開發和時間,同時簡化與認知服務之間的連線。

QnA Maker (qnamaker.ai) 是另一個值得一提的功能。可從 Azure Bot 服務,作為範本 bot 專案,QnA Maker 填滿 bot 解答一般問題,從現有的知識庫的很常見的案例。

總結

Microsoft Bot 架構提供快速且輕鬆的方式,開始建置 bot,提供新的和現有的應用程式或服務的交談式的介面。它可讓您建立全新的體驗,並到達數十億透過 Skype、 Facebook Messenger、 Telegram 和其他通道連線的使用者。Microsoft 認知服務包含許多智慧型的 Api,您可以將它加入至您的機器人。

Bot 架構生態系統快速成長,而且您可以利用此新增包含與認知服務的服務或使用來自協力廠商提供者的 Api,讓您 bot,更聰明且更有能力。以非常簡單的 bot 開頭之路可能會導致許多探索您和您的使用者。Bot 確實是新的應用程式 (或現有的應用程式的擴充功能),並加入智慧,他們真的會變得非常強大。此外,它們會減少您的開發時間、 精力和成本。

符合我 Bot

開發了不少 bot 在最後幾個月,所以我決定與您共用一個便利的位置,從列出。簽出,請參閱是否它們可能對您有所啟發,建立自己。(與每個提供的連結會將該 bot skype)。

[圖 A Bot 的集合

Bot  描述
接龍 (bit.ly/2jrzP7S) [接龍] 會被視為世界上最受歡迎的撲克牌遊戲。現在而不是啟動應用程式,您可以使用您最愛的對談的用戶端,像是 Skype,享受遊戲。
使用中的適用性 (bit.ly/2knZVbr) 在全球各地尋找軌跡 — 執行循環、 行動或滑雪 – 完全從世界上最上層或社交網路。
UNO (bit.ly/2k4AzyH) Skype、 Messenger 或 Telegram 上播放此全球知名的撲克牌遊戲。
[新接龍] (bit.ly/2l0NM9b) [新接龍] 是困難的多個層級而具挑戰性的撲克牌遊戲。啟動簡單的層級,並了解如何播放。
瘋狂按 (bit.ly/2kY7EdN) 簽出這個容易學習的撲克牌遊戲。
介面卡遊戲箱子 (bit.ly/2klXOCV) 了解如何精通一些最受歡迎的撲克牌遊戲,包括 [接龍]、 UNO、 瘋狂按,101,[新接龍] 及 Mau Mau。

Kevin 艾*(@kashleytwit) 是 microsoft 架構設計人員推廣者。 他是 「 專業人員 Windows 8 程式設計 」 (Wrox,2012年) 的共同執筆者的開發人員的最上層應用程式、 bot 和遊戲,最值得注意的是 Active 適用性 (activefitness.co)。他經常提供技術的各種事件、 產業顯示和網路廣播。在角色中,他負責啟動和合作夥伴,建議您在軟體設計、 商務和技術策略、 架構和開發。在他的部落格kevinashley.com和 Twitter: @kashleytwit。*

感謝下列 Microsoft 技術專家來檢閱這份文件︰ Mat velloso 會