Microsoft Bot Framework的基本概念

適用于: SDK v4

Bot 是使用者可運用文字、圖形 (例如卡片或影像) 或語音等對話方式進行互動的應用程式。 Azure Bot Service是雲端平臺。 它會裝載 Bot,並將其提供給 頻道使用,例如 Microsoft Teams、Facebook 或 Slack。

Bot Framework Service 是 Azure Bot Service的元件,會在使用者連線的 Bot 應用程式和 Bot 之間傳送資訊。 每個通道都可以在傳送的活動中包含其他資訊。 建立 Bot 之前,請務必瞭解 Bot 如何使用活動物件與其使用者通訊。

此圖說明使用者與回應 Bot 通訊時,可能會交換的兩種活動類型: 交談更新訊息

活動圖表

Bot Framework 服務會在合作物件加入交談時傳送 交談更新 。 例如,在開始與Bot Framework Emulator交談時,您可能會看到兩個交談更新活動 (一個用於加入交談的使用者,另一個用於加入) 的 Bot。 若要區分這些交談更新活動,請檢查活動 成員新增 屬性中包含的人員。

訊息活動會攜帶合作物件之間的交談資訊。 在回應 Bot 範例中,訊息活動會隨附簡單的文字,而通道會呈現這段文字。 或者,訊息活動可能隨附要說出的文字、建議的動作或要顯示的卡片。

提示

每個通道都是實作 Bot Framework 通訊協定,以及每個通道的運作方式可能稍有不同。 例如,某些通道會先傳送交談更新活動,有些通道會在傳送第一個訊息活動之後傳送交談更新活動。 通道可能會在一個交談更新活動中同時包含 Bot 和使用者,而另一個通道可能會傳送兩個交談更新活動。

在此範例中,Bot 建立並傳送了訊息活動,以回應其已接收的輸入訊息活動。 不過,Bot 可以透過其他方式回應已接收的訊息活動,而且 Bot 通常會透過使用歡迎訊息傳送訊息活動來回應交談更新活動。 如需詳細資訊,請參閱如何 歡迎使用者

The Bot Framework SDK

Bot Framework SDK 可讓您建置可在 Azure Bot Service上裝載的 Bot。 此服務會定義 REST API 和活動通訊協定,以瞭解 Bot 和通道或使用者如何互動。 SDK 是以這個 REST API 為基礎,並提供服務的抽象概念,讓您可以專注于交談邏輯。 雖然您不需要瞭解 REST 服務才能使用 SDK,但瞭解其部分功能可能會很有説明。

Bot 是具有交談介面的應用程式。 在不再需要直接人為介入的自動化系統上,Bot 可用於輪替簡單、重複性工作,例如預訂晚餐或蒐集設定檔資訊。 使用者可使用文字、互動式卡片和語音來與 Bot 交談。 Bot 互動可以是快速的問與答,也可以是以智慧方式提供服務存取權的複雜對話。

注意

SDK 和 REST API 所提供的功能支援會因通道而異。 您可以使用Bot Framework Emulator來測試 Bot,但也應該在您想要讓 Bot 可供使用的每個通道上測試 Bot 的所有功能。

互動牽涉到交換活動,這些活動會以輪流方式處理。

活動

使用者 (或通道) 與 Bot 之間的每個互動都會以 活動表示。 Bot Framework 活動架構 會定義可在使用者或通道與 Bot 之間交換的活動。 活動可以代表人類文字或語音、應用程式對代理程式更新、對其他訊息的回應等等。

回合

在對話中,人們通常一次一個人發言,輪流發言。 Bot 通常會回應使用者輸入。 在 Bot Framework SDK 內,一個「回合」是由使用者對 Bot 的傳入活動,以及 Bot 傳回給使用者作為立即回應的任何活動所組成。 您可以將回合視為與接收指定活動之 Bot 相關聯的處理。

例如,使用者可能會要求 Bot 執行特定工作。 Bot 可能會回應問題,以取得工作的詳細資訊,此時此回合會結束。 在下一個回合中,Bot 會收到來自使用者的新訊息,該訊息可能包含 Bot 問題的解答,或者它可能代表主旨變更或要求忽略初始要求來執行工作。

Bot 應用程式結構

SDK 會定義 Bot 類別, 以處理 Bot 應用程式的交談原因。 Bot 類別:

  • 辨識並解譯使用者的輸入。
  • 輸入和執行相關工作的原因。
  • 產生 Bot 正在執行或已完成之動作的回應。

SDK 也會定義配 器類別,以處理通道的連線。 配接器:

  • 提供處理要求的方法,以及產生使用者通道要求的方法。
  • 包含中介軟體管線,其中包括在 Bot 回合處理常式之外進行回合處理。
  • 呼叫 Bot 的回合處理常式,並攔截回合處理常式中未處理的錯誤。

此外,Bot 通常需要擷取和儲存每個回合的狀態。 狀態是透過 儲存體Bot 狀態屬性存取子 類別來處理。 SDK 不提供內建儲存體,但會提供儲存體的抽象概念,以及儲存層的一些實作。 管理狀態主題描述這些狀態和儲存體功能。

Bot 具有連線能力與原因元素,以及狀態的抽象概念

SDK 不需要您使用特定的應用層來傳送和接收 Web 要求。 Bot Framework 具有 ASP.NET (C#) 的範本和範例、restify (JavaScript) ,以及 aioHTTP (Python) 。 不過,您可以選擇為應用程式使用不同的應用層。

當您使用 SDK 建立 Bot 時,您會提供程式碼來接收 HTTP 流量,並將它轉送到配接器。 Bot Framework 提供一些範本和範例,可讓您用來開發自己的 Bot。

注意

Bot Framework JavaScript 和 C# SDK 將繼續受到支援,不過,Python 和 JAVA SDK 即將淘汰,最終長期支援將于 2023 年 11 月結束。 只會執行此存放庫內的重要安全性和 Bug 修正。

使用這些 SDK 建置的現有 Bot 將繼續運作。

針對新的 Bot 建置,請考慮使用 Power Virtual Agents ,並閱讀 選擇正確的聊天機器人解決方案

如需詳細資訊,請參閱 Bot 建置的未來

Bot 邏輯

Bot 物件包含回合的交談式原因或邏輯,並公開 回合處理常式,這是可從 Bot 配接器接受傳入活動的方法。

SDK 提供幾個不同的範例來管理 Bot 邏輯。

  • 活動處理常式會 提供事件驅動模型,其中傳入的活動類型和子類型是事件。 針對與使用者有有限、簡短互動的 Bot,請考慮活動處理常式。
    • 使用 活動處理常式 ,並針對 Bot 將辨識並回應的每個活動類型或子類型實作處理常式。
    • 使用 Teams 活動處理常式 來建立可連線到 Teams 頻道的 Bot。 (Teams 頻道需要 Bot 處理某些頻道特定行為。)
  • 對話方塊程式庫提供狀態型模型,以管理與使用者長時間執行的交談。
    • 使用活動處理常式和 元件對話方塊 進行大量循序交談。 如需詳細資訊,請參閱 元件和瀑布式對話
  • 實作您自己的 Bot 類別,並提供您自己的邏輯來處理每個回合。 如需範例,請參閱如何 建立您自己的提示以收集使用者輸入

Bot 介面卡

配接器具有啟動回合 的進程活動 方法。

  • 它會將要求本文 (要求承載、轉譯為活動) 和要求標頭作為引數。
  • 它會檢查驗證標頭是否有效。
  • 它會建立回合 的內容 物件。 內容物件包含活動的相關資訊。
  • 它會透過其 中介軟體 管線傳送內容物件。
  • 然後,它會將內容物件傳送至 Bot 物件的回合處理常式。

配接器也會:

  • 格式化並傳送回應活動。 這些回應通常是使用者的訊息,但也可以包含使用者通道直接取用的資訊。
  • 顯示 Bot 連接器 REST API 提供的其他方法,例如 更新訊息刪除訊息
  • 攔截回合未攔截的錯誤或例外狀況。

回合內容

「回合內容」物件會提供活動相關資訊,例如傳送者和接收者、通道、以及處理活動所需的其他資料。 也允許在遍及 Bot 各種階層的回合期間新增資訊。

回合內容是 SDK 中最重要的抽象概念之一。 它不僅會將輸入活動傳送至所有中介軟體元件和應用程式邏輯,還會提供中介軟體元件和 Bot 邏輯可以傳送輸出活動的機制。

中介軟體

中介軟體就像任何其他傳訊中介軟體,包含一組依序執行的線性元件,可讓每個元件都有機會在活動上運作。 中介軟體管線的最後一個階段是在應用程式已向配接器的程序活動方法註冊的 Bot 類別上,回呼回合處理常式。 中介軟體會實作配接器呼叫的 on turn 方法。

回合處理常式會採用回合內容作為其引數,通常是回合處理常式函式內執行的應用程式邏輯會處理輸入活動的內容,並在回合內容上使用 傳送活動 函式傳送這些輸出活動,以回應產生一或多個活動。 對回合內容呼叫「傳送活動」會導致在輸出活動上叫用中介軟體元件。 中介軟體元件會在 Bot 的回合處理常式函式前後執行。 執行原本就是巢狀的,因此有時稱為「內部ion」。

中介軟體主題會更深入地描述中介軟體。

Bot 狀態和儲存體

如同其他 Web 應用程式,Bot 原本就是無狀態。 Bot 內的狀態會遵循與新式 Web 應用程式相同的範例,而 Bot Framework SDK 提供儲存層和狀態管理抽象概念,讓狀態管理更容易。

管理狀態主題描述這些狀態和儲存體功能。

傳訊端點和布建

一般而言,您的應用程式需要 REST 端點才能接收訊息。 它也需要根據您決定使用的平臺,為您的 Bot 布建資源。

遵循 建立 Bot 快速入門來建立及測試簡單的回應 Bot。

HTTP 詳細資料

活動會透過 HTTP POST 要求從 Bot Framework Service 送達 Bot。 Bot 會以 200 HTTP 狀態碼回應傳入 POST 要求。 從 Bot 傳送至通道的活動,會以個別的 HTTP POST 傳送至 Bot Framework Service。 接著會以 200 HTTP 狀態碼確認。

通訊協定不會指定發出這些 POST 要求及其通知的順序。 不過,為了配合常見的 HTTP 服務架構,這些要求通常為巢狀,表示輸出 HTTP 要求是從輸入 HTTP 要求範圍內的 Bot 提出。 此模式會在先前的圖表中說明。 由於有兩個不同的背對背 HTTP 連線,所以必須針對兩者提供安全性模型。

注意

Bot 有 15 秒的時間可認可大部分通道上狀態為 200 的呼叫。 如果 Bot 在 15 秒內沒有回應,就會發生 HTTP GatewayTimeout 錯誤, (504) 。

活動處理堆疊

讓我們鑽研先前的循序圖,並將焦點放在訊息活動的抵達。

說明 Bot 如何處理活動的時序圖。

通道會將使用者的訊息傳送至 Azure Bot Service,而服務會將訊息轉送至 Bot 的傳訊端點。 Bot 的回應會在回合範圍內傳送給使用者。

在上述範例中,Bot 使用了包含相同文字訊息的另一個訊息活動回覆訊息活動。 處理會從送達網路伺服器的 HTTP POST 要求 (以 JSON 承載形式隨附活動資訊) 著手。 通常,ASP.NET 專案會用於 C# Bot,而 Express 或 restify 等熱門架構則用於 JavaScript Node.js Bot。

「配接器」 (SDK 的整合式元件) 是 SDK 執行階段的核心。 在 HTTP POST 主體中會以 JSON 形式隨附活動。 此 JSON 會還原序列化,以建立 活動物件, 然後透過其 進程活動 方法傳遞給配接器。 接收活動時,配接器會建立「回合內容」並呼叫中介軟體。

如上所述,回合內容會提供 Bot 用以傳送輸出活動的機制,其最常用於回應入活動。 回合內容提供 傳送更新刪除活動 回應方法。 每個回應方法都會以非同步程序執行。

重要

處理主要 Bot 回合的執行緒會在完成時處理內容物件的處置。 請務必await任何活動呼叫,這樣主要執行緒才能先等候已產生的活動,再結束其正在處理的工作並處置回合內容。 否則,如果回應 (包含其處理常式) 佔用大量時間,並嘗試在內容物件上動作,則可能會取得「內容已處置」 錯誤。

Bot 範本

您必須為您的應用程式選擇應用層使用;不過,Bot Framework 具有適用于 C#) ASP.NET (範本和範例、restify (JavaScript) ,以及 aioHTTP (Python) 。 檔是假設您使用其中一個平臺,但 SDK 不需要您。 如需如何存取及安裝範本的指示,請參閱 建立 Bot 快速入門。

Bot 是 Web 應用程式,而且會針對 SDK 的每個語言版本提供範本。 所有範本都會提供預設端點實作和配接器。 每個範本都包含:

  • 資源佈建
  • 將傳入活動路由至配接器的語言特定 HTTP 端點實作。
  • 配接器物件
  • Bot 物件

不同範本類型之間的主要差異在於 Bot 物件中。 範本包括:

  • 空的 Bot
    • 包含活動處理常式,此處理程式會在交談的第一個回合上傳送 「hello world」 訊息,以歡迎使用者進行交談。
  • 回應 Bot
    • 使用活動處理常式來歡迎使用者並回應使用者輸入。
  • 核心 Bot
    • 結合 SDK 的許多功能,並示範 Bot 的最佳做法。
    • 使用活動處理常式來歡迎使用者。
    • 使用元件對話方塊和子對話來管理對話。
    • 對話方塊會使用 LUIS) 和 QnA Maker 功能Language Understanding (。

注意

Azure QnA Maker 將于 2025 年 3 月 31 日淘汰。 從 2022 年 10 月 1 日開始,您將無法建立新的 QnA Maker 資源或知識庫。 較新版的問題和解答功能現在隨附於適用於語言的 Azure 認知服務。

自訂問題解答是適用于語言的 Azure 認知服務功能,是 QnA Maker 服務的更新版本。 如需 Bot Framework SDK 中問答支援的詳細資訊,請參閱 自然語言理解

注意

Language Understanding (LUIS) 將于 2025 年 10 月 1 日淘汰。 從 2023 年 4 月 1 日開始,您將無法建立新的 LUIS 資源。 新版的語言理解現在可做為適用于語言的 Azure 認知服務一部分使用。

對話式語言理解 (CLU) 是 Azure 認知服務語言的一項功能,是 LUIS 的更新版本。 如需 Bot Framework SDK 中語言理解支援的詳細資訊,請參閱 自然語言理解

其他資訊

管理 Bot 資源

您必須管理 Bot 的資源,例如其應用程式識別碼和密碼,以及任何已聯機服務的資訊。 當您部署 Bot 時,它將需要安全存取這項資訊。 為了避免複雜度,大部分的 Bot Framework SDK 文章不會描述如何管理這項資訊。

通道配接器

SDK 也可讓您使用通道配接器,其中配接器本身會額外執行 Bot 連接器服務對通道正常執行的工作。

SDK 提供一些語言的通道配接器。 更多通道介面卡可透過 Botkit 和社群存放庫取得。 如需詳細資訊,請參閱 Bot Framework SDK 存放庫的 通道和配接器資料表。

Bot 連接器 REST API

Bot Framework SDK 會包裝並建置在 Bot 連接器 REST API 上。 如果您想要瞭解支援 SDK 的基礎 HTTP 要求,請參閱連接器 驗證 和相關文章。 Bot 傳送和接收的活動符合 Bot Framework 活動架構

下一步