你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
注意
Azure AI 搜索可通过Azure门户、REST API 和Azure SDK获取。 它也是 Foundry IQ 的基础;Foundry IQ 是一个托管式知识层,可将企业内容转化为供 Microsoft Foundry 门户中的智能体使用的、可复用且具备权限感知能力的知识库。
Important
标记为“预览”的特性、功能或属性不受服务级别协议 (SLA) 保障,不建议用于生产工作负载,并且在正式发布之前可能会更改或受到限制。 Azure AI 搜索预览条款适用于所有预览功能,无论是独立功能还是正式版功能的一部分。
search 索引知识源将现有的Azure AI 搜索索引(包括索引文本和向量)连接到代理检索管道。 知识库是在运行时查询知识库时独立创建的、在知识库中引用的,并用作基础数据。
使用支持
| Azure 门户 | Microsoft Foundry 门户 | .NET SDK | Python SDK | Java SDK | JavaScript SDK | REST API |
|---|---|---|---|---|---|---|
| ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
先决条件
在任意提供代理检索功能的区域中提供的 Azure AI 搜索服务。
包含具有语义配置的纯文本或矢量内容的搜索索引。 查看用于代理检索的索引条件。 索引必须与知识库位于同一搜索服务上。
创建知识源的权限。 使用分配给用户帐户的搜索服务参与者角色(建议)或使用管理员 API 密钥配置无密钥身份验证。
所需
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令牌。
Limitations
智能体检索不会使检索请求遵循底层索引的评分配置文件,包括 defaultScoringProfile。 检索响应不呈现 @search.rerankerBoostedScore。
检查现有知识源
知识源是顶级可重用对象。 了解现有知识源有助于重复使用或命名新对象。
运行以下代码,按名称和类型列出知识源。
// List knowledge sources by name and type
using Azure.Search.Documents.Indexes;
var indexClient = new SearchIndexClient(new Uri(searchEndpoint), credential);
var knowledgeSources = indexClient.GetKnowledgeSourcesAsync();
Console.WriteLine("Knowledge Sources:");
await foreach (var ks in knowledgeSources)
{
Console.WriteLine($" Name: {ks.Name}, Type: {ks.GetType().Name}");
}
Reference:SearchIndexClient
# List knowledge sources by name and type
from azure.core.credentials import AzureKeyCredential
from azure.search.documents.indexes import SearchIndexClient
index_client = SearchIndexClient(endpoint = "search_url", credential = AzureKeyCredential("api_key"))
for ks in index_client.list_knowledge_sources():
print(f" - {ks.name} ({ks.kind})")
Reference:SearchIndexClient
### List knowledge sources by name and type
GET {{search-url}}/knowledgesources?api-version={{api-version}}&$select=name,kind
Authorization: Bearer {{token}}
参考:知识源 - 列表
还可以按名称返回单个知识源以查看其 JSON 定义。
using Azure.Search.Documents.Indexes;
using System.Text.Json;
var indexClient = new SearchIndexClient(new Uri(searchEndpoint), credential);
// Specify the knowledge source name to retrieve
string ksNameToGet = "earth-knowledge-source";
// Get its definition
var knowledgeSourceResponse = await indexClient.GetKnowledgeSourceAsync(ksNameToGet);
var ks = knowledgeSourceResponse.Value;
// Serialize to JSON for display
var jsonOptions = new JsonSerializerOptions
{
WriteIndented = true,
DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.Never
};
Console.WriteLine(JsonSerializer.Serialize(ks, ks.GetType(), jsonOptions));
Reference:SearchIndexClient
# Get a knowledge source 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"))
ks = index_client.get_knowledge_source("knowledge_source_name")
print(json.dumps(ks.as_dict(), indent = 2))
Reference:SearchIndexClient
### Get a knowledge source definition
GET {{search-url}}/knowledgesources/{{knowledge-source-name}}?api-version={{api-version}}
Authorization: Bearer {{token}}
参考:知识源 - 获取
以下 JSON 是搜索索引知识源的示例响应。 请注意,知识源指定单个索引名称以及要包含在查询中的索引中的字段。
{
"name": "my-search-index-ks",
"kind": "searchIndex",
"description": "A sample search index knowledge source.",
"encryptionKey": null,
"searchIndexParameters": {
"searchIndexName": "my-search-index",
"semanticConfigurationName": null,
"sourceDataFields": [],
"searchFields": []
}
}
创建知识源
运行以下代码以创建搜索索引知识源。
注意
从 2026-05-01-preview API 版本开始, semanticConfigurationName 对于搜索索引知识源是可选的。 早期 API 版本仍需要 semanticConfigurationName。 如果你的知识源需要同时支持较旧的和更新的 API 版本,请继续指定 semanticConfigurationName。
// Create a search index knowledge source
using Azure.Search.Documents.Indexes;
using Azure.Search.Documents.Indexes.Models;
using Azure.Identity;
var indexClient = new SearchIndexClient(new Uri(searchEndpoint), new DefaultAzureCredential());
var indexKnowledgeSource = new SearchIndexKnowledgeSource(
name: knowledgeSourceName,
searchIndexParameters: new SearchIndexKnowledgeSourceParameters(searchIndexName: indexName)
{
SearchFields = { new SearchIndexFieldReference(name: "page_chunk") },
SourceDataFields = { new SearchIndexFieldReference(name: "id"), new SearchIndexFieldReference(name: "page_chunk"), new SearchIndexFieldReference(name: "page_number") }
}
);
await indexClient.CreateOrUpdateKnowledgeSourceAsync(indexKnowledgeSource);
Console.WriteLine($"Knowledge source '{knowledgeSourceName}' created or updated successfully.");
Reference:SearchIndexClient、 SearchIndexKnowledgeSource
# Create a search index knowledge source
from azure.identity import DefaultAzureCredential
from azure.search.documents.indexes import SearchIndexClient
from azure.search.documents.indexes.models import SearchIndexKnowledgeSource, SearchIndexKnowledgeSourceParameters, SearchIndexFieldReference
index_client = SearchIndexClient(endpoint = "<search-endpoint>", credential = DefaultAzureCredential())
knowledge_source = SearchIndexKnowledgeSource(
name = "my-search-index-ks",
description= "This knowledge source pulls from an existing index designed for agentic retrieval.",
encryption_key = None,
search_index_parameters = SearchIndexKnowledgeSourceParameters(
search_index_name = "search_index_name",
source_data_fields = [
SearchIndexFieldReference(name="description"),
SearchIndexFieldReference(name="category"),
],
search_fields = [
SearchIndexFieldReference(name="id")
],
)
)
index_client.create_or_update_knowledge_source(knowledge_source)
print(f"Knowledge source '{knowledge_source.name}' created or updated successfully.")
Reference:SearchIndexClient
### Create a search index knowledge source
PUT {{search-endpoint}}/knowledgesources/my-search-index-ks?api-version=2026-08-01-preview
Authorization: Bearer {{search-access-token}}
Content-Type: application/json
{
"name": "my-search-index-ks",
"kind": "searchIndex",
"description": "This knowledge source pulls from an existing index designed for agentic retrieval.",
"encryptionKey": null,
"searchIndexParameters": {
"searchIndexName": "<index-name>",
"sourceDataFields": [
{ "name": "description" },
{ "name": "category" }
]
}
}
参考:知识源 - 创建或更新
在知识库上保留基本筛选器(预览版)
从 2026-05-01-preview API 版本开始,搜索索引知识源可以通过属性保留默认筛选器 baseFilter 。 如果希望同一筛选表达式适用于使用该知识源的每个检索请求,请使用 baseFilter,这样调用方就不必在每次调用时重复指定该筛选器。
以下示例将基本筛选器存储在搜索索引知识库上。
var knowledgeSource = new SearchIndexKnowledgeSource(
name: "public-docs-ks",
searchIndexParameters: new SearchIndexKnowledgeSourceParameters(searchIndexName: "public-docs-index")
{
BaseFilter = "isPublished eq true and accessScope eq 'public'"
}
);
await indexClient.CreateOrUpdateKnowledgeSourceAsync(knowledgeSource);
Reference:SearchIndexKnowledgeSourceParameters
knowledge_source = SearchIndexKnowledgeSource(
name="public-docs-ks",
search_index_parameters=SearchIndexKnowledgeSourceParameters(
search_index_name="public-docs-index",
base_filter="isPublished eq true and accessScope eq 'public'",
),
)
index_client.create_or_update_knowledge_source(knowledge_source)
Reference:SearchIndexKnowledgeSourceParameters
PUT {{search-endpoint}}/knowledgesources/public-docs-ks?api-version=2026-08-01-preview
Content-Type: application/json
Authorization: Bearer {{search-access-token}}
{
"name": "public-docs-ks",
"kind": "searchIndex",
"searchIndexParameters": {
"searchIndexName": "public-docs-index",
"baseFilter": "isPublished eq true and accessScope eq 'public'"
}
}
参考:知识源 - 创建或更新
在检索时, knowledgeSourceParams.filterAddOn 向存储的基本筛选器添加特定于请求的约束:
var retrievalRequest = new KnowledgeBaseRetrievalRequest();
retrievalRequest.KnowledgeSourceParams.Add(
new SearchIndexKnowledgeSourceParams("public-docs-ks")
{
FilterAddOn = "category eq 'Benefits'"
}
);
request = KnowledgeBaseRetrievalRequest(
knowledge_source_params=[
SearchIndexKnowledgeSourceParams(
knowledge_source_name="public-docs-ks",
filter_add_on="category eq 'Benefits'",
),
],
)
{
"knowledgeSourceParams": [
{
"knowledgeSourceName": "public-docs-ks",
"kind": "searchIndex",
"filterAddOn": "category eq 'Benefits'"
}
]
}
有效筛选器组合为:
baseFilter AND filterAddOn
由于这些筛选器是通过 AND 组合的,filterAddOn 只能进一步缩小持久保存的基础筛选器。 它不能取代或扩大它。
配置查询提示(预览版)
从 2026-08-01-preview API 版本开始,查询提示将指导查询规划模型从用户请求生成筛选器和排名提升。 将默认提示信息存储在 searchIndexParameters.queryHints 中,其中可同时包含筛选器和权重提升。
以下示例在针对 product-docs-index 的知识源上存储了一个筛选器提示和一个 fieldValue 增强,其中包含一个可按 productFamily 筛选的字段和一个可按 language 搜索的字段。
using System;
using Azure.Identity;
using Azure.Search.Documents.Indexes;
using Azure.Search.Documents.Indexes.Models;
var endpoint = new Uri("<search-endpoint>");
var indexClient = new SearchIndexClient(
endpoint,
new DefaultAzureCredential());
var queryHints = new SearchIndexKnowledgeSourceQueryHints();
queryHints.Filters.Add(
new SearchIndexKnowledgeSourceFilterHint(
"productFamily",
["Model-X100", "Model-X200"])
{
FilterInstructions =
"Filter only when the user names a model."
});
var languageBoost =
new SearchIndexKnowledgeSourceFieldValueBoost(
"language",
2.0);
languageBoost.FieldValues.Add("en-US");
languageBoost.FieldValues.Add("ja-JP");
languageBoost.BoostInstructions =
"Prefer the language requested by the user.";
queryHints.Boosts.Add(languageBoost);
var knowledgeSource = new SearchIndexKnowledgeSource(
"product-docs-ks",
new SearchIndexKnowledgeSourceParameters(
"product-docs-index")
{
QueryHints = queryHints
});
await indexClient.CreateOrUpdateKnowledgeSourceAsync(
knowledgeSource);
Reference:SearchIndexKnowledgeSourceParameters
from azure.identity import DefaultAzureCredential
from azure.search.documents.indexes import SearchIndexClient
from azure.search.documents.indexes.models import (
SearchIndexKnowledgeSource,
SearchIndexKnowledgeSourceFieldValueBoost,
SearchIndexKnowledgeSourceFilterHint,
SearchIndexKnowledgeSourceParameters,
SearchIndexKnowledgeSourceQueryHints,
)
endpoint = "<search-endpoint>"
index_client = SearchIndexClient(
endpoint=endpoint,
credential=DefaultAzureCredential(),
)
query_hints = SearchIndexKnowledgeSourceQueryHints(
filters=[
SearchIndexKnowledgeSourceFilterHint(
field="productFamily",
field_values=["Model-X100", "Model-X200"],
filter_instructions=(
"Filter only when the user names a model."
),
)
],
boosts=[
SearchIndexKnowledgeSourceFieldValueBoost(
field="language",
field_values=["en-US", "ja-JP"],
boost=2.0,
boost_instructions=(
"Prefer the language requested by the user."
),
)
],
)
knowledge_source = SearchIndexKnowledgeSource(
name="product-docs-ks",
search_index_parameters=SearchIndexKnowledgeSourceParameters(
search_index_name="product-docs-index",
query_hints=query_hints,
),
)
index_client.create_or_update_knowledge_source(knowledge_source)
Reference:SearchIndexKnowledgeSourceParameters
PUT {{search-endpoint}}/knowledgesources('product-docs-ks')?api-version=2026-08-01-preview
Content-Type: application/json
Authorization: Bearer {{search-access-token}}
{
"name": "product-docs-ks",
"kind": "searchIndex",
"searchIndexParameters": {
"searchIndexName": "product-docs-index",
"queryHints": {
"filters": [{
"field": "productFamily",
"fieldValues": ["Model-X100", "Model-X200"],
"filterInstructions": "Filter only when the user names a model."
}],
"boosts": [{
"kind": "fieldValue",
"field": "language",
"fieldValues": ["en-US", "ja-JP"],
"boost": 2.0,
"boostInstructions": "Prefer the language requested by the user."
}]
}
}
}
参考:知识源 - 创建或更新
根据以下要求配置每个提示:
| Hint | 字段要求 |
fieldValues 行为 |
集合限制 |
|---|---|---|---|
| 筛选器 |
field 必须标识可筛选索引字段。 |
必填。 列出所有允许值。 如果请求不映射到列出的值,则指示规划器不筛选该字段。 | 包含唯一字段的最多五个提示。 每个值最多可包含 128 个字符,一个提示中的所有值最多可包含 2,048 个字符。 |
fieldValue 提升 |
field 必须标识使用语言、标准或默认分析器的可搜索字段。 |
可选示例。 如果省略它们,请使用 boostInstructions 说明要从请求中选择的值。 |
包含唯一字段的最多五个提示。 每个提示最多可以包含 20 个值,每个值 128 个字符,组合 1,024 个字符。 |
multiWordExpression 提升 |
省略 field。 索引必须至少包含一个使用语言、标准或默认分析器的可搜索字段。 |
特定领域短语的可选示例。 | 一个提示。 它最多可以包含 20 个值,每个值包含 128 个字符,组合了 1,024 个字符。 |
对于任一提升类型, boost 是必需的,并且必须是大于 1.0的有限数。 较高的值使匹配文档在排名中具有更大的影响,而无需排除其他文档。 将每个可选 filterInstructions 或 boostInstructions 值限制为 1,024 个字符。
对于无法用单个词语体现含义的领域特定短语,请使用 multiWordExpression 提升。 在 fieldValues 中提供示例短语,或者省略这些短语,并让 boostInstructions 和用户的请求来指导短语的选择:
{
"boosts": [{
"kind": "multiWordExpression",
"fieldValues": ["deferred tax", "wash sale"],
"boost": 3.0,
"boostInstructions": "Boost domain terms used as complete phrases."
}]
}
设计查询提示时,请记住以下行为:
提示是按尽力而为原则提供的,因此模型可能不会为每个请求都生成筛选器或提升。 对于所需的约束(如授权边界),请改用 文档级访问控制 或 确定性筛选器 。
提示需要模型驱动的查询规划,因此当检索推理投入低于
minimal时,不会应用这些提示。 在其他工作级别,当存储queryHints的对象包含筛选器时,GPT-4o 或 GPT-4.1 系列模型返回 HTTP 400。 服务会在应用queryHintOverrides之前检查已存储的筛选器,因此,空覆盖项或仅包含提升设置的覆盖项都不会绕过此验证。 单独存储和fieldValuemultiWordExpression提升不会触发验证。生成的筛选器通过使用 与 和 结合。 生成的 boost 在保留原始词项的同时,使用完整的 Lucene 语法重写查询。
查询提示以索引值为依据。 它们不配置分析器或启用语言检测。
language这些示例中的值是普通索引元数据。
若要为单个检索请求覆盖已存储的查询提示,并验证生成的筛选器或提升设置,请参阅 在查询时覆盖已存储的查询提示(预览版)。
分配给知识库
如果对知识源感到满意, 请将其添加到知识库。
查询知识库
配置知识库后, 调用检索操作或 MCP 终结点 以查询知识源。
删除知识源
在删除知识库之前,必须删除引用它的任何知识库或更新知识库定义以删除引用。 对于生成索引和索引器管道的知识源,也会删除所有 生成的对象 。 但是,如果使用现有索引创建知识源,则不会删除索引。
如果尝试删除正在使用的知识源,该操作将失败并返回受影响的知识库列表。
删除知识源:
获取搜索服务上所有知识库的列表。
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
示例响应可能如下所示:
{ "@odata.context": "https://my-search-service.search.windows.net/$metadata#knowledgebases(name)", "value": [ { "name": "my-kb" }, { "name": "my-kb-2" } ] }获取单个知识库定义以检查知识源引用。
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
示例响应可能如下所示:
{ "Name": "earth-knowledge-base", "KnowledgeSources": [ { "Name": "earth-knowledge-source" } ], "Models": [ {} ], "RetrievalReasoningEffort": {}, "OutputMode": {}, "ETag": "\u00220x8DE278629D782B3\u0022", "EncryptionKey": null, "Description": null, "RetrievalInstructions": null, "AnswerInstructions": null }删除知识库,或者如果有多个知识库,请更新知识库以删除源。 此示例显示删除。
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
删除知识源。
await indexClient.DeleteKnowledgeSourceAsync(knowledgeSourceName); System.Console.WriteLine($"Knowledge source '{knowledgeSourceName}' deleted successfully.");Reference:SearchIndexClient
获取搜索服务上所有知识库的列表。
# Get knowledge bases from azure.core.credentials import AzureKeyCredential from azure.search.documents.indexes import SearchIndexClient index_client = SearchIndexClient(endpoint = "search_url", credential = AzureKeyCredential("api_key")) print("Knowledge Bases:") for kb in index_client.list_knowledge_bases(): print(f" - {kb.name}")Reference:SearchIndexClient
示例响应可能如下所示:
{ "@odata.context": "https://my-search-service.search.windows.net/$metadata#knowledgebases(name)", "value": [ { "name": "my-kb" }, { "name": "my-kb-2" } ] }获取单个知识库定义以检查知识源引用。
# Get a knowledge base definition from azure.core.credentials import AzureKeyCredential from azure.search.documents.indexes import SearchIndexClient index_client = SearchIndexClient(endpoint = "search_url", credential = AzureKeyCredential("api_key")) kb = index_client.get_knowledge_base("knowledge_base_name") print(kb)Reference:SearchIndexClient
示例响应可能如下所示:
{ "name": "my-kb", "description": null, "retrievalInstructions": null, "answerInstructions": null, "outputMode": null, "knowledgeSources": [ { "name": "my-blob-ks" } ], "models": [], "encryptionKey": null, "retrievalReasoningEffort": { "kind": "low" } }删除知识库,或者如果有多个知识库,请更新知识库以删除源。 此示例显示删除。
# 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 source 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_source("knowledge_source_name") print(f"Knowledge source deleted successfully.")Reference:SearchIndexClient
获取搜索服务上所有知识库的列表。
### Get knowledge bases GET {{search-url}}/knowledgebases?api-version={{api-version}}&$select=name Authorization: Bearer {{token}}参考:知识库 - 列表
示例响应可能如下所示:
{ "@odata.context": "https://my-search-service.search.windows.net/$metadata#knowledgebases(name)", "value": [ { "name": "my-kb" }, { "name": "my-kb-2" } ] }获取单个知识库定义以检查知识源引用。
### Get a knowledge base definition GET {{search-url}}/knowledgebases/{{knowledge-base-name}}?api-version={{api-version}} Authorization: Bearer {{token}}参考:知识库 - 获取
示例响应可能如下所示:
{ "name": "my-kb", "description": null, "retrievalInstructions": null, "answerInstructions": null, "outputMode": null, "knowledgeSources": [ { "name": "my-blob-ks" } ], "models": [], "encryptionKey": null, "retrievalReasoningEffort": { "kind": "low" } }删除知识库,或者如果有多个知识库,请更新知识库以删除源。 此示例显示删除。
### Delete a knowledge base DELETE {{search-url}}/knowledgebases/{{knowledge-base-name}}?api-version={{api-version}} Authorization: Bearer {{token}}参考:知识库 - 删除
删除知识源。
### Delete a knowledge source DELETE {{search-url}}/knowledgesources/{{knowledge-source-name}}?api-version={{api-version}} Authorization: Bearer {{token}}参考:知识源 - 删除