使用问题解答回答问题

适用于:SDK v4

Azure 语言认知服务中的问题解答功能提供基于云的自然语言处理 (NLP),帮助你基于数据创建自然对话层。 使用该服务可以通过自定义信息知识库,找到针对任何输入的最恰当回答。

本文介绍如何在机器人中使用问题解答功能。

先决条件

关于此示例

如要在机器人中使用问题解答功能,需要现有的知识库。 然后,机器人可以使用知识库来回答用户的问题。

如果需要为 Bot Framework SDK 机器人创建新的知识库,请参阅自定义问题解答示例的自述文件。

C# 问题解答机器人逻辑流。

每次收到用户输入都会调用 OnMessageActivityAsync。 调用后,它会从示例代码的 appsetting.json 文件访问配置设置,并连接到知识库。

用户的输入将发送到知识库,而返回的最佳解答将回显给用户。

获取知识库连接设置

  1. Language Studio 中,打开语言资源。

  2. 将以下信息拷贝到机器人的配置文件:

    • 语言终结点的主机名。
    • 终结点密钥 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(如果尚未安装)。 有关更多说明,请参阅示例的 READMEC#JavaScript)。

启动 Emulator,连接到机器人,然后向机器人发送消息。 对问题的回答会因知识库的信息而异。

其他信息

自定义问题解答,所有功能示例(C#JavaScript)演示如何使用 QnA Maker 对话支持知识库的跟进提示和主动学习功能。

  • 问题解答支持跟进提示(也称为多轮次提示)。 如果知识库需要用户提供更多信息,该服务将发送上下文信息,你可以使用此信息来提示用户。 此信息还用于对该服务发出任何后续调用。
  • 问题解答还支持主动学习建议,使知识库能够随时间推移而改进。 QnA Maker 对话支持主动学习功能的直接反馈。