你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 GenerateAnswer API 获取答案

若要获取用户问题的预测答案,请使用 GenerateAnswer API。 发布知识库时,可以在“发布”页上查看有关如何使用此 API 的信息。 还可以将 API 配置为基于元数据标记筛选答案,并使用测试查询字符串参数测试终结点中的知识库。

注意

QnA Maker 服务将于 2025 年 10 月 31 日停用(从 2025 年 3 月 31 日延长)。 问答功能的较新版本现已作为 Azure AI 语言的一部分提供。 有关语言服务中的问答功能,请参阅问答。 从 2022 年 10 月 1 日开始,你将无法再创建新的 QnA Maker 资源。 从 2025 年 3 月 31 日开始,QnA Maker 门户不再可用。 有关将现有 QnA Maker 知识库迁移到问题解答的信息,请参阅迁移指南

使用 GenerateAnswer API 获取答案预测

使用机器人或应用程序中的 GenerateAnswer API,能以某个用户问题对知识库进行查询,从问答对中获取匹配度最高的结果。

注意

本文档不适用于最新版本。 若要了解如何使用最新的问题解答 API,请参阅问题解答快速入门指南

发布以获取 GenerateAnswer 终结点

发布知识库后,可以获取 GenerateAnswer 终结点的详细信息。

获取终结点详细信息:

  1. 登录到 QnA Maker 门户。

  2. 在“我的知识库”中,选择知识库的“查看代码”我的知识库的屏幕截图

  3. 获取 GenerateAnswer 终结点的详细信息。

    终结点详细信息的屏幕截图

还可以在知识库的“设置”选项卡中获取终结点详细信息

GenerateAnswer 请求配置

通过 HTTP POST 请求调用 GenerateAnswer。 有关演示如何调用 GenerateAnswer 的示例代码,请参阅快速入门

POST 请求使用:

GenerateAnswer URL 采用以下格式:

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

请记住,使用字符串 EndpointKey 的值和尾随空格,以及在“设置”页上找到的终结点密钥设置 Authorization 的 HTTP 标头属性。

示例 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# 中将 QnA Maker 与机器人配合使用

机器人框架使用 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 中将 QnA Maker 与机器人配合使用

机器人框架使用 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 错误

Code 说明
2xx Success
400 请求的参数不正确,这意味着所需的参数缺失、格式错误或太大
400 请求的正文不正确,这意味着 JSON 缺失、格式错误或太大
401 密钥无效
403 禁止 - 没有正确的权限
404 知识库不存在
410 此 API 已弃用,不再可用

Next steps

“发布”页还提供了使用 Visual Studio Code REST 客户端扩展或 cURL 生成答案的信息。