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

使用 QnA Maker 回答问题

适用于:SDK v4

注意

Azure QnA Maker 将于 2025 年 3 月 31 日停用。 从2022年10月1日开始,您将无法创建新的 QnA Maker 资源或知识库。 问答功能的较新版本现已作为 Azure AI 语言的一部分提供。

自定义问答是 Azure 语言认知服务的一项功能,是 QnA Maker 服务的更新版本。 有关 Bot Framework SDK 中的问与答支持的详细信息,请参阅自然语言理解

QnA Maker 提供基于数据的聊天式问答层。 这样机器人就可以向 QnA Maker 发送问题并接收答案,无需分析和解释问题的意图。

创建自己的 QnA Maker 服务的基本要求之一是为其写入问题和答案。 在许多情况下,问题和答案已经存在于常见问题解答或其他文档等内容中;其他情况下,可能需要以更自然、更具聊天风格的方式来自定义问题的解答。

本文介绍如何从机器人使用“现有的”QnA Maker 知识库。

对于新机器人,请考虑使用适用于语言的 Azure 认知服务的问题解答功能。 有关信息,请参阅使用问题解答回答问题

注意

Bot Framework JavaScript、C# 和 Python SDK 将继续受支持,但 Java SDK 即将停用,最终长期支持将于 2023 年 11 月结束。

使用 Java SDK 构建的现有机器人将继续正常运行。

对于新的机器人生成,请考虑使用 Power Virtual Agents 并参阅选择合适的聊天机器人解决方案

有关详细信息,请参阅机器人构建的未来

先决条件

关于此示例

若要将 QnA Maker 运用于机器人,在 QnA Maker 门户中需要存在知识库。 然后,机器人可以使用知识库来回答用户的问题。

对于新的机器人开发,请考虑使用 Power Virtual Agents。 如果需要为 Bot Framework SDK 机器人创建新的知识库,请参阅下列 Azure AI 服务文章:

C# QnABot 逻辑流

每次收到用户输入都会调用 OnMessageActivityAsync。 当调用时,它会访问示例代码的 appsetting.json 文件的配置设定,以便查找连接到预配置的 QnA Maker 知识库所需的值。

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

获取用于将机器人连接到知识库的值

提示

QnA Maker 文档提供有关如何创建、训练和发布知识库的说明。

  1. QnA Maker 站点中选择知识库。
  2. 在打开知识库后,选择“设置”选项卡。记下“服务名称”显示的值。 使用 QnA Maker 门户界面时,此值可用于查找所需的知识库。 此值不可用于将机器人应用连接到此知识库。
  3. 向下滚动,找到“部署详细信息”并记下 Postman 示例 HTTP 请求中的以下值:
    • POST /knowledgebases/<knowledge-base-id>/generateAnswer
    • 主机:<your-host-url>
    • 授权:EndpointKey <your-endpoint-key>

主机 URL 将以 https:// 开头,并以 /qnamaker 结尾,如 https://<hostname>.azure.net/qnamaker。 机器人需要知识库 ID、主机 URL 和端点密钥才能连接到 QnA Maker 知识库。

更新设置文件

首先,请将访问知识库所需的信息(包括主机名、端点密钥和知识库 ID (kbId))添加到设置文件中。 这些是在 QnA Maker 中通过知识库的“设置”选项卡保存的值。

如果不是针对生产环境进行此部署,则机器人应用 ID 和密码字段可以留空。

注意

若要将 QnA Maker 知识库添加到现有的机器人应用程序中,请务必为 QnA 条目添加说明性标题。 此节中的 "name" 值提供所需的密钥用于从应用内部访问此信息。

设置 QnA Maker 实例

首先,创建一个用于访问 QnA Maker 知识库的对象。

请确保为项目安装 Microsoft.Bot.Builder.AI.QnA NuGet 包。

在 QnABot.cs 的 OnMessageActivityAsync 方法中,创建一个 QnAMaker 实例。 QnABot 类也是在其中拉入连接信息名称(保存在上面的 appsettings.json 中)的位置。 如果在设置文件中为知识库连接信息选择了其他名称,请务必根据你所选择的名称在此更新这些名称。

Bots/QnABot.cs

C#(已存档)

通过机器人调用 QnA Maker

当机器人需要来自 QnAMaker 的答案时,请通过机器人代码调用 GetAnswersAsync 方法,以便根据当前的上下文获取适当的答案。 若要访问自己的知识库,请更改下面的“找不到答案”消息,为用户提供有用的说明。

Bots/QnABot.cs

C#(已存档)

测试机器人

在计算机本地运行示例。 安装 Bot Framework Emulator(如果尚未安装)。 有关进一步的说明,请参阅示例的 READMEC#(已存档)JavaScript(已存档)Java(已存档)Python(已存档))。

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

测试示例机器人。

其他信息

“QnA Maker 多轮次”示例(C# 多轮次示例(已存档)JavaScript 多轮次示例(已存档)Java 多轮次示例(已存档)Python 多轮次示例(已存档))演示如何使用 QnA Maker 对话支持 QnA Maker 的跟进提示和主动学习功能。

  • QnA Maker 支持跟进提示(也称为多轮次提示)。 如果 QnA Maker 知识库需要用户的其他响应,QnA Maker 将发送上下文信息,你可以使用此信息来提示用户。 此信息还用于对 QnA Maker 服务发出任何后续调用。 在版本 4.6 中,Bot Framework SDK 添加了对此功能的支持。

    若要构造此类知识库,请参阅有关如何 使用跟进提示创建多个聊天轮次的 QnA Maker 文档。

  • QnA Maker 还支持主动学习建议,使知识库能够随时间推移而改进。 QnA Maker 对话支持主动学习功能的直接反馈。

    若要在知识库上启用此功能,请参阅有关主动学习建议的 QnA Maker 文档。

后续步骤

QnA Maker 可与其他 Azure AI 服务结合使用,使机器人更加强大。 Bot Framework Orchestrator 提供了一种在机器人中将 QnA 与语言理解 (LUIS) 相结合的方法。