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

在 Azure AI 搜索中对引文支持的响应使用答案合成(预览版)

注意

Azure AI 搜索可通过Azure门户、REST API 和Azure SDK获取。 它也是 Foundry IQ 的基础;Foundry IQ 是一个托管式知识层,可将企业内容转化为供 Microsoft Foundry 门户中的智能体使用的、可复用且具备权限感知能力的知识库。

重要

标记为“预览”的特性、功能或属性不受服务级别协议 (SLA) 保障,不建议用于生产工作负载,并且在正式发布之前可能会更改或受到限制。 Azure AI 搜索预览条款适用于所有预览功能,无论是独立功能还是正式版功能的一部分。

默认情况下,Azure AI 搜索 中的知识库会执行数据提取操作,该操作会从知识源返回原始的 grounding 文本块。 数据提取可用于检索特定信息,但缺少复杂查询所需的上下文和推理。

可以改为启用 答案合成 (预览),该合成使用知识库中指定的 LLM 以自然语言回答查询。 每个答案都包含检索的来源的引文,并遵循你提供的任何说明,例如使用项目符号列表。

可以在知识库或检索请求中设置此属性。 知识库设置为所有查询建立默认值,而检索请求设置会基于查询替代默认值。

使用支持

Azure 门户 Microsoft Foundry 门户 .NET SDK Python SDK Java SDK JavaScript SDK REST API
✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️

先决条件

  • 具有指定 LLM 的知识库的 Azure AI 搜索服务。

  • 更新知识库的权限。 使用分配给用户帐户的搜索服务参与者角色(建议)或使用管理员 API 密钥配置无密钥身份验证。

  • 对于对 LLM 的出站调用,搜索服务必须具有托管标识,对 Microsoft Foundry 资源具有认知服务用户权限。

  • 最新的 Azure.Search.Documents 预览包:dotnet add package Azure.Search.Documents --prerelease

  • 对于无密钥身份验证,请使用 Azure.Identity 软件包:dotnet add package Azure.Identity

  • 最新的 azure-search-documents 预览包:pip install --pre azure-search-documents

  • 对于无密钥身份验证,请使用 azure-identity 软件包:pip install azure-identity

限制和注意事项

  • minimal 检索推理工作量会禁用 LLM 处理,因此与知识库定义和检索请求中的答案合成均不兼容。 有关详细信息,请参阅 设置检索推理工作。

  • 答案合成会产生Azure OpenAI 的即用即付费用,这些费用基于输入和输出令牌的数量。 费用显示在分配给知识库的 LLM 下。 有关详细信息,请参阅 区域可用性、限制和计费。

在知识库中启用答案合成

本部分演示如何在现有知识库中启用答案合成。 尽管可以将此配置用于新的知识库,但知识库创建超出了本文的范围。

在OutputMode定义中,将"answerSynthesis"设置为KnowledgeBase。 (可选)设置为 AnswerInstructions 自定义答案输出。 以下示例指示知识库 Use concise bulleted lists。

var aoaiParams = new AzureOpenAIVectorizerParameters
{
    ResourceUri = new Uri("<aoai-endpoint>"),
    DeploymentName = "<aoai-gpt-deployment>",
    ModelName = "<aoai-gpt-model>",
};

var knowledgeBase = new KnowledgeBase(
    name: "<knowledge-base-name>",
    knowledgeSources: new[] { new KnowledgeSourceReference("<knowledge-source-name>") })
{
    Models = { new KnowledgeBaseAzureOpenAIModel(aoaiParams) },
    OutputMode = "answerSynthesis",
    AnswerInstructions = "Use concise bulleted lists",
};

await indexClient.CreateOrUpdateKnowledgeBaseAsync(knowledgeBase);

Reference:SearchIndexClient、 KnowledgeBase

在output_mode定义中,将"answerSynthesis"设置为KnowledgeBase。 (可选)设置为 answer_instructions 自定义答案输出。 以下示例指示知识库 Use concise bulleted lists。

from azure.search.documents.indexes import SearchIndexClient
from azure.search.documents.indexes.models import (
    AzureOpenAIVectorizerParameters,
    KnowledgeBase,
    KnowledgeBaseAzureOpenAIModel,
    KnowledgeSourceReference,
)

aoai_params = AzureOpenAIVectorizerParameters(
    resource_url="<aoai-endpoint>",
    deployment_name="<aoai-gpt-deployment>",
    model_name="<aoai-gpt-model>",
)

knowledge_base = KnowledgeBase(
    name="<knowledge-base-name>",
    models=[KnowledgeBaseAzureOpenAIModel(azure_open_ai_parameters=aoai_params)],
    knowledge_sources=[KnowledgeSourceReference(name="<knowledge-source-name>")],
    output_mode="answerSynthesis",
    answer_instructions="Use concise bulleted lists",
)

index_client = SearchIndexClient(endpoint=search_endpoint, credential=credential)
index_client.create_or_update_knowledge_base(knowledge_base)

Reference:SearchIndexClient、 KnowledgeBase

在知识库定义中,将 outputMode 设置为 "answerSynthesis"。 (可选)设置为 answerInstructions 自定义答案输出。 以下示例指示知识库 Use concise bulleted lists。

### Enable answer synthesis in a knowledge base
PUT {{search-endpoint}}/knowledgebases/{{knowledge-base-name}}?api-version=2026-08-01-preview
Content-Type: application/json
Authorization: Bearer {{search-access-token}}

{
    "name": "{{knowledge-base-name}}",
    "knowledgeSources": [ ... // OMITTED FOR BREVITY ],
    "models": [ ... // OMITTED FOR BREVITY ],
    "outputMode": "answerSynthesis",
    "answerInstructions": "Use concise bulleted lists"
}

参考:知识库 - 创建或更新

在检索请求中启用应答合成

对于对响应格式的按查询控制,可以在查询时启用答案合成。 此方法替代知识库中指定的默认输出模式。

在 OutputMode 上将 "answerSynthesis" 设置为 KnowledgeBaseRetrievalRequest。

var client = new KnowledgeBaseRetrievalClient(
    endpoint: new Uri(searchEndpoint),
    knowledgeBaseName: knowledgeBaseName,
    credential: credential);

var request = new KnowledgeBaseRetrievalRequest();
request.Messages.Add(
    new KnowledgeBaseMessage(
        content: new[]
        {
            new KnowledgeBaseMessageTextContent("What is healthcare?")
        }) { Role = "user" });
request.OutputMode = "answerSynthesis";

var result = await client.RetrieveAsync(request);

参考:KnowledgeBaseRetrievalClient、 KnowledgeBaseRetrievalRequest

在 output_mode 上将 "answerSynthesis" 设置为 KnowledgeBaseRetrievalRequest。

from azure.search.documents.knowledgebases import KnowledgeBaseRetrievalClient
from azure.search.documents.knowledgebases.models import (
    KnowledgeBaseMessage,
    KnowledgeBaseMessageTextContent,
    KnowledgeBaseRetrievalRequest,
)

agent_client = KnowledgeBaseRetrievalClient(
    endpoint=search_endpoint,
    credential=credential,
    knowledge_base_name=knowledge_base_name,
)

request = KnowledgeBaseRetrievalRequest(
    messages=[
        KnowledgeBaseMessage(
            role="user",
            content=[KnowledgeBaseMessageTextContent(text="What is healthcare?")],
        )
    ],
    output_mode="answerSynthesis",
)

result = agent_client.retrieve(retrieval_request=request)

参考:KnowledgeBaseRetrievalClient、 KnowledgeBaseRetrievalRequest

在检索请求中将 outputMode 设置为 "answerSynthesis"。

### Enable answer synthesis in a retrieve request
POST {{search-endpoint}}/knowledgebases/{{knowledge-base-name}}/retrieve?api-version=2026-08-01-preview
Content-Type: application/json
Authorization: Bearer {{search-access-token}}

{
    "messages": [
        {
            "role": "user",
            "content": [
                {
                    "type": "text",
                    "text": "What is healthcare?"
                }
            ]
        }
    ],
    "outputMode": "answerSynthesis"
}

参考:知识检索 - 检索

获取合成答案

启用答案合成后,知识库会根据你在知识库中指定的说明返回自然语言答案。 知识来源的引用格式为[ref_id:<number>]。

例如,如果你的说明是 Use concise bulleted lists,而你的查询是 What is healthcare?,那么响应应类似于以下示例。

{
  "response": [
    {
      "content": [
        {
          "type": "text",
          "text": "- Healthcare encompasses various services provided to patients and the general population ..."
        }
      ]
    }
  ]
}

完整 text 输出如下所示:

"- Healthcare encompasses various services provided to patients and the general population, including primary health services, hospital care, dental care, mental health services, and alternative health services [ref_id:1].\n- It involves the delivery of safe, effective, patient-centered care through different modalities, such as in-person encounters, shared medical appointments, and group education sessions [ref_id:0].\n- Behavioral health is a significant aspect of healthcare, focusing on the connection between behavior and overall health, including mental health and substance use [ref_id:2].\n- The healthcare system aims to ensure quality of care, access to providers, and accountability for positive outcomes while managing costs effectively [ref_id:2].\n- The global health system is evolving to address complex health needs, emphasizing the importance of cross-sectoral collaboration and addressing social determinants of health [ref_id:4]."

根据知识库的配置,响应可能包含其他信息,例如活动日志和引用数组。 有关详细信息,请参阅 创建知识库。