Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
注释
此功能目前处于公开预览状态。 此预览版未随附服务级别协议,建议不要用于生产工作负载。 某些功能可能不受支持或者受限。 有关详细信息,请参阅适用于 Azure 预览版的补充使用条款。
在 Azure AI 搜索中, 知识库 是协调 代理检索的顶级对象。 它定义要查询的知识源以及用于检索作的默认行为。 在查询时, 检索方法 以知识库为目标,以运行配置的检索管道。
知识库指定:
- 指向可搜索内容的一个或多个知识源。
- 一个可选的 LLM,它提供查询规划和答案表述的推理功能。
- 用于确定是否调用 LLM 并管理成本、延迟和质量的检索推理工作。
- 控制路由、源选择、输出格式和对象加密的自定义属性。
创建知识库后,可以随时更新其属性。 如果知识库正在使用中,更新将对下一次检索生效。
重要
2025-11-01-preview 将 2025-08-01-preview“知识代理”重命名为“知识库”。这是一项重大更改。
使用支持
| Azure 门户 | .NET SDK | Python SDK | Java SDK | JavaScript SDK | REST API |
|---|---|---|---|---|---|
| ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
- 最新的
Azure.Search.Documents预览版软件包:dotnet add package Azure.Search.Documents --prerelease
- 最新的
azure-search-documents预览版软件包:pip install --pre azure-search-documents
- 搜索服务 REST API 的 2025-11-01 预览版。
配置访问权限
Azure AI 搜索需要从 Azure AI 服务访问 LLM。 我们建议使用 Microsoft Entra ID 进行身份验证,并使用基于角色的访问控制进行授权。 若要分配角色,你必须是 所有者或用户访问管理员。 如果无法使用角色,请改用基于密钥的身份验证。
在模型提供程序上,将 认知服务用户 分配到搜索服务的托管标识。 如果要在本地进行测试,请将相同的角色分配给用户帐户。
对于本地测试,请按照快速入门:在没有密钥的情况下连接中的步骤登录到特定订阅和租户。 应在每个请求中使用
DefaultAzureCredential而不是AzureKeyCredential,其格式应类似于以下示例:
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=2025-11-01-preview
Content-Type: application/json
Authorization: Bearer {{access-token}}
```
重要
本文中的代码片段使用 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}}
还可以按名称返回单个知识库来查看其 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 AI 服务的 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 AzureAIservicesVectorizerParameters
{
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 KnowledgeBaseAzureAIservicesModel(AzureAIservicesParameters: 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, KnowledgeBaseAzureAIservicesModel, KnowledgeSourceReference, AzureAIservicesVectorizerParameters, KnowledgeRetrievalOutputMode, KnowledgeRetrievalLowReasoningEffort
index_client = SearchIndexClient(endpoint = "search_url", credential = AzureKeyCredential("api_key"))
aoai_params = AzureAIservicesVectorizerParameters(
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 = [KnowledgeBaseAzureAIservicesModel(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": "AzureAIservices",
"AzureAIservicesParameters": {
"resourceUri": "{{model-provider-url}}",
"apiKey": "{{model-api-key}}",
"deploymentId": "gpt-4.1-mini",
"modelName": "gpt-4.1-mini"
}
}
],
"encryptionKey": null,
"retrievalReasoningEffort": {
"kind": "low"
}
}
知识库属性
传递以下属性以创建知识库。
| Name | Description | 类型 | 必选 |
|---|---|---|---|
Name |
知识库的名称。 它在知识库集合中必须是唯一的,并遵循 Azure AI 搜索中对象的 命名准则 。 | String | 是的 |
KnowledgeSources |
一个或多个 受支持的知识源。 | Array | 是的 |
Description |
知识库的说明。 LLM 使用该说明来指导查询规划。 | String | 否 |
RetrievalInstructions |
提示 LLM 确定某个知识源是否应在查询范围内。 如果有多个知识源,请包含此提示。 此字段同时影响知识来源选择和查询表述。 例如,说明可以追加信息或确定知识来源的优先级。 指令直接传递到 LLM,这意味着可以提供破坏查询规划的说明,例如导致绕过关键知识源的说明。 | String | 否 |
AnswerInstructions |
自定义指令以定制合成答案。 默认值为 NULL。 有关详细信息,请参阅 如何使用答案合成生成有引文支持的响应。 | String | 否 |
OutputMode |
有效值是 AnswerSynthesis(用于 LLM 制定的答案)或 ExtractedData(用于完整的搜索结果),你可以将其作为下游步骤传递给 LLM。 |
String | 否 |
Models |
用于答案制定或查询规划的受支持的 LLM 连接。 在此预览版中, Models 只能包含一个模型,模型提供程序必须是 Azure AI 服务。 从门户或命令行请求获取模型信息。 使用 KnowledgeBaseAzureAIservicesModel 类提供参数。 可以使用基于角色的访问控制,而不是将 API 密钥用于与模型建立的 Azure AI 搜索连接。 |
物体 | 否 |
RetrievalReasoningEffort |
确定与 LLM 相关的查询处理级别。 有效值为 minimal、 low (默认值)和 medium。 有关详细信息,请参阅 设置检索推理工作。 |
物体 | 否 |
| Name | Description | 类型 | 必选 |
|---|---|---|---|
name |
知识库的名称。 它在知识库集合中必须是唯一的,并遵循 Azure AI 搜索中对象的 命名准则 。 | String | 是的 |
description |
知识库的说明。 LLM 使用该说明来指导查询规划。 | String | 否 |
retrieval_instructions |
提示 LLM 确定某个知识源是否应在查询范围内。 如果有多个知识源,请包含此提示。 此字段同时影响知识来源选择和查询表述。 例如,说明可以追加信息或确定知识来源的优先级。 将指令直接传递给 LLM。 可以提供中断查询规划的说明,例如导致绕过基本知识源的说明。 | String | 否 |
answer_instructions |
自定义指令以定制合成答案。 默认值为 NULL。 有关详细信息,请参阅 如何使用答案合成生成有引文支持的响应。 | String | 否 |
output_mode |
有效值是 answer_synthesis(用于 LLM 制定的答案)或 extracted_data(用于完整的搜索结果),你可以将其作为下游步骤传递给 LLM。 |
String | 否 |
knowledge_sources |
一个或多个 受支持的知识源。 | Array | 是的 |
models |
用于答案制定或查询规划的受支持的 LLM 连接。 在此预览版中, models 只能包含一个模型,模型提供程序必须是 Azure AI 服务。 从门户或命令行请求获取模型信息。 可以使用基于角色的访问控制,而不是将 API 密钥用于与模型建立的 Azure AI 搜索连接。 |
物体 | 否 |
encryption_key |
客户 管理的密钥 ,用于加密知识库和生成的对象中的敏感信息。 | 物体 | 否 |
retrieval_reasoning_effort |
确定与 LLM 相关的查询处理级别。 有效值为 minimal、 low (默认值)和 medium。 有关详细信息,请参阅 设置检索推理工作。 |
物体 | 否 |
| Name | Description | 类型 | 必选 |
|---|---|---|---|
name |
知识库的名称。 它在知识库集合中必须是唯一的,并遵循 Azure AI 搜索中对象的 命名准则 。 | String | 是的 |
description |
知识库的说明。 LLM 使用该说明来指导查询规划。 | String | 否 |
retrievalInstructions |
提示 LLM 确定某个知识源是否应在查询范围内。 如果有多个知识源,请包含此提示。 此字段同时影响知识来源选择和查询表述。 例如,说明可以追加信息或确定知识来源的优先级。 将指令直接传递给 LLM,这意味着可以提供破坏查询计划的指令,例如会导致绕过关键知识源的指令。 | String | 否 |
answerInstructions |
自定义指令以定制合成答案。 默认值为 NULL。 有关详细信息,请参阅 如何使用答案合成生成有引文支持的响应。 | String | 否 |
outputMode |
有效值是 answerSynthesis(用于 LLM 制定的答案)或 extractedData(用于完整的搜索结果),你可以将其作为下游步骤传递给 LLM。 |
String | 否 |
knowledgeSources |
一个或多个 受支持的知识源。 | Array | 是的 |
models |
用于答案制定或查询规划的受支持的 LLM 连接。 在此预览版中, models 只能包含一个模型,模型提供程序必须是 Azure AI 服务。 从门户或命令行请求获取模型信息。 可以使用基于角色的访问控制,而不是将 API 密钥用于与模型建立的 Azure AI 搜索连接。 |
物体 | 否 |
encryptionKey |
客户 管理的密钥 ,用于加密知识库和生成的对象中的敏感信息。 | 物体 | 否 |
retrievalReasoningEffort.kind |
确定与 LLM 相关的查询处理级别。 有效值为 minimal、 low (默认值)和 medium。 有关详细信息,请参阅 设置检索推理工作。 |
物体 | 否 |
查询知识库
创建知识库后,使用 检索操作 对其进行查询并验证 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}}