使用 QnA Maker 回答問題

適用于: SDK v4

注意

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

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

QnA Maker 會透過您的資料提供對話式的問題和解答層。 這可讓 Bot 將問題傳送至 QnA Maker 並收到解答,而不需要剖析並解讀問題的意圖。

在建立您自己的 QnA Maker 服務時,其中一項基本需求是在服務中填入問題和解答。 在許多案例中,問題和解答已存在於常見問題集或其他文件的內容中;但有些時候,您可能會想要以更自然的對話方式來自訂問題的解答。

本文說明如何使用 Bot 的現有 QnA Maker 知識庫。

針對新的 Bot,請考慮使用 適用于語言的 Azure 認知服務問答 功能。 如需詳細資訊,請參閱 使用問答來回答問題

注意

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

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

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

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

必要條件

關於此範例

若要在 Bot 中使用 QnA Maker,您需要 QnA Maker 入口網站中的 現有知識庫。 接著,您的 Bot 可以使用知識庫來回答使用者的問題。

針對新的 Bot 開發,請考慮使用 Power Virtual Agents 。 如果您需要為 Bot Framework SDK Bot 建立新的知識庫,請參閱下列 Azure AI 服務文章:

C# QnABot logic flow

OnMessageActivityAsync 會針對收到的每個使用者輸入呼叫 。 呼叫時,它會從範例程式碼的 appsetting.json 檔案存取組態設定,以尋找值以連線到預先設定的 QnA Maker 知識庫。

使用者的輸入會傳送至您的知識庫,且最傳回的答案會顯示回給使用者。

取得值,以將 Bot 連線至知識庫

提示

QnA Maker 檔提供如何 建立、定型及發佈知識庫 的指示。

  1. QnA Maker 網站中,選取您的知識庫。
  2. 開啟知識庫後,選取 [設定 ] 索引標籤。記錄服務名稱 顯示 的值。 使用 QnA Maker 入口網站介面時,這個值對於尋找您感興趣的知識庫很有用。 它不會用來將 Bot 應用程式連線到此知識庫。
  3. 向下捲動以尋找 部署詳細資料 ,並從 Postman 範例 HTTP 要求記錄下列值:
    • POST /knowledgebases/ < knowledge-base-id > /generateAnswer
    • 主機: < your-host-url>
    • 授權:EndpointKey < your-endpoint-key>

您的主機 URL 會以 開頭 https:// ,並以 結尾 /qnamaker ,例如 https://<hostname>.azure.net/qnamaker 。 您的 Bot 需要知識庫識別碼、主機 URL 和端點金鑰,才能連線到 QnA Maker 知識庫。

更新設定檔案

首先,將存取知識庫所需的資訊新增至設定檔案,包括主機名稱、端點金鑰和知識庫識別碼 (kbId) 。 這些是您從 QnA Maker 中知識庫 [設定 ] 索引標籤儲存的值。

如果您未針對生產環境部署此專案,您可以將 Bot 的應用程式識別碼和密碼欄位保留空白。

注意

若要將 QnA Maker 知識庫新增至現有的 Bot 應用程式,請務必為您的 QnA 專案新增資訊標題。 本節中的「名稱」值提供從您的應用程式存取此資訊所需的金鑰。

appsettings.json

C# (封存)

設定 QnA Maker 實例

首先,我們會建立物件來存取 QnA Maker 知識庫。

請確定 已為您的專案安裝 Microsoft.Bot.Builder.AI.QnA NuGet 套件。

QnABot.cs 的 方法中 OnMessageActivityAsync ,建立 QnAMaker 實例。 類別 QnABot 也是在上述 appsettings.json 儲存的連接資訊名稱提取所在的位置。 如果您在設定檔中為知識庫連線資訊選擇不同的名稱,請務必更新此處的名稱,以反映您選擇的名稱。

Bots/QnABot.cs

C# (封存)

從 Bot 呼叫 QnA Maker

當您的 Bot 需要 QnAMaker 的解答時,請從 Bot 程式碼呼叫 GetAnswersAsync 方法,以根據目前內容取得適當的答案。 如果您要存取自己的知識庫,請變更 下方找不到 的解答訊息,為您的使用者提供有用的指示。

Bots/QnABot.cs

C# (封存)

測試聊天機器人

在本機電腦上執行範例。 如果您尚未這麼做,請安裝 Bot Framework 模擬器 。 如需進一步指示,請參閱範例的 README (C# archived)、 JavaScript (archived) 、 JAVA (archived) Python (archived))。

啟動模擬器、連線至 Bot,並將訊息傳送至 Bot。 您問題的回應會根據您知識庫的資訊而有所不同。

Test sample bot.

其他資訊

QnA Maker 多回合範例 (C# 多回合範例( 已封存) 、 JavaScript 多回合 範例(已封存) 、JAVA 多回合範例(已封存) Python 多回合範例(已封存) 顯示如何使用 QnA Maker 對話方塊來支援 QnA Maker 的後續提示和主動式學習功能。

  • QnA Maker 支援後續提示,也稱為多回合提示。 如果 QnA Maker 知識庫需要使用者的詳細資訊,QnA Maker 會傳送可用來提示使用者的內容資訊。 此資訊也可用來對 QnA Maker 服務進行任何後續呼叫。 在 4.6 版中,Bot Framework SDK 新增了此功能的支援。

    若要建構這類知識庫,請參閱 QnA Maker 檔, 瞭解如何使用後續提示來建立交談 的多個回合。

  • QnA Maker 也支援主動式學習建議,讓知識庫隨著時間改善。 QnA Maker 對話方塊支援主動式學習功能的明確意見反應。

    若要在知識庫上啟用此功能,請參閱 QnA Maker 關於 主動式學習建議的檔

下一步

QnA Maker 可以與其他 Azure AI 服務結合,讓您的 Bot 更強大。 Bot Framework Orchestrator 可讓您在 Bot 中結合 QnA 與 Language Understanding (LUIS)。