使用 GenerateAnswer API 取得答案

若要取得使用者問題的預測答案,請使用 GenerateAnswer API。 當發佈知識庫時,您可以在 [發佈] 頁面查看資訊,了解如何使用這個 API。 您也可以設定 API,根據中繼資料標籤篩選答案,並使用測試查詢字串參數,從端點測試知識庫。

注意

QnA Maker 服務將于 2025 年 3 月 31 日淘汰。 新版的問題和答案功能現在可做為 適用于語言的 Azure 認知服務一部分使用。 如需瞭解語言服務內的問題解答功能,請參閱問題解答。 從 2022 年 10 月 1 日開始,您將無法建立新的 QnA Maker 資源。 如需將現有 QnA Maker 知識庫移轉至問題解答的相關資訊,請參閱 移轉指南

使用 GenerateAnswer API 取得答案預測

您可以在 Bot 或應用程式中使用 GenerateAnswer API,以使用者問題查詢您的知識庫,並從問答配對中取得最符合的項目。

注意

本文件不適用於最新版本。 若要了解如何使用最新的問題解答 API,請參閱問題解答快速入門指南

發佈以取得 GenerateAnswer 端點

在從 QnA Maker 入口網站或使用 API 發佈知識庫後,您即可取得 GenerateAnswer 端點的詳細資料。

若要取得端點詳細資料:

  1. 登入 https://www.qnamaker.ai

  2. 在 [我的知識庫] 中,針對您的知識庫選取 [檢視程式碼]。 Screenshot of My knowledge bases

  3. 取得 GenerateAnswer 端點詳細資料。

    Screenshot of endpoint details

您也可以從知識庫的 [設定] 索引標籤取得端點詳細資料。

GenerateAnswer 要求設定

您可以透過 HTTP POST 要求來呼叫 GenerateAnswer。 如需示範如何呼叫 GenerateAnswer 的範例程式碼,請參閱快速入門

POST 要求會使用:

GenerateAnswer URL 的格式如下:

https://{QnA-Maker-endpoint}/knowledgebases/{knowledge-base-ID}/generateAnswer

請記得使用具有尾端空格的字串 EndpointKey 值來設定 的 HTTP 標頭屬性 Authorization ,然後在 [設定] 頁面上找到端點金鑰。

範例 JSON 主體看起來如下:

{
    "question": "qna maker and luis",
    "top": 6,
    "isTest": true,
    "scoreThreshold": 30,
    "rankerType": "" // values: QuestionOnly
    "strictFilters": [
    {
        "name": "category",
        "value": "api"
    }],
    "userId": "sd53lsY="
}

深入了解 rankerType

先前的 JSON 只要求了至少達閾值分數 30% 或高於閾值分數的答案。

GenerateAnswer 回應屬性

回應是一個 JSON 物件,其中包含所有顯示答案所需要的資訊,以及交談的下一個回合 (若可用的話)。

{
    "answers": [
        {
            "score": 38.54820341616869,
            "Id": 20,
            "answer": "There is no direct integration of LUIS with QnA Maker. But, in your bot code, you can use LUIS and QnA Maker together. [View a sample bot](https://github.com/Microsoft/BotBuilder-CognitiveServices/tree/master/Node/samples/QnAMaker/QnAWithLUIS)",
            "source": "Custom Editorial",
            "questions": [
                "How can I integrate LUIS with QnA Maker?"
            ],
            "metadata": [
                {
                    "name": "category",
                    "value": "api"
                }
            ]
        }
    ]
}

先前 JSON 回應的答案分數為 38.5%。

僅依文字比對問題

根據預設,QnA Maker 會搜尋問題和答案。 如果您只想要搜尋問題,請在 GenerateAnswer 要求的 POST 主體中使用 RankerType=QuestionOnly 以產生答案。

您可以使用 isTest=false 搜尋已發佈的知識庫,或是使用 isTest=true 搜尋測試知識庫。

{
  "question": "Hi",
  "top": 30,
  "isTest": true,
  "RankerType":"QuestionOnly"
}

搭配 C# Bot 使用 QnA Maker

Bot Framework 可讓您使用 getAnswer API 存取 QnA Maker 的屬性:

using Microsoft.Bot.Builder.AI.QnA;
var metadata = new Microsoft.Bot.Builder.AI.QnA.Metadata();
var qnaOptions = new QnAMakerOptions();

metadata.Name = Constants.MetadataName.Intent;
metadata.Value = topIntent;
qnaOptions.StrictFilters = new Microsoft.Bot.Builder.AI.QnA.Metadata[] { metadata };
qnaOptions.Top = Constants.DefaultTop;
qnaOptions.ScoreThreshold = 0.3F;
var response = await _services.QnAServices[QnAMakerKey].GetAnswersAsync(turnContext, qnaOptions);

先前的 JSON 只要求了至少達閾值分數 30% 或高於閾值分數的答案。

搭配 Node.js Bot 使用 QnA Maker

Bot Framework 可讓您使用 getAnswer API 存取 QnA Maker 的屬性:

const { QnAMaker } = require('botbuilder-ai');
this.qnaMaker = new QnAMaker(endpoint);

// Default QnAMakerOptions
var qnaMakerOptions = {
    ScoreThreshold: 0.30,
    Top: 3
};
var qnaResults = await this.qnaMaker.getAnswers(stepContext.context, qnaMakerOptions);

先前的 JSON 只要求了至少達閾值分數 30% 或高於閾值分數的答案。

使用 GenerateAnswer API 取得精確的答案

我們只在 QnA Maker 受控版本中提供精確答案功能。

常見的 HTTP 錯誤

程式碼 說明
2xx Success
400 要求的參數不正確,表示必要參數遺失、格式不正確或太大
400 要求的本文不正確,表示 JSON 遺失、格式不正確或太大
401 金鑰無效
403 禁止 - 您沒有正確的權限
404 KB 不存在
410 此 API 已被淘汰且不再提供

下一步

[發佈] 頁面也提供使用 Postman 或 cURL 產生答案的資訊。