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

使用 GenerateAnswer API 获取答案

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

注意

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

使用 GenerateAnswer API 获取答案预测

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

注意

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

发布以获取 GenerateAnswer 终结点

发布知识库后,从 QnA Maker 门户或使用 API 都可以获取 GenerateAnswer 终结点的详细信息。

获取终结点详细信息:

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

  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 错误

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

后续步骤

“发布”页还提供了使用 Postman 或 cURL 生成答案的信息。