你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
注意
此智能检索功能在 2026-04-01 REST API 版本中通过编程接口普遍可用。 Azure门户和 Microsoft Foundry 门户继续提供对所有代理检索功能的仅限预览的访问权限。 有关迁移指南,请参阅 将代理检索代码迁移到最新版本。
如果选择使用预览版 REST API 版本,则可以访问尚未正式发布此功能的功能。 预览版功能在没有服务级别协议的情况下提供,不建议用于生产工作负荷。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款。
在 Azure AI 搜索 中,knowledge base 是一个顶级对象,用于协调 agentic 检索。 它定义要查询的知识源以及用于检索操作的默认行为。 在查询时, 检索方法 以知识库为目标,以运行配置的检索管道。
可以在 Microsoft Foundry (new) 门户中的 Foundry IQ 工作负荷中创建知识库。 在使用 Azure AI 搜索 API 创建的任何代理解决方案中,还需要一个知识库。
知识库指定:
- 指向可搜索内容的一个或多个知识源。
- 用于查询规划、答案合成或 Web 内容摘要的可选 LLM。 支持的任务因 API 版本和知识源类型而异。
- 控制路由、源选择和对象加密的自定义属性。
使用支持
| Azure 门户 | Microsoft Foundry 门户 | .NET SDK | Python SDK | Java SDK | JavaScript SDK | REST API |
|---|---|---|---|---|---|---|
| ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
先决条件
在提供代理检索的任何区域,使用 Azure AI 搜索。 如果使用托管标识对已部署的模型进行基于角色的访问,则搜索服务必须位于基本定价层或更高层。
一个或多个 知识来源。 如果计划使用 2026-04-01 API 版本创建知识库,则知识库必须正式发布。 否则,可以使用预览知识源类型。
(条件)部署了支持的 LLM 的 Azure OpenAI。 对于 2025-11-01-preview 和 2026-04-01 API 版本,如果知识库包含 Web 知识库,则需要 LLM。 对于仅 2025-11-01 预览版而言,LLM 对于所有其他类型的知识源都是可选项。 2026-04-01 不支持非 Web 知识源的 LLM。
在Azure AI 搜索上创建和使用对象的权限。 建议 使用基于角色的访问。 搜索服务参与者 可以创建和管理知识库。 搜索索引数据读取器 可以运行查询。 或者,如果角色分配不可行,则可以使用 API 密钥 。 有关详细信息,请参阅 “连接到搜索服务”。
-
对于 2025-11-01-preview 功能,最新的预览包:
dotnet add package Azure.Search.Documents --prerelease关于2026-04-01的功能,最新的稳定包是:
dotnet add package Azure.Search.Documents
所需的 azure-search-documents 包:
对于 2025-11-01-preview 功能,最新的预览包:
pip install azure-search-documents --pre关于2026-04-01的功能,最新的稳定包是:
pip install azure-search-documents
所需的 REST API 版本:
对于预览功能:搜索服务 2025-11-01-preview
一般可用的功能: 搜索服务 2026-04-01
支持的模型
在 Foundry 模型中使用 Azure OpenAI 中的以下 LLM 之一。 有关部署说明,请参阅 Foundry 门户中的 Deploy Microsoft Foundry 模型。
gpt-4ogpt-4o-minigpt-4.1gpt-4.1-minigpt-4.1-nanogpt-5gpt-5-minigpt-5-nanogpt-5.1gpt-5.2gpt-5.4gpt-5.4-minigpt-5.4-nano
配置访问权限
Azure AI 搜索 需要从 Foundry 模型中的 Azure OpenAI 访问 LLM。 我们建议使用 Microsoft Entra ID 进行身份验证,并使用基于角色的访问控制进行授权。 若要分配角色,你必须是 所有者或用户访问管理员。 如果无法使用角色,请改用基于密钥的身份验证。
在模型提供程序上,将认知服务用户分配给搜索服务的托管标识。 如果要在本地进行测试,请将相同的角色分配给用户帐户。
对于本地测试,请按照快速入门中的步骤操作 :在没有密钥的情况下连接 以登录到特定订阅和租户。 在每个请求中应使用
DefaultAzureCredential而不是AzureKeyCredential,应类似于以下示例:// Authenticate using roles using Azure.Search.Documents.Indexes; using Azure.Identity; var indexClient = new SearchIndexClient(new Uri(searchEndpoint), new DefaultAzureCredential());
在模型提供程序上,将认知服务用户分配给搜索服务的托管标识。 如果要在本地进行测试,请将相同的角色分配给用户帐户。
对于本地测试,请按照快速入门中的步骤操作 :在没有密钥的情况下连接 以登录到特定订阅和租户。 在每个请求中应使用
DefaultAzureCredential而不是AzureKeyCredential,应类似于以下示例:# Authenticate using roles from azure.identity import DefaultAzureCredential index_client = SearchIndexClient(endpoint = "search_url", credential = DefaultAzureCredential())
在模型提供程序上,将认知服务用户分配给搜索服务的托管标识。 如果要在本地进行测试,请将相同的角色分配给用户帐户。
对于本地测试,请按照快速入门中的步骤操作 :在没有密钥的情况下连接 以获取特定订阅和租户的个人访问令牌。 在每个请求中指定访问令牌,该令牌应类似于以下示例:
# List indexes using roles GET https://{{search-url}}/indexes?api-version=2026-04-01 Content-Type: application/json Authorization: Bearer {{access-token}}
重要
本文中的代码片段使用 API 密钥。 如果使用基于角色的身份验证,请相应地更新每个请求。 在指定这两种方法的请求中,API 密钥优先。
检查现有知识库
知识库是顶级可重用对象。 了解现有知识库有助于重复使用或命名新对象。
运行以下代码,按名称列出现有知识库。 该列表包括你的搜索服务上的所有知识库,而不考虑用于创建它们的 API 版本。
// 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}");
}
Reference:SearchIndexClient
# 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}")
Reference:SearchIndexClient
# List knowledge bases
GET {{search-url}}/knowledgebases?api-version={{api-version}}&$select=name
Content-Type: application/json
api-key: {{search-api-key}}
参考:知识库 - 列表
还可以按名称返回单个知识库来查看其 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);
Reference:SearchIndexClient
# 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))
Reference:SearchIndexClient
# Get knowledge base
GET {{search-url}}/knowledgebases/{{knowledge-base-name}}?api-version={{api-version}}
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"
}
}
注意
响应架构反映用于创建知识库的 API 版本。 使用正式版 2026-04-01 API 版本创建的知识库返回比 2025-11-01-preview 更窄的定义。 有关每个版本支持哪些属性的详细信息,请参阅下一部分。
创建知识库
在 Foundry 模型中,知识库将一个或多个知识源(可搜索内容)与 Azure OpenAI 的可选 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.");
Reference:SearchIndexClient、 KnowledgeBase
# 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.")
Reference:SearchIndexClient、 KnowledgeBase
# 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"
}
}
参考:知识库 - 创建或更新
重要
2026-04-01 API 版本仅接受正式发布的知识源类型,并支持最少的提取检索。 不支持仅预览功能,例如查询规划、答案合成和可配置推理工作。 要获得完整功能,请使用 2025-11-01-preview。
知识库属性
传递以下属性以创建知识库。
| 名字 | 描述 | 类型 | 必填 |
|---|---|---|---|
Name |
知识库的名称。 它必须在知识库集合中是唯一的,并遵循 Azure AI 搜索 中对象的命名准则。 | 字符串 | 是的 |
KnowledgeSources |
一个或多个 受支持的知识源。 | 阵 列 | 是的 |
Description |
知识库的说明。 LLM 使用描述来指导查询规划。 | 字符串 | 不 |
RetrievalInstructions |
用于让 LLM 确定某个知识源是否属于查询范围的提示词。 如果有多个知识源,请包含此提示。 此字段影响知识源选择和查询表述。 例如,说明可以追加信息或确定知识源的优先级。 指令直接传递到 LLM,这意味着可以提供破坏查询规划的指令,例如导致绕过关键知识源的指令。 | 字符串 | 不 |
AnswerInstructions |
用于调整合成答案的自定义说明。 默认值为 null。 有关详细信息,请参阅对引文支持的答复使用答案合成。 | 字符串 | 不 |
OutputMode |
有效值为 AnswerSynthesis,它用于 LLM 生成的答案;若希望获取完整搜索结果并将其作为下游步骤传递给 LLM,则有效值为 ExtractedData。 |
字符串 | 不 |
Models |
需要网络知识来源。 对于其他知识源类型,可选。 为查询规划或答案合成指定一个受支持的 LLM。 从 Microsoft Foundry 门户或命令行请求获取连接详细信息,然后使用 KnowledgeBaseAzureOpenAIModel 类提供它们。 可以使用基于角色的访问控制,作为通过 Azure AI 搜索 连接到模型的替代方案,而不是使用 API 密钥。 | 阵 列 | 不 |
RetrievalReasoningEffort |
确定与 LLM 相关的查询处理级别。 有效值为 minimal、 low (默认值)和 medium。 有关详细信息,请参阅 设置检索推理工作。 |
对象 | 不 |
| 名字 | 描述 | 类型 | 必填 |
|---|---|---|---|
name |
知识库的名称。 它必须在知识库集合中是唯一的,并遵循 Azure AI 搜索 中对象的命名准则。 | 字符串 | 是的 |
description |
知识库的说明。 LLM 使用描述来指导查询规划。 | 字符串 | 不 |
retrieval_instructions |
用于让 LLM 确定某个知识源是否属于查询范围的提示词。 如果有多个知识源,请包含此提示。 此字段影响知识源选择和查询表述。 例如,说明可以追加信息或确定知识源的优先级。 将说明直接传递给 LLM。 可以提供中断查询规划的说明,例如导致绕过基本知识源的说明。 | 字符串 | 不 |
answer_instructions |
用于调整合成答案的自定义说明。 默认值为 null。 有关详细信息,请参阅对引文支持的答复使用答案合成。 | 字符串 | 不 |
output_mode |
有效值为 answer_synthesis,它用于 LLM 生成的答案;若希望获取完整搜索结果并将其作为下游步骤传递给 LLM,则有效值为 extracted_data。 |
字符串 | 不 |
knowledge_sources |
一个或多个 受支持的知识源。 | 阵 列 | 是的 |
models |
需要网络知识来源。 对于其他知识源类型,可选。 为查询规划或答案合成指定一个受支持的 LLM。 从 Microsoft Foundry 门户或命令行请求获取连接详细信息。 可以使用基于角色的访问控制,作为通过 Azure AI 搜索 连接到模型的替代方案,而不是使用 API 密钥。 | 阵 列 | 不 |
encryption_key |
客户 管理的密钥 ,用于加密知识库和生成的对象中的敏感信息。 | 对象 | 不 |
retrieval_reasoning_effort |
确定与 LLM 相关的查询处理级别。 有效值为 minimal、 low (默认值)和 medium。 有关详细信息,请参阅 设置检索推理工作。 |
对象 | 不 |
| 名字 | 描述 | 类型 | 必填 |
|---|---|---|---|
name |
知识库的名称。 它必须在知识库集合中是唯一的,并遵循 Azure AI 搜索 中对象的命名准则。 | 字符串 | 是的 |
description |
知识库的说明。 LLM 使用描述来指导查询规划。 | 字符串 | 不 |
retrievalInstructions |
用于让 LLM 确定某个知识源是否属于查询范围的提示词。 如果有多个知识源,请包含此提示。 此字段影响知识源选择和查询表述。 例如,说明可以追加信息或确定知识源的优先级。 将指令直接传递给 LLM,这意味着可以提供可能破坏查询规划的指令,例如那些会导致绕过重要知识源的指令。 | 字符串 | 不 |
answerInstructions |
用于调整合成答案的自定义说明。 默认值为 null。 有关详细信息,请参阅对引文支持的答复使用答案合成。 | 字符串 | 不 |
outputMode |
有效值为 answerSynthesis,它用于 LLM 生成的答案;若希望获取完整搜索结果并将其作为下游步骤传递给 LLM,则有效值为 extractedData。 |
字符串 | 不 |
knowledgeSources |
一个或多个 受支持的知识源。 | 阵 列 | 是的 |
models |
需要网络知识来源。 对于其他知识源类型,可选。 为查询规划或答案合成指定一个受支持的 LLM。 从 Microsoft Foundry 门户或命令行请求获取连接详细信息。 可以使用基于角色的访问控制,作为通过 Azure AI 搜索 连接到模型的替代方案,而不是使用 API 密钥。 | 阵 列 | 不 |
encryptionKey |
客户 管理的密钥 ,用于加密知识库和生成的对象中的敏感信息。 | 对象 | 不 |
retrievalReasoningEffort.kind |
确定与 LLM 相关的查询处理级别。 有效值为 minimal、 low (默认值)和 medium。 有关详细信息,请参阅 设置检索推理工作。 |
对象 | 不 |
查询知识库
创建知识库后,使用 检索操作 对其进行查询并验证 LLM 连接。
删除知识库
如果不再需要知识库或需要在搜索服务上重新生成该知识库,请运行以下代码以删除该对象。
// Delete a knowledge base
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.");
Reference:SearchIndexClient
# 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.")
Reference:SearchIndexClient
# Delete a knowledge base
DELETE {{search-url}}/knowledgebases/{{knowledge-base-name}}?api-version={{api-version}}
api-key: {{search-api-key}}
参考:知识库 - 删除