你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
In this tutorial, you learn how to:
- 创建项目,将问答对标记到包含元数据的不同类别中
- 为每个域创建一个单独的项目
- 为每个域创建一个单独的语言资源
生成 FAQ 机器人时,可能会遇到需要跨多个域处理查询的用例。 假设 Microsoft 的营销团队想要构建一个客户支持机器人,该机器人可以回答用户针对多个 Surface 产品的常见查询。 为了简单起见,我们使用两个 FAQ URL( Surface Pen 和 Surface Earbuds )来创建项目。
使用特定于域的元数据创建项目
内容作者可使用文档提取问答对,或将自定义问答对添加到项目。 若要将问题和答案分组到特定域或类别中,可以添加元数据。
对于 Surface 产品上的机器人,可以按照以下步骤创建一个机器人来回答关于这两种产品类型的查询:
添加以下 FAQ URL 作为源,选择“添加源”>“URL”>“添加所有”(只要你添加以下每个 URL 即可):
在此项目中,我们为两个不同的产品设置了一组问答对。 我们的目标是明确区分这些产品,以便用户可以在特定产品的问答集中搜索相关响应。
在此示例中,我们添加了一个元数据,其中包含 产品 作为密钥, surface_pen 或 surface_earbuds 作为值(无论适用)。 可以扩展此示例,以提取多个产品的数据,并为每个产品添加不同的值。
现在,为了限制系统搜索特定产品的响应,需要在自定义问题解答 REST API 中将该产品作为筛选器传递。
可以从“部署项目”窗格中检索 REST API 预测 URL:
在 API 调用的 JSON 正文中,我们已将 surface_pen 作为元数据“product”的值传递。 因此,系统仅查找具有相同元数据的 QnA 对中的响应。
{ "question": "What is the price?", "top": 3 }, "answerSpanRequest": { "enable": true, "confidenceScoreThreshold": 0.3, "topAnswersWithSpan": 1 }, "filters": { "metadataFilter": { "metadata": [ { "key": "product", "value": "surface_pen" } ] } }可按照以下方式根据用户输入获取元数据值:
通过机器人客户端将域明确用作用户的输入。 例如,启动对话时,可以将产品类别作为用户的输入。

基于机器人上下文隐式识别域。 例如,如果上一个问题与特定的 Surface 产品有关,则客户端可以将其保存为上下文。 如果用户未在下一个查询中指定产品,则可以将机器人上下文作为元数据传递给生成答案 API。

从用户查询中提取实体,以识别用于元数据筛选的域。 可以使用其他 Azure AI 服务,例如命名实体识别 (NER) 和对话语言理解进行实体提取。

项目可以有多大?
可以将最多 50000 个问答对添加到一个项目。 如果数据超过 50,000 个问答对,则应考虑拆分项目。
为每个域创建一个单独的项目
还可以为每个域创建一个单独的项目,并分别维护这些项目。 所有 API 都要求用户传递项目名称,以便对项目进行任何更新或提取用户问题的答案。
当服务收到用户问题时,您需要在显示的 REST API 终结点中传递 projectName,以从相关项目中获取响应。 可以在“部署项目”页的“获取预测 URL”下查找 URL:
https://southcentralus.cognitiveservices.azure.com/language/:query-knowledgebases?projectName=Test-Project-English&api-version=2021-10-01&deploymentName=production
为每个域创建一个单独的语言资源
假设 Microsoft 的营销团队想要构建一个客户支持机器人,该机器人可以回答用户针对 Surface 和 Xbox 产品的常见查询。 他们计划安排不同的团队访问 Surface 和 Xbox 上的项目。 在这种情况下,应创建两个自定义问题解答资源-一个用于 Surface,另一个用于 Xbox。 可以为访问同一资源的用户定义不同的角色。


