Azure AI 検索での引用に基づく応答に回答合成を使用する (プレビュー)

メモ

Azure AI 検索は、Azure ポータル、REST API、およびAzure SDKから使用できます。 また、Foundry IQ は、エンタープライズ コンテンツを、Microsoft Foundry ポータルのエージェントの再利用可能なアクセス許可に対応したナレッジ ベースに変換するマネージド ナレッジ レイヤーです。

重要

機能、またはマークされたプロパティ (プレビュー) は、サービス レベル アグリーメントの対象ではなく、運用環境のワークロードには推奨されず、一般公開される前に変更または制約される可能性があります。 Azure AI 検索 プレビューの用語は、スタンドアロンでも一般公開されている機能の一部でも、すべてのプレビュー機能に適用されます。

既定では、Azure AI 検索のナレッジ ベースによってデータ抽出が実行され、ナレッジ ソースから生のグラウンド チャンクが返されます。 データ抽出は特定の情報を取得するのに役立ちますが、複雑なクエリに必要なコンテキストと推論がありません。

代わりに、ナレッジ ベースで指定された LLM を使用して自然言語でクエリに応答する 応答合成 (プレビュー) を有効にすることができます。 各回答には、取得したソースへの引用が含まれており、箇条書きの使用など、指定した指示に従います。

このプロパティは、ナレッジ ベースまたは取得要求で設定できます。 ナレッジ ベースの設定ではすべてのクエリの既定値が設定されますが、取得要求設定ではクエリごとに既定値がオーバーライドされます。

使用サポート

Azure Portal Microsoft Foundry ポータル .NET SDK Python SDK Java SDK JavaScript SDK REST API
✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️

前提 条件

  • LLM を指定する knowledge base を持つAzure AI 検索 サービス。

  • ナレッジ ベースを更新するためのアクセス許可。 ユーザー アカウントに割り当てられた Search Service 共同作成者ロール (推奨) を使用してキーレス認証を構成するか、管理者 API キーを使用します。

  • LLM への発信呼び出しの場合、検索サービスには、Microsoft Foundry リソースに対して マネージド ID と Cognitive Services User のアクセス許可が必要です。

  • 最新の 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

  • Search Service REST API の 2026-08-01-preview バージョン。

  • キーレス認証の場合は、各 HTTP 要求の Authorization ヘッダーにMicrosoft Entra ID トークンを含めます。

制限事項と考慮事項

  • 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);

リファレンス: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)

リファレンス: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);

Reference: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)

Reference: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]."

ナレッジ ベースの構成によっては、応答にアクティビティ ログや参照配列などの他の情報が含まれる場合があります。 詳細については、「 ナレッジ ベースの作成」を参照してください。