次の方法で共有


Azure AI 検索でナレッジ ベースを作成する

現在、この機能はパブリック プレビュー段階にあります。 このプレビュー版はサービス レベル アグリーメントなしで提供されています。運用環境のワークロードに使用することはお勧めできません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳細については、「Microsoft Azure プレビューの使用条件を参照してください。

Azure AI 検索では、knowledge base は、agentic 取得を調整する最上位のオブジェクトです。 クエリを実行するナレッジ ソースと、取得操作の既定の動作を定義します。 クエリ時に、 取得メソッド はナレッジ ベースをターゲットにして、構成された取得パイプラインを実行します。

ナレッジ ベースは、Microsoft Foundry (新しい) ポータルの Foundry IQ ワークロードで作成できます。 また、Azure AI 検索 API を使用して作成するすべてのエージェント ソリューションのナレッジ ベースも必要です。

ナレッジ ベースでは、次の項目を指定します。

  • 検索可能なコンテンツを指す 1 つ以上のナレッジ ソース。
  • クエリの計画と回答の定式化のための推論機能を提供するオプションの LLM。
  • LLM が呼び出されるかどうかを決定し、コスト、待機時間、品質を管理する検索推論プロセス。
  • ルーティング、ソースの選択、出力形式、およびオブジェクトの暗号化を制御するカスタム プロパティ。

ナレッジ ベースを作成した後は、いつでもそのプロパティを更新できます。 ナレッジ ベースが使用中の場合、更新は次の取得に有効になります。

Important

2025-11-01-preview では、2025-08-01-preview の "ナレッジ エージェント" の名前が "ナレッジ ベース" に変更されます。これは重大な変更です。 できるだけ早い、新しい API への既存のコードからの移行をおすすめします。

利用サポート

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

[前提条件]

サポートされているモデル

FoundryモデルでAzure OpenAIの次のいずれかのLLMを使用します。 デプロイ手順については、FoundryポータルでMicrosoft Foundryモデルをデプロイするを参照してください。

  • gpt-4o
  • gpt-4o-mini
  • gpt-4.1
  • gpt-4.1-nano
  • gpt-4.1-mini
  • gpt-5
  • gpt-5-nano
  • gpt-5-mini

アクセスを構成する

Azure AI 検索は、Azure OpenAI から LLM にアクセスする必要があります。 認証用にMicrosoft Entra IDし、承認用にロールベースのアクセスを行うことをお勧めします。 ロールを割り当てるには、 所有者またはユーザー アクセス管理者である必要があります。 ロールを使用できない場合は、代わりにキーベースの認証を使用してください。

  1. Azure AI 検索 にマネージド ID を使用するように構成する

  2. Foundry Models などのモデル プロバイダーで、検索サービスのマネージド ID に Cognitive Services ユーザー を割り当てます。 ローカルでテストする場合は、同じロールをユーザー アカウントに割り当てます。

  3. ローカル テストの場合は、「 クイック スタート: キーなしで接続 して特定のサブスクリプションとテナントにサインインする」の手順に従います。 各要求でDefaultAzureCredentialの代わりにAzureKeyCredentialを使用します。これは次の例のようになります。

    using Azure.Search.Documents.Indexes;
    using Azure.Identity;

    var indexClient = new SearchIndexClient(new Uri(searchEndpoint), new DefaultAzureCredential());
    ```

  1. Azure AI 検索 をマネージド ID で構成する

  2. Foundry Models などのモデル プロバイダーで、検索サービスのマネージド ID に Cognitive Services ユーザー を割り当てます。 ローカルでテストする場合は、同じロールをユーザー アカウントに割り当てます。

  3. ローカル テストの場合は、「 クイック スタート: キーなしで接続 して特定のサブスクリプションとテナントにサインインする」の手順に従います。 各要求でDefaultAzureCredentialの代わりにAzureKeyCredentialを使用します。これは次の例のようになります。

    # Authenticate using roles
    from azure.identity import DefaultAzureCredential
    index_client = SearchIndexClient(endpoint = "search_url", credential = DefaultAzureCredential())
    ```

  1. Azure AI 検索 をマネージド ID で構成する

  2. Foundry Models などのモデル プロバイダーで、検索サービスのマネージド ID に Cognitive Services ユーザー を割り当てます。 ローカルでテストする場合は、同じロールをユーザー アカウントに割り当てます。

  3. ローカル テストの場合は、「 クイック スタート: キーなしで接続 して、特定のサブスクリプションとテナントの個人用アクセス トークンを取得する」の手順に従います。 各要求でアクセス トークンを指定します。これは次の例のようになります。

    # List indexes using roles
    GET https://{{search-url}}/indexes?api-version=2025-11-01-preview
    Content-Type: application/json
    Authorization: Bearer {{access-token}}
    ```

Important

この記事のコード スニペットでは、API キーを使用します。 ロールベースの認証を使用する場合は、それに応じて各要求を更新します。 両方の方法を指定する要求では、API キーが優先されます。

既存のナレッジ ベースを確認する

ナレッジ ベースは、最上位の再利用可能なオブジェクトです。 既存のナレッジ ベースについて知ることは、新しいオブジェクトを再利用または名前付けする場合に役立ちます。 2025-08-01-preview ナレッジ エージェントはすべてナレッジ ベース コレクションに返されます。

次のコードを実行して、既存のナレッジ ベースを名前で一覧表示します。

// List knowledge bases by name
  using Azure.Search.Documents.Indexes;

  var indexClient = new SearchIndexClient(new Uri(searchEndpoint), credential);
  var knowledgeBases = indexClient.GetKnowledgeBasesAsync();

  Console.WriteLine("Knowledge Bases:");

  await foreach (var kb in knowledgeBases)
  {
      Console.WriteLine($"  - {kb.Name}");
  }

次のコードを実行して、既存のナレッジ ベースを名前で一覧表示します。

# List knowledge bases by name
from azure.core.credentials import AzureKeyCredential
from azure.search.documents.indexes import SearchIndexClient

index_client = SearchIndexClient(endpoint = "search_url", credential = AzureKeyCredential("api_key"))

for kb in index_client.list_knowledge_bases():
    print(f"  - {kb.name}")

ナレッジ ベース - リスト (REST API) を使用して、名前と種類でナレッジ ベースを一覧表示します。

# List knowledge bases
GET {{search-url}}/knowledgebases?api-version=2025-11-01-preview&$select=name
Content-Type: application/json
api-key: {{search-api-key}}

名前で 1 つのナレッジ ベースを返して、その JSON 定義を確認することもできます。

using Azure.Search.Documents.Indexes;
using System.Text.Json;

var indexClient = new SearchIndexClient(new Uri(searchEndpoint), credential);

// Specify the knowledge base name to retrieve
string kbNameToGet = "earth-knowledge-base";

// Get a specific knowledge base definition
var knowledgeBaseResponse = await indexClient.GetKnowledgeBaseAsync(kbNameToGet);
var kb = knowledgeBaseResponse.Value;

// Serialize to JSON for display
string json = JsonSerializer.Serialize(kb, new JsonSerializerOptions { WriteIndented = true });
Console.WriteLine(json);
# Get a knowledge base definition
from azure.core.credentials import AzureKeyCredential
from azure.search.documents.indexes import SearchIndexClient
import json

index_client = SearchIndexClient(endpoint = "search_url", credential = AzureKeyCredential("api_key"))

kb = index_client.get_knowledge_base("knowledge_base_name")
print(json.dumps(kb.as_dict(), indent = 2))
# Get knowledge base
GET {{search-url}}/knowledgebases/{{knowledge-base-name}}?api-version=2025-11-01-preview
Content-Type: application/json
api-key: {{search-api-key}}

次の JSON は、ナレッジ ベースに対する応答の例です。

{
  "name": "my-kb",
  "description": "A sample knowledge base.",
  "retrievalInstructions": null,
  "answerInstructions": null,
  "outputMode": null,
  "knowledgeSources": [
    {
      "name": "my-blob-ks"
    }
  ],
  "models": [],
  "encryptionKey": null,
  "retrievalReasoningEffort": {
    "kind": "low"
  }
}

ナレッジ ベースの作成

ナレッジ ベースによって、エージェント検索パイプラインが推進されます。 アプリケーション コードでは、他のエージェントまたはチャットボットがそれを呼び出します。

ナレッジ ベースは、ナレッジ ソース (検索可能なコンテンツ) を Azure OpenAI の LLM デプロイメントに接続します。 LLM のプロパティは接続を確立しますが、ナレッジ ソースのプロパティは、クエリの実行と応答を通知する既定値を確立します。

次のコードを実行してナレッジ ベースを作成します。

// Create a knowledge base
using Azure.Search.Documents.Indexes;
using Azure.Search.Documents.Indexes.Models;
using Azure.Search.Documents.KnowledgeBases.Models;
using Azure;

var indexClient = new SearchIndexClient(new Uri(searchEndpoint), new AzureKeyCredential(apiKey));

var aoaiParams = new AzureOpenAIVectorizerParameters
{
    ResourceUri = new Uri(aoaiEndpoint),
    DeploymentName = aoaiGptDeployment,
    ModelName = aoaiGptModel
};

var knowledgeBase = new KnowledgeBase(
    name: "my-kb",
    knowledgeSources: new KnowledgeSourceReference[] 
    { 
        new KnowledgeSourceReference("hotels-ks"),
        new KnowledgeSourceReference("earth-at-night-ks")
    }
)
{
    Description = "This knowledge base handles questions directed at two unrelated sample indexes.",
    RetrievalInstructions = "Use the hotels knowledge source for queries about where to stay, otherwise use the earth at night knowledge source.",
    AnswerInstructions = "Provide a two sentence concise and informative answer based on the retrieved documents.",
    OutputMode = KnowledgeRetrievalOutputMode.AnswerSynthesis,
    Models = { new KnowledgeBaseAzureOpenAIModel(azureOpenAIParameters: aoaiParams) },
    RetrievalReasoningEffort = new KnowledgeRetrievalLowReasoningEffort()
};

await indexClient.CreateOrUpdateKnowledgeBaseAsync(knowledgeBase);
Console.WriteLine($"Knowledge base '{knowledgeBase.Name}' created or updated successfully.");

次のコードを実行してナレッジ ベースを作成します。

# Create a knowledge base
from azure.core.credentials import AzureKeyCredential
from azure.search.documents.indexes import SearchIndexClient
from azure.search.documents.indexes.models import KnowledgeBase, KnowledgeBaseAzureOpenAIModel, KnowledgeSourceReference, AzureOpenAIVectorizerParameters, KnowledgeRetrievalOutputMode, KnowledgeRetrievalLowReasoningEffort

index_client = SearchIndexClient(endpoint = "search_url", credential = AzureKeyCredential("api_key"))

aoai_params = AzureOpenAIVectorizerParameters(
    resource_url = "aoai_endpoint",
    api_key="aoai_api_key",
    deployment_name = "aoai_gpt_deployment",
    model_name = "aoai_gpt_model",
)

knowledge_base = KnowledgeBase(
    name = "my-kb",
    description = "This knowledge base handles questions directed at two unrelated sample indexes.",
    retrieval_instructions = "Use the hotels knowledge source for queries about where to stay, otherwise use the earth at night knowledge source.",
    answer_instructions = "Provide a two sentence concise and informative answer based on the retrieved documents.",
    output_mode = KnowledgeRetrievalOutputMode.ANSWER_SYNTHESIS,
    knowledge_sources = [
        KnowledgeSourceReference(name = "hotels-ks"),
        KnowledgeSourceReference(name = "earth-at-night-ks"),
    ],
    models = [KnowledgeBaseAzureOpenAIModel(azure_open_ai_parameters = aoai_params)],
    encryption_key = None,
    retrieval_reasoning_effort = KnowledgeRetrievalLowReasoningEffort(),
)

index_client.create_or_update_knowledge_base(knowledge_base)
print(f"Knowledge base '{knowledge_base.name}' created or updated successfully.")

ナレッジ ベース - 作成または更新 (REST API) を使用してナレッジ ベースを作成します。

# Create a knowledge base
PUT {{search-url}}/knowledgebases/{{knowledge-base-name}}?api-version=2025-11-01-preview
Content-Type: application/json
api-key: {{search-api-key}}

{
    "name" : "my-kb",
    "description": "This knowledge base handles questions directed at two unrelated sample indexes.",
    "retrievalInstructions": "Use the hotels knowledge source for queries about where to stay, otherwise use the earth at night knowledge source.",
    "answerInstructions": null,
    "outputMode": "answerSynthesis",
    "knowledgeSources": [
        {
            "name": "hotels-ks"
        },
        {
            "name": "earth-at-night-ks"
        }
    ],
    "models" : [ 
        {
            "kind": "azureOpenAI",
            "azureOpenAIParameters": {
                "resourceUri": "{{model-provider-url}}",
                "apiKey": "{{model-api-key}}",
                "deploymentId": "gpt-4.1-mini",
                "modelName": "gpt-4.1-mini"
            }
        }
    ],
    "encryptionKey": null,
    "retrievalReasoningEffort": {
        "kind": "low"
    }
}

ナレッジ ベースのプロパティ

ナレッジ ベースを作成するには、次のプロパティを渡します。

名前 Description タイプ 必須
Name サポート技術情報の名前。 ナレッジ ベース コレクション内で一意である必要があり、Azure AI 検索 内のオブジェクトの命名ガイドラインに従う必要があります。 イエス
KnowledgeSources サポートされている 1 つ以上 のナレッジ ソース Array イエス
Description ナレッジ ベースの説明。 LLM では、この記述を使用してクエリ計画を通知します。 いいえ
RetrievalInstructions ナレッジ ソースがクエリのスコープ内に存在する必要があるかどうかを判断するための LLM のプロンプト。 複数のナレッジ ソースがある場合は、このプロンプトを含めます。 このフィールドは、ナレッジ ソースの選択とクエリの作成の両方に影響します。 たとえば、指示によって情報が追加されたり、ナレッジ ソースに優先順位が付けられたりする場合があります。 命令は LLM に直接渡されます。つまり、基本的なナレッジ ソースをバイパスする命令など、クエリ計画を中断する命令を提供できます。 いいえ
AnswerInstructions 合成された回答を整形するためのカスタム命令。 既定値は null です。 詳細については、「 引用に基づく応答に回答合成を使用する」を参照してください。 いいえ
OutputMode 有効な値は、0 が LLM で作成された回答を指し、1 が LLM にダウンストリーム ステップとして渡すことができる完全な検索結果を指します。 いいえ
Models 回答の作成やクエリの計画に使用するサポートされているLLMへの接続。 このプレビューでは、Models には 1 つのモデルのみを含めることができます。また、モデル プロバイダーは OpenAI Azureする必要があります。 Foundry ポータルまたはコマンド ライン要求からモデル情報を取得します。 KnowledgeBaseAzureOpenAIModel クラスを使用してパラメーターを指定します。 モデルへのAzure AI 検索接続には、API キーの代わりにロールベースのアクセス制御を使用できます。 Object いいえ
RetrievalReasoningEffort LLM 関連のクエリ処理のレベルを決定します。 有効な値は、 minimallow (既定値)、および mediumです。 詳細については、「取得理由の設定」を参照してください。 Object いいえ
名前 Description タイプ 必須
name サポート技術情報の名前。 ナレッジ ベース コレクション内では一意である必要があり、Azure AI 検索 内のオブジェクトのネーミング ガイドラインに従う必要があります。 イエス
description ナレッジ ベースの説明。 LLM では、この記述を使用してクエリ計画を通知します。 いいえ
retrieval_instructions ナレッジ ソースがクエリのスコープ内に存在する必要があるかどうかを判断するための LLM のプロンプト。 複数のナレッジ ソースがある場合は、このプロンプトを含めます。 このフィールドは、ナレッジ ソースの選択とクエリの作成の両方に影響します。 たとえば、指示によって情報が追加されたり、ナレッジ ソースに優先順位が付けられたりする場合があります。 LLM に命令を直接渡します。 重要なナレッジ ソースをバイパスする命令など、クエリの計画を中断する命令を提供できます。 いいえ
answer_instructions 合成された回答を整形するためのカスタム命令。 既定値は null です。 詳細については、「 引用に基づく応答に回答合成を使用する」を参照してください。 いいえ
output_mode 有効な値は、0 が LLM で作成された回答を指し、1 が LLM にダウンストリーム ステップとして渡すことができる完全な検索結果を指します。 いいえ
knowledge_sources サポートされている 1 つ以上 のナレッジ ソース Array イエス
models 回答の作成やクエリの計画に使用するサポートされているLLMへの接続。 このプレビューでは、models には 1 つのモデルのみを含めることができます。また、モデル プロバイダーは OpenAI Azureする必要があります。 Foundry ポータルまたはコマンド ライン要求からモデル情報を取得します。 モデルへのAzure AI 検索接続には、API キーの代わりにロールベースのアクセス制御を使用できます。 Object いいえ
encryption_key ナレッジ ベースと生成されたオブジェクトの両方の機密情報を暗号化するための カスタマー マネージド キー Object いいえ
retrieval_reasoning_effort LLM 関連のクエリ処理のレベルを決定します。 有効な値は、 minimallow (既定値)、および mediumです。 詳細については、「取得理由の設定」を参照してください。 Object いいえ
名前 Description タイプ 必須
name サポート技術情報の名前。 ナレッジ ベース コレクション内で一意である必要があり、Azure AI 検索 内のオブジェクトに対する命名ガイドラインに従う必要があります。 イエス
description ナレッジ ベースの説明。 LLM では、この記述を使用してクエリ計画を通知します。 いいえ
retrievalInstructions ナレッジ ソースがクエリのスコープ内に存在する必要があるかどうかを判断するための LLM のプロンプト。 複数のナレッジ ソースがある場合は、このプロンプトを含めます。 このフィールドは、ナレッジ ソースの選択とクエリの作成の両方に影響します。 たとえば、指示によって情報が追加されたり、ナレッジ ソースに優先順位が付けられたりする場合があります。 LLM に命令を直接渡します。つまり、基本的なナレッジ ソースをバイパスする命令など、クエリ計画を中断する命令を提供できます。 いいえ
answerInstructions 合成された回答を整形するためのカスタム命令。 既定値は null です。 詳細については、「 引用に基づく応答に回答合成を使用する」を参照してください。 いいえ
outputMode 有効な値は、0 が LLM で作成された回答を指し、1 が LLM にダウンストリーム ステップとして渡すことができる完全な検索結果を指します。 いいえ
knowledgeSources サポートされている 1 つ以上 のナレッジ ソース Array イエス
models 回答の作成やクエリの計画に使用するサポートされているLLMへの接続。 このプレビューでは、models には 1 つのモデルのみを含めることができます。また、モデル プロバイダーは OpenAI Azureする必要があります。 Foundry ポータルまたはコマンド ライン要求からモデル情報を取得します。 モデルへのAzure AI 検索接続には、API キーの代わりにロールベースのアクセス制御を使用できます。 Object いいえ
encryptionKey ナレッジ ベースと生成されたオブジェクトの両方の機密情報を暗号化するための カスタマー マネージド キー Object いいえ
retrievalReasoningEffort.kind LLM 関連のクエリ処理のレベルを決定します。 有効な値は、 minimallow (既定値)、および mediumです。 詳細については、「取得理由の設定」を参照してください。 Object いいえ

ナレッジ ベースにクエリを実行する

ナレッジ ベースを作成したら、 取得アクション を使用してクエリを実行し、LLM 接続を確認します。

ナレッジ ベースを削除する

ナレッジ ベースが不要になった場合、または検索サービスでナレッジ ベースを再構築する必要がなくなった場合は、次のコードを実行してオブジェクトを削除します。

using Azure.Search.Documents.Indexes;
var indexClient = new SearchIndexClient(new Uri(searchEndpoint), credential);

await indexClient.DeleteKnowledgeBaseAsync(knowledgeBaseName);
System.Console.WriteLine($"Knowledge base '{knowledgeBaseName}' deleted successfully.");
# Delete a knowledge base
from azure.core.credentials import AzureKeyCredential 
from azure.search.documents.indexes import SearchIndexClient

index_client = SearchIndexClient(endpoint = "search_url", credential = AzureKeyCredential("api_key"))
index_client.delete_knowledge_base("knowledge_base_name")
print(f"Knowledge base deleted successfully.")
# Delete a knowledge base
DELETE {{search-url}}/knowledgebases/{{knowledge-base-name}}?api-version=2025-11-01-preview
api-key: {{search-api-key}}