注释
此智能检索功能在 2026-04-01 REST API 版本中通过编程接口普遍可用。 Azure门户继续提供对所有代理检索功能的仅限预览的访问权限。
如果选择使用预览版 REST API 版本,则可以访问尚未正式发布此功能的功能。 预览版功能在没有服务级别协议的情况下提供,不建议用于生产工作负荷。
Web 知识源可以通过基于代理的检索管道,从 Microsoft 必应 获取实时 Web 数据。 知识源是独立创建的,在知识库中引用,并在代理或聊天机器人在查询时调用 retrieve操作时用作基础数据。
Bing自定义搜索始终是 Web 知识源的搜索提供程序。 虽然不能指定备用搜索提供程序或引擎,但可以包括或排除特定 域,例如 https://learn.microsoft.com。 如果未指定任何域,Web知识库对整个公共互联网的访问权限不受限制。
Web 知识源与其他知识源一起效果最佳。 当您的专有内容未能提供完整且最新的答案,或者当您希望使用商业搜索引擎的信息来补充结果时,请使用 Web 知识来源。
使用支持
| Azure 门户 | .NET SDK | Python SDK | Java SDK | JavaScript SDK | REST API |
|---|---|---|---|---|---|
| ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
先决条件
一个具有访问Web 知识源权限的 Azure 订阅。 默认情况下,access处于启用状态。 如果访问权限被禁用,请与管理员联系。
提供代理式检索的任何 公共区域中的Azure AI 搜索服务。 私有云或主权云不支持 Web 知识源。
在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 版本:
一般可用的功能: 搜索服务 2026-04-01
限制和注意事项
Web 内容始终由 LLM 汇总,然后再将其包含在检索结果中。 结果被引用摘要,而不是逐字 Web 文本。
对于 2026-04-01 API 版本,知识库必须包含模型引用,以便为网页内容摘要提供LLM。 检索始终是提取性的(引用摘要)。 此版本不提供答案合成和可配置推理工作。
对于 2025-11-01-preview API 版本,知识库模型参考还启用答案合成,这会产生单个 LLM 生成的响应,而不是提取的引文。
检查现有知识来源
知识来源是顶级可重用对象。 了解现有知识源有助于重复使用或命名新对象。
运行以下代码,按名称和类型列出知识源。
// 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
api-key: {{api-key}}
参考:知识源 - 列表
还可以按名称返回单个知识来源以查看其 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}}
api-key: {{api-key}}
参考:知识源 - 获取
以下 JSON 是 Web 知识源资源的示例响应。
{
"name": "my-web-ks",
"kind": "web",
"description": "A sample Web Knowledge Source.",
"encryptionKey": null,
"webParameters": {
"domains": null
}
}
创建知识来源
运行以下代码以创建 Web 知识源。
// Create Web Knowledge Source
using Azure.Search.Documents.Indexes;
using Azure.Search.Documents.Indexes.Models;
using Azure;
var indexClient = new SearchIndexClient(new Uri(searchEndpoint), new AzureKeyCredential(apiKey));
var knowledgeSource = new WebKnowledgeSource(name: "my-web-ks")
{
Description = "A sample Web Knowledge Source.",
WebParameters = new WebKnowledgeSourceParameters
{
Domains = new WebKnowledgeSourceDomains
{
AllowedDomains =
{
new WebKnowledgeSourceDomain(address: "learn.microsoft.com") { IncludeSubpages = true }
},
BlockedDomains =
{
new WebKnowledgeSourceDomain(address: "bing.com") { IncludeSubpages = false }
}
}
}
};
await indexClient.CreateOrUpdateKnowledgeSourceAsync(knowledgeSource);
Console.WriteLine($"Knowledge source '{knowledgeSource.Name}' created or updated successfully.");
Reference:SearchIndexClient、 WebKnowledgeSource
# Create Web Knowledge Source
from azure.core.credentials import AzureKeyCredential
from azure.search.documents.indexes import SearchIndexClient
from azure.search.documents.indexes.models import WebKnowledgeSource, WebKnowledgeSourceParameters, WebKnowledgeSourceDomains, WebKnowledgeSourceDomain
index_client = SearchIndexClient(endpoint = "search_url", credential = AzureKeyCredential("api_key"))
knowledge_source = WebKnowledgeSource(
name = "my-web-ks",
description = "A sample Web Knowledge Source.",
encryption_key = None,
web_parameters = WebKnowledgeSourceParameters(
domains = WebKnowledgeSourceDomains(
allowed_domains = [ WebKnowledgeSourceDomain(address="learn.microsoft.com", include_subpages=True) ],
blocked_domains = [ WebKnowledgeSourceDomain(address="bing.com", include_subpages=False) ]
)
)
)
index_client.create_or_update_knowledge_source(knowledge_source)
print(f"Knowledge source '{knowledge_source.name}' created or updated successfully.")
Reference:SearchIndexClient
### Create Web Knowledge Source
PUT {{search-url}}/knowledgesources/my-web-ks?api-version=2025-11-01-preview
Content-Type: application/json
api-key: {{api-key}}
{
"name": "my-web-ks",
"kind": "web",
"description": "This knowledge source pulls content from the web.",
"encryptionKey": null,
"webParameters": {
"domains": {
"allowedDomains": [ { "address": "learn.microsoft.com", "includeSubpages": true } ],
"blockedDomains": [ { "address": "bing.com", "includeSubpages": false } ]
}
}
}
参考:知识源 - 创建或更新
特定于源的属性
对于 2025-11-01-preview 和 2026-04-01 API 版本,可以传递以下属性来创建 Web 知识源。
| Name | Description | 类型 | 可编辑 | 必选 |
|---|---|---|---|---|
Name |
知识源的名称,该名称在知识源集合中必须唯一,并遵循Azure AI 搜索中对象的命名准则。 | String | 否 | 是的 |
Description |
知识源的说明。 如果未指定,Azure AI 搜索应用默认说明。 | String | 是的 | 否 |
EncryptionKey |
客户 管理的密钥 ,用于加密知识源中的敏感信息。 | 物体 | 是的 | 否 |
WebParameters |
特定于 Web 知识源的参数。 目前,只有 Domains。 |
物体 | 是的 | 否 |
Domains |
用于在搜索空间中允许或阻止的域。 默认情况下,知识源使用 Grounding 和Bing搜索来搜索整个公共 Internet。 指定域时,知识源使用 Grounding 和Bing自定义搜索来限制指定域的结果。 在这两种情况下,Bing自定义搜索是搜索提供程序。 | 物体 | 是的 | 否 |
AllowedDomains |
需要包含在搜索空间中的域。 对于每个域,必须以address格式指定其website.com。 也可以通过将 `IncludeSubpages` 设置为 `true` 或 `false` 来指定是否包括域的子页。 |
Array | 是的 | 否 |
BlockedDomains |
需要排除在搜索空间之外的域名。 对于每个域,必须以address格式指定其website.com。 也可以通过将 `IncludeSubpages` 设置为 `true` 或 `false` 来指定是否包括域的子页。 |
Array | 是的 | 否 |
| Name | Description | 类型 | 可编辑 | 必选 |
|---|---|---|---|---|
name |
知识源的名称,该名称在知识源集合中必须唯一,并遵循Azure AI 搜索中对象的命名准则。 | String | 否 | 是的 |
description |
知识源的说明。 如果未指定,Azure AI 搜索应用默认说明。 | String | 是的 | 否 |
encryption_key |
客户 管理的密钥 ,用于加密知识源中的敏感信息。 | 物体 | 是的 | 否 |
web_parameters |
特定于 Web 知识源的参数。 目前,只有 domains。 |
物体 | 是的 | 否 |
domains |
用于在搜索空间中允许或阻止的域。 默认情况下,知识源使用 Grounding 和Bing搜索来搜索整个公共 Internet。 指定域时,知识源使用 Grounding 和Bing自定义搜索来限制指定域的结果。 在这两种情况下,Bing自定义搜索是搜索提供程序。 | 物体 | 是的 | 否 |
allowed_domains |
需要包含在搜索空间中的域。 对于每个域,必须以address格式指定其website.com。 也可以通过将 `include_subpages` 设置为 `true` 或 `false` 来指定是否包括域的子页。 |
Array | 是的 | 否 |
blocked_domains |
需要排除在搜索空间之外的域名。 对于每个域,必须以address格式指定其website.com。 也可以通过将 `include_subpages` 设置为 `true` 或 `false` 来指定是否包括域的子页。 |
Array | 是的 | 否 |
| Name | Description | 类型 | 可编辑 | 必选 |
|---|---|---|---|---|
name |
知识源的名称,该名称在知识源集合中必须唯一,并遵循Azure AI 搜索中对象的命名准则。 | String | 否 | 是的 |
kind |
知识源的类型,其为web在本例中。 |
String | 否 | 是的 |
description |
知识源的说明。 如果未指定,Azure AI 搜索应用默认说明。 | String | 是的 | 否 |
encryptionKey |
客户 管理的密钥 ,用于加密知识源中的敏感信息。 | 物体 | 是的 | 否 |
webParameters |
特定于 Web 知识源的参数。 目前,只有 domains。 |
物体 | 是的 | 否 |
domains |
用于在搜索空间中允许或阻止的域。 默认情况下,知识源使用 Grounding 和Bing搜索来搜索整个公共 Internet。 指定域时,知识源使用 Grounding 和Bing自定义搜索来限制指定域的结果。 在这两种情况下,Bing自定义搜索是搜索提供程序。 | 物体 | 是的 | 否 |
allowedDomains |
需要包含在搜索空间中的域。 对于每个域,必须以address格式指定其website.com。 也可以通过将 `includeSubpages` 设置为 `true` 或 `false` 来指定是否包括域的子页。 |
Array | 是的 | 否 |
blockedDomains |
需要排除在搜索空间之外的域名。 对于每个域,必须以address格式指定其website.com。 也可以通过将 `includeSubpages` 设置为 `true` 或 `false` 来指定是否包括域的子页。 |
Array | 是的 | 否 |
分配给知识库
如果对知识源感到满意,请继续执行下一步:在 knowledge base 中指定知识源。
配置知识库后,使用 执行 retrieve 操作 来查询知识源。
查看检索输出
查询包含 Web 知识库的知识库时,检索响应 activity 数组可以包含两条与 Web 相关的记录:
- 捕获
web用于请求的运行时参数的记录。 - 捕获令牌使用情况的
modelWebSummarization记录,用于LLM的摘要步骤。
{
"activity": [
{
"id": 1,
"type": "web",
"knowledgeSourceName": "my-web-ks",
"elapsedMs": 212,
"webArguments": {
"search": "What is the latest news about AI in education?",
"language": "en",
"market": "en-US",
"count": 10,
"freshness": "2026-03-01..2026-03-31"
}
},
{
"id": 2,
"type": "modelWebSummarization",
"elapsedMs": 87,
"inputTokens": 1234,
"outputTokens": 256
}
]
}
删除知识来源
在删除知识源之前,必须删除引用它的任何知识库或更新知识库定义来去除该引用。 对于生成索引和索引器管道的知识源,所有 生成的对象 都会被删除。 但是,如果使用现有索引创建知识源,则不会删除索引。
如果尝试删除正在使用的知识源,该作将失败并返回受影响的知识库列表。
要删除知识源,请执行以下步骤:
获取在你的搜索服务中所有知识库的列表。
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
示例响应可能如下所示:
Knowledge Bases: - earth-knowledge-base - hotels-sample-knowledge-base - my-demo-knowledge-base获取单个知识库的定义,以检查知识源引用。
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.azure.cn/$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 api-key: {{api-key}}参考:知识库 - 列表
示例响应可能如下所示:
{ "@odata.context": "https://my-search-service.search.azure.cn/$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}} api-key: {{api-key}}参考:知识库 - 获取
示例响应可能如下所示:
{ "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}} api-key: {{api-key}}参考:知识库 - 删除
删除知识来源。
### Delete a knowledge source DELETE {{search-url}}/knowledgesources/{{knowledge-source-name}}?api-version={{api-version}} api-key: {{api-key}}参考:知识源 - 删除