對話方塊程式庫

適用于: SDK v4

對話方塊是 SDK 中的 cMicrosoft Entral 概念,提供方式來管理與使用者長時間執行的交談。 對話方塊會執行代表部分或完整交談執行緒的工作。 它可以只跨越一個回合或多個,而且可以跨越一段短或很長的時間。

本文說明對話程式庫的核心類別和功能。

  • 您應該熟悉 Bot 的運作 方式(包括 回合為何 ),以及 管理狀態
  • 每個對話都代表可執行以完成並傳回所收集資訊的交談式工作。
  • 每個對話方塊都代表控制流程的基本單位:它可以開始、繼續和結束;暫停和繼續;或取消。
  • 對話方塊類似于程式設計語言中的方法或函式。 您可以在啟動對話時傳入引數或參數,而對話方塊稍後可以在結束時產生傳回值。

提示

如果您不熟悉使用 Bot Framework 開發 Bot,或建立新的對話式體驗,請從 Bot Framework Composer 開始 。 針對在 Composer 中建立的現有 SDK 優先 Bot,請考慮將您的 Bot 公開為 技能 ,並使用 Composer 進行未來的 Bot 開發。

對話方塊狀態

對話可以實 作多回合交談 ,因此,對話會依賴 跨回合的保存狀態 。 若未在對話中狀態,您的 Bot 將無法知道對話中的位置,或已收集哪些資訊。

若要保留對話在交談中的位置,對話的狀態必須從 中擷取並儲存至每個回合的記憶體。 這是透過 Bot 交談狀態上定義的對話方塊狀態屬性存取子來處理。 此對話方塊狀態會管理所有使用中對話的資訊,以及作用中對話的子系。 這可讓 Bot 挑選最後一個離開的位置,並處理各種交談模型。

在執行時間,對話方塊狀態屬性包含對話在其邏輯進程中的位置資訊,包括對話實例 物件格式 的任何內部收集資訊。 同樣地,這需要讀取到 Bot 中,並儲存到記憶體中每個回合。

對話方塊基礎結構

除了各種類型的對話,下列類別也涉及交談的設計和控制。 雖然您通常不需要直接與這些類別互動,但瞭解它們及其用途在設計 Bot 對話時很有用。

類別 描述
對話方塊集 定義對話集合,這些對話可以相互參考,並共同運作。
對話方塊內容 包含所有使用中對話方塊的相關資訊。
對話方塊實例 包含一個使用中對話方塊的相關資訊。
對話方塊回合結果 包含使用中或最近使用中對話方塊的狀態資訊。 如果作用中的對話方塊結束,這會包含其傳回值。

對話方塊類型

對話方塊程式庫提供數種類型的對話,讓您的 Bot 對話更容易管理。 本文稍後會更詳細地說明其中一些類型。

類型 描述
對話方塊 所有對話方塊的基類。
容器對話方塊 所有 容器 對話的基類,例如元件和調適型對話。 它會維護內部對話集,並可讓您將對話集合視為一個單位。
元件對話方塊 容器對話方塊的一般用途類型,封裝一組對話,允許整體重複使用集合。 元件對話方塊啟動時,它會從其集合中的指定對話方塊開始。 當內部進程完成時,元件對話方塊就會結束。
瀑布式對話 定義一連串的步驟,讓您的 Bot 引導使用者完成線性程式。 這些通常會設計成在元件對話方塊的內容內運作。
提示對話方塊 要求使用者輸入並傳回結果。 提示會重複,直到它取得有效的輸入或取消為止。 其設計目的是要與瀑布式對話搭配使用。
自適性對話 Composer 用來提供更自然對話流程的容器對話方塊類型。 不適合 直接在 SDK 優先 Bot 中使用。
動作對話方塊 支援 Composer 中動作實作的對話方塊類型。 不適合 直接在 SDK 優先 Bot 中使用。
輸入對話方塊 支援在 Composer 中實作輸入動作的對話方塊類型。 不適合 直接在 SDK 優先 Bot 中使用。
技能對話方塊 從技能取用者自動管理一或多個技能 Bot。 Composer 直接支援技能作為動作。
QnA Maker 對話方塊 自動存取 QnA Maker 知識庫。 此對話方塊的設計目的是在 Composer 中以動作的形式運作。

重要

自適性對話 會先新增至 C# SDK 4.9 版。 自適性對話支援 Bot Framework Composer, 並不適合直接用於 SDK 優先 Bot 中。

對話方塊模式

從 Bot 啟動和管理對話有兩個主要模式。

  1. 我們建議使用 Bot Framework Composer 撰寫對話,以受益于更自然、自由流動的對話功能。 如需詳細資訊,請參閱 Bot Framework Composer 簡介。 這類 Bot 仍然可以視需要使用程式碼來擴充。
  2. 使用其中一種 SDK 語言開發 Bot,並使用根對話的執行 擴充方法。 如需搭配元件對話使用 run 方法的詳細資訊,請參閱 元件和瀑布式對話 ,以及如何 實作循序對話流程

對話方塊堆疊

對話內容包含所有使用中對話的相關資訊,並包含對話方塊堆疊 ,做為 所有使用中對話的呼叫堆疊 每個容器對話都有一組其所控制的內部對話,因此每個作用中的容器對話都會在其狀態中引進內部對話內容和對話堆疊。

雖然您不會直接存取堆疊,但瞭解堆疊存在,其函式可協助您瞭解對話程式庫的各個層面的運作方式。

容器對話方塊

容器對話方塊 可以是較大對話集的一部分。 每個容器都有一個內部對話集,也會受到管理。

  • 每個對話集都會建立解析對話識別碼的範圍。

  • SDK 目前會實作兩種類型的容器對話:元件對話和調適型對話。

    兩者的概念結構大不相同。 不過,Composer Bot 可以使用這兩者。

對話方塊識別碼

當您將對話方塊新增至對話方塊集時,您會在該集合內指派唯一識別碼。 集合內的對話方塊會依識別碼彼此參考。

當某個對話在執行時間參考另一個對話方塊時,它會依對話方塊的識別碼來執行此動作。 對話內容會嘗試根據立即對話集中的其他對話方塊解析識別碼。 如果沒有相符專案,它會在包含或外部對話方塊集中尋找相符專案,依序尋找相符專案。 如果找不到相符專案,就會產生例外狀況或錯誤。

元件對話方塊

元件對話會使用對話的順序模型,而容器中的每個對話都負責呼叫容器中的其他對話。 當元件對話方塊的內部對話堆疊是空的時,元件就會結束。

如果您的 Bot 有相對簡單的控制流程,而不需要更動態的對話流程,請考慮使用元件和瀑布式對話。

關於元件和瀑布式對話, 會更詳細地描述元件、瀑布和提示對話。

其他對話方塊

QnA Maker 和技能對話可以做為獨立對話或容器中對話集合的一部分。

QnA Maker 對話方塊

注意

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

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

QnA Maker 對話方塊會存取 QnA Maker 知識庫,並支援 QnA Maker 的後續提示和主動式學習功能。

  • 後續提示,也稱為多回合提示,允許知識庫詢問使用者詳細資訊,再回答他們的問題。
  • 主動式學習建議可讓知識庫隨著時間改善。 QnA Maker 對話方塊支援主動式學習功能的明確意見反應。

如需詳細資訊,請參閱

技能對話方塊

技能對話方塊會存取和管理一或多個技能。 技能對話方塊會將活動從父 Bot 張貼至技能 Bot,並將技能回應傳回給使用者。

如需詳細資訊,請參閱

下一步