你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
注意
Azure AI 搜索可通过Azure门户、REST API 和Azure SDK获取。 它也是 Foundry IQ 的基础;Foundry IQ 是一个托管式知识层,可将企业内容转化为供 Microsoft Foundry 门户中的智能体使用的、可复用且具备权限感知能力的知识库。
重要
标记为“预览”的特性、功能或属性不受服务级别协议 (SLA) 保障,不建议用于生产工作负载,并且在正式发布之前可能会更改或受到限制。 Azure AI 搜索预览条款适用于所有预览功能,无论是独立功能还是正式版功能的一部分。
在 Azure AI 搜索 中,knowledge base 是一个顶级对象,用于协调 agentic 检索。 它定义要查询的知识源以及用于检索操作的默认行为。 在查询时, 检索方法 以知识库为目标,以运行配置的检索管道。
知识库指定:
指向可搜索内容的一个或多个知识源。
用于查询规划、答案合成或 Web 内容摘要的可选 LLM。 支持的任务因 API 版本和知识源类型而异。
控制路由、源选择和对象加密的自定义属性。
使用支持
| Azure 门户 | Microsoft Foundry 门户 | .NET SDK | Python SDK | Java SDK | JavaScript SDK | REST API |
|---|---|---|---|---|---|---|
| ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
先决条件
在提供代理检索的任何区域,使用 Azure AI 搜索。 如果你使用 托管标识 对已部署的模型进行基于角色的访问,则搜索服务必须属于基本层级或更高层级。
一个或多个 知识来源。 使用
2026-08-01-previewAPI 版本来访问预览版知识源,或将 LLM 与非 Web 知识源配合使用。 将2026-04-01API 版本用于正式发布的知识源和最少的提取检索。(条件)部署了支持的 LLM 的 Azure OpenAI。 如果知识库包含 Web 知识库,则需要 LLM。 对于其他知识源,在
2026-08-01-previewAPI 版本中,LLM 是可选的;在2026-04-01API 版本中,则不支持 LLM。创建知识库的权限。 使用分配给用户帐户的搜索服务参与者角色(建议)或使用管理员 API 密钥配置无密钥身份验证。
如果知识库指定了 LLM,则搜索服务必须在 Microsoft Foundry 资源上具有 管理的身份,并具有 Cognitive Services User 权限。
所需
Azure.Search.Documents软件包:对于
2026-08-01-preview功能,最新的预览包:dotnet add package Azure.Search.Documents --prerelease对于
2026-04-01功能,最新稳定版软件包:dotnet add package Azure.Search.Documents
对于无密钥身份验证,请使用
Azure.Identity软件包:dotnet add package Azure.Identity
所需
azure-search-documents软件包:对于
2026-08-01-preview功能,最新的预览包:pip install --pre azure-search-documents对于
2026-04-01功能,最新稳定版软件包:pip install azure-search-documents
对于无密钥身份验证,请使用
azure-identity软件包:pip install azure-identity
所需的搜索服务 REST API 版本:
对于预览功能: 2026-08-01-preview
对于正式发布的功能:2026-04-01
对于无密钥身份验证,请在每个 HTTP 请求的标头中包含
AuthorizationMicrosoft Entra ID令牌。
支持的模型
在 Foundry 模型中使用 Azure OpenAI 中的以下 LLM 之一。 Azure OpenAI 确定所选部署的区域可用性。 有关部署说明,请参阅 Foundry 门户中的 Deploy Microsoft Foundry 模型。
GPT-4 系列已弃用。 有关模型生命周期指南、停用日期和当前状态,请参阅模型停用和弃用和模型停用计划 - Microsoft Foundry。
| 型号 | 支持的 API 版本 |
|---|---|
gpt-4o(已弃用) |
2025-11-01-preview、2026-05-01-preview、2026-08-01-preview |
gpt-4o-mini(已弃用) |
2025-11-01-preview、2026-05-01-preview、2026-08-01-preview |
gpt-4.1(已弃用) |
2025-11-01-preview、2026-05-01-preview、2026-08-01-preview |
gpt-4.1-mini(已弃用) |
2025-11-01-preview、2026-05-01-preview、2026-08-01-preview |
gpt-4.1-nano(已弃用) |
2025-11-01-preview、2026-05-01-preview、2026-08-01-preview |
gpt-5 |
2025-11-01-preview、2026-05-01-preview、2026-08-01-preview |
gpt-5-mini |
2025-11-01-preview、2026-05-01-preview、2026-08-01-preview |
gpt-5-nano |
2025-11-01-preview、2026-05-01-preview、2026-08-01-preview |
gpt-5.1 |
2026-05-01-preview, 2026-08-01-preview |
gpt-5.2 |
2026-05-01-preview, 2026-08-01-preview |
gpt-5.4 |
2026-05-01-preview, 2026-08-01-preview |
gpt-5.4-mini |
2026-05-01-preview, 2026-08-01-preview |
gpt-5.4-nano |
2026-05-01-preview, 2026-08-01-preview |
gpt-5.5 |
2026-08-01-preview |
gpt-5.6-sol |
2026-08-01-preview |
gpt-5.6-terra |
2026-08-01-preview |
gpt-5.6-luna |
2026-08-01-preview |
配置访问权限
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-endpoint>", credential = DefaultAzureCredential())
在模型提供程序上,将认知服务用户分配给搜索服务的托管标识。 如果要在本地进行测试,请将相同的角色分配给用户帐户。
对于本地测试,请按照快速入门中的步骤操作 :在没有密钥的情况下连接 以获取特定订阅和租户的个人访问令牌。 在每个请求中指定访问令牌,该令牌应类似于以下示例。
# List indexes using roles GET {{search-endpoint}}/indexes?api-version=2026-04-01 Content-Type: application/json Authorization: Bearer {{search-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.identity import DefaultAzureCredential
from azure.search.documents.indexes import SearchIndexClient
index_client = SearchIndexClient(endpoint = "<search-endpoint>", credential = DefaultAzureCredential())
for kb in index_client.list_knowledge_bases():
print(f" - {kb.name}")
Reference:SearchIndexClient
# List knowledge bases
GET {{search-endpoint}}/knowledgebases?api-version={{api-version}}&$select=name
Content-Type: application/json
Authorization: Bearer {{search-access-token}}
参考:知识库 - 列表
还可以按名称返回单个知识库来查看其 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.identity import DefaultAzureCredential
from azure.search.documents.indexes import SearchIndexClient
import json
index_client = SearchIndexClient(endpoint = "<search-endpoint>", credential = DefaultAzureCredential())
kb = index_client.get_knowledge_base("<knowledge-base-name>")
print(json.dumps(kb.as_dict(), indent = 2))
Reference:SearchIndexClient
# Get knowledge base
GET {{search-endpoint}}/knowledgebases/{{knowledge-base-name}}?api-version={{api-version}}
Content-Type: application/json
Authorization: Bearer {{search-access-token}}
参考:知识库 - 获取
以下 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 版本创建的知识库返回的定义范围比 2026-08-01-preview 更窄。 有关每个版本支持的属性的详细信息,请参阅 创建知识库。
创建知识库
重要
2026-04-01 API 版本仅接受正式发布的知识源类型,并支持最少的提取检索。 它不支持仅预览功能,例如查询规划、答案合成和可配置推理工作。 如需使用完整功能,请使用 2026-08-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.Identity;
var indexClient = new SearchIndexClient(new Uri(searchEndpoint), new DefaultAzureCredential());
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 = "Answer in two concise sentences.",
OutputMode = KnowledgeRetrievalOutputMode.AnswerSynthesis,
Models = { new KnowledgeBaseAzureOpenAIModel(azureOpenAIParameters: aoaiParams) },
RetrievalReasoningEffort = new KnowledgeRetrievalAutoReasoningEffort()
};
await indexClient.CreateOrUpdateKnowledgeBaseAsync(knowledgeBase);
Console.WriteLine($"Knowledge base '{knowledgeBase.Name}' created or updated successfully.");
Reference:SearchIndexClient、 KnowledgeBase
# Create a knowledge base
from azure.identity import DefaultAzureCredential
from azure.search.documents.indexes import SearchIndexClient
from azure.search.documents.indexes.models import (
AzureOpenAIVectorizerParameters,
KnowledgeBase,
KnowledgeBaseAzureOpenAIModel,
KnowledgeSourceReference,
)
from azure.search.documents.knowledgebases.models import (
KnowledgeRetrievalAutoReasoningEffort,
KnowledgeRetrievalOutputMode,
)
index_client = SearchIndexClient(endpoint = "<search-endpoint>", credential = DefaultAzureCredential())
aoai_params = AzureOpenAIVectorizerParameters(
resource_url = "<aoai-endpoint>",
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 = "Answer in two concise sentences.",
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 = KnowledgeRetrievalAutoReasoningEffort(),
)
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-endpoint}}/knowledgebases/my-kb?api-version=2026-08-01-preview
Content-Type: application/json
Authorization: Bearer {{search-access-token}}
{
"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": "Answer in two concise sentences.",
"outputMode": "answerSynthesis",
"knowledgeSources": [
{
"name": "hotels-ks"
},
{
"name": "earth-at-night-ks"
}
],
"models" : [
{
"kind": "azureOpenAI",
"azureOpenAIParameters": {
"resourceUri": "{{aoai-endpoint}}",
"deploymentId": "gpt-5.4-mini",
"modelName": "gpt-5.4-mini"
}
}
],
"encryptionKey": null,
"retrievalReasoningEffort": {
"kind": "auto"
}
}
参考:知识库 - 创建或更新
配置默认检索限制(预览版)
从 2026-08-01-preview API 版本开始,可以使用可选 retrieveDefaults 对象在知识库上存储请求范围的默认值。 仅当检索请求省略相应的请求字段时,每个存储的属性才适用:
| 存储属性 | 检索请求字段 |
|---|---|
maxRuntimeInSeconds |
maxRuntimeInSeconds |
maxOutputDocuments |
maxOutputDocuments |
maxOutputSizeInTokens |
maxOutputSize |
存储并重写输出令牌预算时使用不同的属性名称。 在maxOutputSizeInTokens中设置retrieveDefaults,并在检索请求中使用maxOutputSize。
每个属性的有效值按以下顺序独立确定:
- 检索请求中的对应值。
- 知识库
retrieveDefaults对象中的值。 - 如果该属性在这两个级别中都不存在,则使用服务默认值。
以下示例使用名为 your-knowledge-source 的现有搜索索引知识源。 它存储 45 秒的运行时预算、最多 8 个输出文档和 12,000 个令牌输出预算。
using System;
using Azure.Identity;
using Azure.Search.Documents;
using Azure.Search.Documents.Indexes;
using Azure.Search.Documents.Indexes.Models;
using Azure.Search.Documents.Models;
string searchEndpoint = "<search-endpoint>";
var options = new SearchClientOptions(
SearchClientOptions.ServiceVersion.V2026_08_01_Preview);
var indexClient = new SearchIndexClient(
new Uri(searchEndpoint),
new DefaultAzureCredential(),
options);
var knowledgeBase = new KnowledgeBase(
"your-knowledge-base",
new[] { new KnowledgeSourceReference("your-knowledge-source") })
{
Description = "A knowledge base for product support content.",
RetrieveDefaults = new KnowledgeBaseRetrieveDefaults
{
MaxRuntimeInSeconds = 45,
MaxOutputDocuments = 8,
MaxOutputSizeInTokens = 12000
}
};
await indexClient.CreateOrUpdateKnowledgeBaseAsync(knowledgeBase);
Reference:SearchIndexClient、 SearchClientOptions.ServiceVersion、 KnowledgeBase
from azure.identity import DefaultAzureCredential
from azure.search.documents.indexes import SearchIndexClient
from azure.search.documents.indexes.models import (
KnowledgeBase,
KnowledgeBaseRetrieveDefaults,
KnowledgeSourceReference,
)
search_endpoint = "<search-endpoint>"
index_client = SearchIndexClient(
endpoint=search_endpoint,
credential=DefaultAzureCredential(),
api_version="2026-08-01-preview",
)
knowledge_base = KnowledgeBase(
name="your-knowledge-base",
description="A knowledge base for product support content.",
knowledge_sources=[
KnowledgeSourceReference(name="your-knowledge-source"),
],
retrieve_defaults=KnowledgeBaseRetrieveDefaults(
max_runtime_in_seconds=45,
max_output_documents=8,
max_output_size_in_tokens=12000,
),
)
index_client.create_or_update_knowledge_base(knowledge_base)
Reference:SearchIndexClient、 KnowledgeBase
PUT {{search-endpoint}}/knowledgebases/your-knowledge-base?api-version=2026-08-01-preview
Content-Type: application/json
Authorization: Bearer {{search-access-token}}
{
"name": "your-knowledge-base",
"description": "A knowledge base for product support content.",
"knowledgeSources": [
{
"name": "your-knowledge-source"
}
],
"retrieveDefaults": {
"maxRuntimeInSeconds": 45,
"maxOutputDocuments": 8,
"maxOutputSizeInTokens": 12000
}
}
参考:知识库 - 创建或更新
若要用 20 秒、1 个文档和 5,000 个令牌替代这些存储的值,请参阅 验证知识库检索默认值。
为基于浏览器的检索调用配置 CORS (预览版)
重要
跨域资源共享(CORS)允许基于浏览器的应用程序直接从服务请求数据。 根据 CORS 配置,外部网页可以使用用户的浏览器上下文访问或调用服务及其数据。 此访问权限可能会造成安全威胁。 启用 CORS 有你自己的风险。
从 2026-05-01-preview API 版本开始,知识库可为基于浏览器的应用程序定义 corsOptions,这些应用程序可直接通过 JavaScript 调用 retrieve 操作。 CORS 策略标识哪些浏览器源可以向知识库发送检索请求。
省略 corsOptions时,知识库没有 CORS 策略,浏览器会阻止跨源检索请求。
以下示例创建一个知识库,该知识库允许从一个浏览器源检索请求。
using Azure.Identity;
using Azure.Search.Documents.Indexes;
using Azure.Search.Documents.Indexes.Models;
var indexClient = new SearchIndexClient(new Uri(searchEndpoint), new DefaultAzureCredential());
var knowledgeBase = new KnowledgeBase(
name: "browser-chat-kb",
knowledgeSources: new[] { new KnowledgeSourceReference("product-docs-ks") }
)
{
Description = "A knowledge base that allows one browser app origin.",
CorsOptions = new CorsOptions(new[] { "https://myapp.example.com" })
{
MaxAgeInSeconds = 300
}
};
await indexClient.CreateOrUpdateKnowledgeBaseAsync(knowledgeBase);
from azure.identity import DefaultAzureCredential
from azure.search.documents.indexes import SearchIndexClient
from azure.search.documents.indexes.models import (
CorsOptions,
KnowledgeBase,
KnowledgeSourceReference,
)
index_client = SearchIndexClient(endpoint="<search-endpoint>", credential=DefaultAzureCredential())
knowledge_base = KnowledgeBase(
name="browser-chat-kb",
description="A knowledge base that allows one browser app origin.",
knowledge_sources=[KnowledgeSourceReference(name="product-docs-ks")],
cors_options=CorsOptions(
allowed_origins=["https://myapp.example.com"],
max_age_in_seconds=300,
),
)
index_client.create_or_update_knowledge_base(knowledge_base)
PUT {{search-endpoint}}/knowledgebases/browser-chat-kb?api-version=2026-08-01-preview
Content-Type: application/json
Authorization: Bearer {{search-access-token}}
{
"name": "browser-chat-kb",
"description": "A knowledge base that allows one browser app origin.",
"knowledgeSources": [
{
"name": "product-docs-ks"
}
],
"corsOptions": {
"allowedOrigins": [
"https://myapp.example.com"
],
"maxAgeInSeconds": 300
}
}
查询知识库
创建知识库后,调用 检索操作或 MCP 终结点 对其进行查询。
删除知识库
如果不再需要知识库或需要在搜索服务上重新生成该知识库,请运行以下代码以删除该对象。
// 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.identity import DefaultAzureCredential
from azure.search.documents.indexes import SearchIndexClient
index_client = SearchIndexClient(endpoint = "<search-endpoint>", credential = DefaultAzureCredential())
index_client.delete_knowledge_base("<knowledge-base-name>")
print(f"Knowledge base deleted successfully.")
Reference:SearchIndexClient
# Delete a knowledge base
DELETE {{search-endpoint}}/knowledgebases/{{knowledge-base-name}}?api-version={{api-version}}
Authorization: Bearer {{search-access-token}}
参考:知识库 - 删除