你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于: SDK v4
适用于语言的 Azure 认知服务 的问题解答 功能提供基于云的自然语言处理(NLP),使你能够基于数据创建自然对话层。 使用该服务可以通过自定义信息知识库,找到针对任何输入的最恰当回答。
本文介绍如何在机器人中使用问答功能。
先决条件
- 如果没有 Azure 订阅,请在开始之前创建一个免费帐户。
- 语言工作室中的语言资源,启用了自定义问答功能。
- C# 或 JavaScript 中的自定义问答示例的副本。
关于此示例
若要在机器人中使用问答,需要现有的知识库。 然后,机器人可以使用知识库来回答用户的问题。
如果需要为 Bot Framework SDK 机器人创建新的知识库,请参阅自定义问答示例的自述文件。
每次收到用户输入都会调用 OnMessageActivityAsync
。 调用后,它会从示例代码的 appsetting.json 文件中访问配置设置,并连接到知识库。
用户的输入将发送到知识库,并向用户显示返回的最佳答案。
获取知识库连接设置
在 Language Studio 中,打开语言资源。
将以下信息复制到机器人的配置文件:
- 语言终结点的主机名。
-
Ocp-Apim-Subscription-Key
,即您的终结点密钥。 - 用作知识库 ID 的项目名称。
您的主机名称是终结点 URL 中位于 https://
和 /language
之间的部分,例如 https://<hostname>/language
。 机器人需要项目名称、主机 URL 和终结点密钥才能连接到知识库。
小提示
如果不为生产部署此功能,可以将机器人的应用 ID 和密码字段留空。
设置和调用知识库客户端
创建知识库客户端,然后使用客户端从知识库中检索答案。
请确保为项目安装 Microsoft.Bot.Builder.AI.QnA NuGet 包。
在 QnABot.cs方法 OnMessageActivityAsync
中创建知识库客户端。 使用轮次上下文查询知识库。
机器人/CustomQABot.cs
using var httpClient = _httpClientFactory.CreateClient();
var customQuestionAnswering = CreateCustomQuestionAnsweringClient(httpClient);
// Call Custom Question Answering service to get a response.
_logger.LogInformation("Calling Custom Question Answering");
var options = new QnAMakerOptions { Top = 1, EnablePreciseAnswer = _enablePreciseAnswer };
var response = await customQuestionAnswering.GetAnswersAsync(turnContext, options);
测试机器人
在计算机本地运行示例。 安装 Bot Framework Emulator(如果尚未安装)。 有关进一步说明,请参阅示例 README
(C# 或 JavaScript)。
启动模拟器,连接到机器人,并将消息发送到机器人。 对问题的回答会根据知识库的信息而有所不同。
其他信息
自定义问答,所有功能示例(C# 或 JavaScript)演示如何使用 QnA Maker 对话框来支持知识库的后续提示和主动学习功能。
- 问题解答支持跟进提示(也称为多轮次提示)。 如果知识库需要来自用户的详细信息,服务会发送可用于提示用户的上下文信息。 此信息还用于对服务发出任何后续调用。
- 问答还支持主动学习建议,使知识库能够随着时间的推移而改进。 QnA Maker 对话支持主动学习功能的直接反馈。