你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
若要获取用户问题的预测答案,请使用 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 终结点的详细信息。
获取终结点详细信息:
登录到 QnA Maker 门户。
在“我的知识库”中,选择知识库的“查看代码”。

获取 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 生成答案的信息。