Chatbot 開發使用Bot Framework V4

伴隨各項雲端AI服務的普及化,許多AI的應用開始快速發展,其中一項就是Chatbot(對話機器人),不管是facebook messager或Line,愈來愈多人開發出各式各樣的Chatbot,當然微軟在方面也不輸人,推出了一個專門用於開發Chatbot的框架,Bot Framework,目前Bot Framework版本已經來到V4的版本,除了提供開發Chatbot所需的SDK之外,更可以搭配Azure Bot Service,直接串連facebook messager,輕鬆變身為facebook messager bot,等等...那Line呢? 雖然目前沒辦法像facebook messager一樣直接串連,但是也是可以透過Direct Line機制進行整合的。

Conversation as a Platform (Microsoft BUILD 2016)

事實上Bot Framework V3版本與Bot Framework V4版本是原本不同的架構,V4版本是一個打掉重練的概念,在2018/09正式發佈GA,專案架構上是基於ASP.NET Core,所以可以跨平台部署,如果沒有ASP.NET Core基礎的話,一開始看專案可能會看不太懂,因此本篇會先說明一些概念。

安裝Chatbot專案範本,不同於V3需要自行複製檔案的方式,在V4版本裡,可以直接透過下載VSIX進行安裝,方式是到Visual Studio Marketplace搜尋"Bot Builder V4",可以找到Bot Builder V4 SDK Template for Visual Studio,下載安裝就對了

安裝完後,在Cloud分類下,就可以看到三個 Chatbot 專案範本

接著以開啟 EchoBot 為例,不難發現它是個 ASP.NET Core 的專案

ASP.NET Core 的專案,與 .NET Framework 專案,非常不一樣,除了可以跨平台(可安裝在windows / Linux 環境)的特性,專案結構上也有很大的不一樣,在 ASP.NET Core 裡,首先早期 ASP.NET Core 以 project.json 做為管理,現在則回歸以 .csproj 的管理,包含套件的管理(Package References)

而 appsettings.json 檔案則作為應用程式的組態設定,取代過去的 web.config,程式可以透過實作 IConfiguration 的物件來抓取。另外在 Properties 裡會有個 launchSettings.json 檔,定義了以 Visual Stuido 執行時的環境組態設定。

 Startup.cs 是ASP.NET Core的啟動類別,換言之,在程式內需要用的到服務,都必須配配置在這個檔案裡,以 EchoBot 專案為例,會在建構式中注入環境變數,接著透過 ConfigurationBuilder 物件設定讀取 appsettings.json 以及其它不同環境所設定的  appsettings.json (如果有的話),接著呼叫 .Build() 方法,得到 Configuration 物件,因此在程式內,就可以透過 Configuration 物件來取得相關設定值。

而在Startup.cs 的 ConfigureServices() 方法裡,會進行註冊 Chatbot 的服務 (細節部份,留待下一篇說明),在 .NET Core 裡,相依性注入的機制被大量的使用,如果不知道什麼是相依性注入,那麼學習 .NET Core 會有點辛苦

最後 Startup.cs 的 Configure() 方法,則是設置 HTTP request pipeline

簡單來說,在 Startup.cs 裡 Configure方法主要是配置HTTP request pipeline,而ConfigureServices方法則是配置相依性注入。

而 ASP.NET Core 專案跟主控制台應用程式很像,主要程式的啟動點在 Program.cs 裡,在 Main 方法裡會叫用實作IWebHost的Run()方法,並且指定使用 Startup 類別,做為啟動配置的類別,因此啟動過程裡會透過先前在Startup.cs 裡的 ConfigureServices 來加載其他服務

在這一篇文章裡,先針對了 Bot Framework V4 所使用的 ASP.NET Core 專案裡的應用程式啟動及配置,做點概要式的說明,當理解了 ASP.NET Core 專案架構後,下一篇我們將針對 Chatbot 專案做細部的說明。

 

若本文對您有所幫助,歡迎轉貼,但請在加註【轉貼】及來源出處,並在附上本篇的超連結,感恩您的配合囉。

By No.18