共用方式為


對話框庫

適用於: SDK v4

對話 是 SDK 中的核心概念,提供方式來管理與用戶長時間執行的交談。 對話框會執行代表部分或完整交談線程的工作。 它可以涉及一個回合或多個回合,也可以涉及短時間或長時間。

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

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

小提示

如果您不熟悉使用 Bot Framework 開發 Bot,或建立新的對話式體驗,請從 Bot Framework Composer 開始。 針對不是在 Composer 中建立的現有 SDK 優先的 Bot,請考慮將您的 Bot 公開為 技能 ,並使用 Composer 進行未來的 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,並將技能回應傳回給使用者。

如需詳細資訊,請參閱:

後續步驟