使用问题解答回答问题
适用于:SDK v4
Azure 语言认知服务中的问题解答功能提供基于云的自然语言处理 (NLP),帮助你基于数据创建自然对话层。 使用该服务可以通过自定义信息知识库,找到针对任何输入的最恰当回答。
本文介绍如何在机器人中使用问题解答功能。
先决条件
- 如果没有 Azure 订阅,请在开始前创建一个试用版订阅。
- Language Studio 的语言资源,启用了自定义问题解答功能。
- C# or JavaScript 中自定义问题解答示例的副本。
关于此示例
如要在机器人中使用问题解答功能,需要现有的知识库。 然后,机器人可以使用知识库来回答用户的问题。
如果需要为 Bot Framework SDK 机器人创建新的知识库,请参阅自定义问题解答示例的自述文件。
每次收到用户输入都会调用 OnMessageActivityAsync
。 调用后,它会从示例代码的 appsetting.json 文件访问配置设置,并连接到知识库。
用户的输入将发送到知识库,而返回的最佳解答将回显给用户。
获取知识库连接设置
在 Language Studio 中,打开语言资源。
将以下信息拷贝到机器人的配置文件:
- 语言终结点的主机名。
- 终结点密钥
Ocp-Apim-Subscription-Key
。 - 用作知识库 ID 的项目名称。
主机名是 https://
和 /language
之间终结点 URL的一部分,例如 https://<hostname>/language
。 机器人需要项目名称、主机 URL 和终结点密钥才能连接到知识库。
提示
如果不是针对生产环境进行此部署,则机器人应用 ID 和密码字段可以留空。
设置并调用知识库客户端
创建知识库客户端,然后使用该客户端从知识库中检索答案。
请确保为项目安装 Microsoft.Bot.Builder.AI.QnA NuGet 包。
在 QnABot.cs 中,使用 OnMessageActivityAsync
方法创建知识库客户端。 使用轮次上下文查询知识库。
Bots/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)。
启动 Emulator,连接到机器人,然后向机器人发送消息。 对问题的回答会因知识库的信息而异。
其他信息
自定义问题解答,所有功能示例(C# 或 JavaScript)演示如何使用 QnA Maker 对话支持知识库的跟进提示和主动学习功能。
- 问题解答支持跟进提示(也称为多轮次提示)。 如果知识库需要用户提供更多信息,该服务将发送上下文信息,你可以使用此信息来提示用户。 此信息还用于对该服务发出任何后续调用。
- 问题解答还支持主动学习建议,使知识库能够随时间推移而改进。 QnA Maker 对话支持主动学习功能的直接反馈。