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

在 Azure AI 搜索中返回语义答案

调用语义排名和标题时,可选择性地从最匹配的文档中直接提取能够“回答”查询的内容。 可以在响应中包含一个或多个答案,然后可以在搜索页上呈现这些答案,以改善应用的用户体验。

语义答案是搜索索引中一字不差的内容,阅读理解模型已将其识别为请求中提出的查询的答案。 它不是生成的答案。 有关使用生成式 AI 从内容中合成答案的聊天式用户交互模型的指导,请参阅检索增强生成 (RAG)

本文介绍如何请求语义答案、解包响应,并了解哪些内容特征最有利于生成高质量的答案。

先决条件

适用于语义查询的所有先决条件(包括服务层和区域)同样适用于答案。

  • 查询逻辑必须包括语义查询参数“queryType=semantic”和“answers”参数。 本文将介绍所需的参数。

  • 用户输入的查询字符串必须可识别为一个问题(什么、何处、何时、如何)。

  • 索引中的搜索文档必须包含具有回答特征的文本,并且该文本必须存在于语义配置中列出的某个字段内。 例如,给定查询“what is a hash table”,如果没有一个语义配置中的字段包含其中有“A hash table is ...”的段落,则不太可能返回答案。

注意

从 2021-04-30-Preview 开始,在创建或更新索引请求中,需要使用 "semanticConfiguration" 来指定用于语义排名的输入字段。

什么是语义答案?

语义答案是语义查询响应的子结构。 它由搜索文档中的一个或多个字面段落构成,表述为对类似于提问的查询给出的答案。 若要返回答案,短语或句子必须存在于具有回答语言特征的搜索文档中,并且查询本身必须以提问的形式表示。

Azure AI 搜索使用机器阅读理解模型来识别并选取最佳答案。 该模型根据可用的内容生成一组潜在答案,在达到足够高的置信度级别后,它便会给出一个答案。

答案将在查询响应有效负载中作为独立的顶级对象返回,你可以选择在搜索页上将此对象与搜索结果一起呈现。 从结构上讲,它是响应中的一个数组元素,由文本、文档键和置信度分数组成。

制定适用于“answers”的 REST 查询

若要返回语义答案,查询必须具有语义 "queryType""queryLanguage""semanticConfiguration",以及 "answers" 参数。 指定这些参数并不保证会获得答案,但请求必须包含这些参数才能进行回答处理。

{
    "search": "how do clouds form",
    "queryType": "semantic",
    "queryLanguage": "en-us",
    "semanticConfiguration": "my-semantic-config",
    "answers": "extractive|count-3",
    "captions": "extractive|highlight-true",
    "count": "true"
}
  • 查询字符串不得为 null,并且应表述为提问形式。

  • "queryType" 必须设置为“semantic”。

  • "queryLanguage" 必须是支持的语言列表 (REST API) 中的值之一。

  • "semanticConfiguration" 确定哪些字符串字段向提取模型提供标记。 生成标题的字段也会生成答案。 有关详细信息,请参阅创建语义配置

  • 对于 "answers",参数构造为 "answers": "extractive",其中,返回的默认答案数为 1。 可通过添加 count(如上例所示)来增加答案的数量(最多 10 个)。 是否需要多个答案取决于应用的用户体验以及呈现结果的方式。

解压缩响应中的“answer”

答案在 "@search.answers" 数组中提供,该数组在查询响应中最先出现。 数组中的每个答案将包括:

  • 文档键
  • 采用纯文本或格式设置的答案的文本或内容
  • 置信度分数

如果答案是不确定的,则响应将显示为 "@search.answers": []。 答案数组后接值数组,这是语义查询中的标准响应。

假设查询为“how do clouds form”,以下示例演示答案:

{
    "@search.answers": [
        {
            "key": "4123",
            "text": "Sunlight heats the land all day, warming that moist air and causing it to rise high into the   atmosphere until it cools and condenses into water droplets. Clouds generally form where air is ascending (over land in this case),   but not where it is descending (over the river).",
            "highlights": "Sunlight heats the land all day, warming that moist air and causing it to rise high into the   atmosphere until it cools and condenses into water droplets. Clouds generally form<em> where air is ascending</em> (over land in this case),   but not where it is<em> descending</em> (over the river).",
            "score": 0.94639826
        }
    ],
    "value": [
        {
            "@search.score": 0.5479723,
            "@search.rerankerScore": 1.0321671911515296,
            "@search.captions": [
                {
                    "text": "Like all clouds, it forms when the air reaches its dew point—the temperature at which an air mass is cool enough for its water vapor to condense into liquid droplets. This false-color image shows valley fog, which is common in the Pacific Northwest of North America.",
                    "highlights": "Like all<em> clouds</em>, it<em> forms</em> when the air reaches its dew point—the temperature at    which an air mass is cool enough for its water vapor to condense into liquid droplets. This false-color image shows valley<em> fog</em>, which is common in the Pacific Northwest of North America."
                }
            ],
            "title": "Earth Atmosphere",
            "content": "Fog is essentially a cloud lying on the ground. Like all clouds, it forms when the air reaches its dew point—the temperature at  \n\nwhich an air mass is cool enough for its water vapor to condense into liquid droplets.\n\nThis false-color image shows valley fog, which is common in the Pacific Northwest of North America. On clear winter nights, the \n\nground and overlying air cool off rapidly, especially at high elevations. Cold air is denser than warm air, and it sinks down into the \n\nvalleys. The moist air in the valleys gets chilled to its dew point, and fog forms. If undisturbed by winds, such fog may persist for \n\ndays. The Terra satellite captured this image of foggy valleys northeast of Vancouver in February 2010.\n\n\n",
            "locations": [
                "Pacific Northwest",
                "North America",
                "Vancouver"
            ]
        }
    ]
}

设计包含答案的搜索结果页时,请确保处理找不到答案的情况。

在 @search.answers 中:

  • “key”是匹配项的文档键或 ID。 获取文档键后,可以使用查找文档 API 来检索要包含在搜索页或详细信息页中的搜索文档的任何部分或所有部分。

  • “text”和“highlights”以纯文本格式和突出显示形式提供相同的内容。

    默认情况下,突出显示的样式为 <em>,你可以使用现有的 highlightPreTag 和 highlightPostTag 参数替代此样式。 如其他部分中所述,答案实质上是搜索文档中的字面内容。 提取模型将查找答案的特征以查找相应的内容,但不会在响应中撰写新语言。

  • “score”是置信度分数,用于反映答案的可信度。 如果响应中有多个答案,此分数将用于确定顺序。 可以从不同的搜索文档派生最可信的答案和最可信的标题,其中,最可信的答案来自一个文档,最可信的标题来自另一个文档,但一般情况下,相同的文档会出现在每个数组中的最靠前位置。

答案后接“value”数组,该数组始终包含分数、标题以及默认可检索的任何字段。 如果指定了 select 参数,则“value”数组限制为指定的字段。 有关详细信息,请参阅配置语义排序器

有关生成高质量答案的提示

为获得最佳结果,应返回文档集中具有以下特征的语义答案:

  • “semanticConfiguration”必须包含可提供足够文本的字段,这样就可能在其中找到答案。 应首先在“prioritizedContentFields”中列出更有可能包含答案的字段。 只有文档中的逐字文本才能显示为答案。

  • 查询字符串不能为空 (search=*),并且字符串应具有问题的特征,如“是什么”或“如何”,而不是由任意顺序的术语或短语组成的关键字搜索。 如果查询字符串看上去不是问题,则会跳过答案处理,即使请求指定了“answers”作为查询参数,也是如此。

  • 语义提取和汇总对于可以及时分析的每个文档中的标记数有限制。 在实践中,如果你的大型文档包含数百个页面,则首先尝试将内容分解为较小的文档。

后续步骤