为 AgentCore 网页搜索加上域名与发布日期过滤
本文说明如何在 AgentCore 网页搜索连接器 1.2.0 上按次调用限制域名和发布日期,并由服务端与管理员策略取交集后强制执行。

目录
#为 AgentCore 网页搜索加上域名与发布日期过滤
当人工智能智能体(agent)代表客户使用网页搜索(Web Search)为答案提供依据时,该智能体背后的组织需要域名和日期过滤器,以控制智能体查阅哪些来源,以及这些来源必须有多新。金融服务智能体不应把答案建立在未经审查的博客上。当用户询问当前供应情况时,产品信息智能体不应引用三年前的价格或库存数据,因为库存水平和价格变化很快。
今天,我们宣布 Amazon Bedrock AgentCore 上的网页搜索支持运行时域名和发布日期过滤。AgentCore 是一个平台,可用任何框架或模型大规模构建、连接和优化智能体。该能力作为网页搜索连接器版本 1.2.0 的一部分发布。这些能力让开发者对每次调用都能控制智能体可以搜索哪些网站域名,以及结果必须落在哪个发布日期窗口内,并且全部在服务端强制执行。不需要外部编排。与现有的管理员级域名策略结合后,组织拥有分层过滤模型:既强制企业治理,又让单次 API 调用能按请求动态收窄范围。
与运行时过滤一并发布的,还有网页搜索可用性扩展到两个新的 AWS 区域(Region):eu-west-1(都柏林)和 ap-northeast-1(东京)。欧洲和亚太的客户现在可以从更靠近其工作负载的区域端点调用网页搜索,降低延迟,并为有数据邻近性要求的组织提供一个位于欧盟的入口。AgentCore 使用零出站架构,搜索查询留在 AWS 之内。这一区域扩展让这些区域中受监管的客户有一条路径,能使用有依据的智能体,而不把流量路由穿过大西洋。
在本文中,我们走读运行时过滤是什么、为什么重要、管理员加运行时的分层模型如何工作、如何用新的 API 参数开始,以及区域可用性对你的工作负载意味着什么。
连接器版本 1.2.0 的新内容
本次发布在网页搜索工具输入模式的 filters 对象中引入两项新能力:
1. 运行时域名过滤
在每一次 tools/call 调用上传入 include(允许列表)或 exclude(拒绝列表)域名列表。这给出按请求控制智能体可以查阅哪些来源的能力。
| 字段 | 说明 |
|---|---|
| filters.domainFilter.include | 返回来自这些域名的结果 |
| filters.domainFilter.exclude | 抑制来自这些域名的结果 |
每个列表最多支持 100 个域名,独立计数。
2. 发布日期过滤
使用 ISO-8601 UTC 边界,把结果限制在特定日期范围内发布的内容:
| 字段 | 说明 |
|---|---|
| filters.publishedDateFilter.from | 最早发布日期(含) |
| filters.publishedDateFilter.to | 最晚发布日期(含) |
两个过滤器都是可选的,并按请求应用。省略它们会保留现有行为:所有已索引内容都有资格。
为什么运行时过滤重要
真实世界的智能体工作负载需要比仅靠组织级策略更细的控制:
- 按任务限制来源:分析监管更新的合规智能体应只搜索 .gov 域名和已批准的出版方,而不是开放网络。
- 时间范围:总结“本周财报电话会”的市场情报智能体,即使先前季度的结果对查询排名很高,也绝不应浮出这些结果。
- 调用时动态允许或拒绝:服务不同客户的多租户平台,可能需要按请求使用不同的域名策略,而不必为每个租户创建单独目标。
- 内容新鲜度保证:回答“最新版本改了什么”的客户支持智能体,应只返回过去 7 天内发布的文档。
运行时过滤把控制移进 API 调用本身,从而满足这些需求。
它如何工作:请求流
下图展示一次经过过滤的搜索请求的生命周期:你的智能体发送带有查询和过滤器的 tools/call,网关把你的运行时过滤器与管理员级策略合并,对网页索引执行过滤后的查询,对原始结果执行合规,并只返回已核验的结果,供你的智能体为回答提供依据。
图注:经过过滤的网页搜索请求流:智能体发送带有查询和过滤器的 tools/call,网关把运行时过滤器与管理员策略合并,对网页索引运行过滤后的查询,执行合规,并只返回已核验的结果
图 1:一次经过过滤的网页搜索请求的生命周期,从 tools/call 到已核验结果
整个生命周期都在服务端。没有客户端过滤循环,没有后处理,也没有额外往返。
分层过滤模型:管理员 + 运行时
本次发布的一个关键设计原则是:运行时过滤器可以收窄、但绝不能扩大管理员设定的范围。这确保无论运行时调用方请求什么,企业策略始终被强制执行。管理员级域名列表在创建连接器资源时设置。
合并逻辑
下图说明管理员级列表与运行时过滤列表如何组合:包含列表按交集合并(只有同时出现在两个列表中的域名保留),排除列表按并集合并(在任一层级被阻止的域名保持被阻止)。注意 d.com 从生效允许列表中被去掉,因为它只出现在运行时列表中,而不在管理员策略中。
图注:合并逻辑:管理员与运行时的包含列表按交集合并,排除列表按并集合并,因此 d.com 从生效允许列表中被去掉,因为它只出现在运行时列表中
图 2:管理员与运行时域名列表如何合并:包含列表取交集,排除列表取并集
域名包含(允许列表):生效允许列表是管理员列表与运行时列表的交集。如果管理员允许 [a.com, b.com, c.com],而运行时调用包含 [b.com, c.com, d.com],则只搜索 b.com 和 c.com。域名 d.com 在管理员域名列表之外,被静默丢弃。
域名排除(拒绝列表):生效拒绝列表是管理员列表与运行时列表的并集。如果管理员阻止 [x.com],而运行时调用排除 [y.com],则两者都被阻止。
注意:运行时调用方不能搜索管理员未允许的域名,也不能解除管理员已拒绝的域名。运行时过滤器只能进一步限制搜索空间。
过滤合规行为
当过滤器生效时,网页搜索把精确优先于召回。无法按你的过滤条件核验的结果会被排除,而不是未过滤地返回:
- 域名过滤器生效:没有可识别域名的结果被排除在考虑之外。
- 日期过滤器生效:没有可识别发布日期的结果被排除。
过滤器生效时,你可能收到更少的结果,但你确实收到的每一条结果都满足你指定的过滤条件。
上限执行
有四个列表:管理员包含、管理员排除、运行时包含和运行时排除。每个独立支持最多 100 条。完整配置细节和组合规则见开发者指南中的配置域名过滤。
开始使用
网页搜索通过 AgentCore 网关交付。AgentCore 网关是 Amazon Bedrock AgentCore 的一项能力,提供与模型上下文协议(Model Context Protocol,MCP)兼容的托管端点,用于把智能体连接到工具。按以下步骤为你的网页搜索目标启用运行时域名和日期过滤。
前提条件
- 一个 Amazon Bedrock AgentCore 网关,其网页搜索目标钉在连接器版本 1.2.0 或更高版本。
- AWS Identity and Access Management(IAM)权限:你的调用智能体或应用需要对网关的 Amazon 资源名称(Amazon Resource Name,ARN)拥有 bedrock-agentcore:InvokeGateway,并且网关的服务角色需要 bedrock-agentcore:InvokeWebSearch。完整策略见配置网关服务角色。
- 最新的 AWS SDK(Python、JavaScript、Java、.NET、Go、Ruby 或 PHP)。
步骤 1:创建版本为 1.2.0 的网页搜索目标
使用适用于 Python 的 AWS SDK(Boto3)创建(或更新)一个钉在版本 1.2.0 的目标,并带有管理员级域名策略。如果你已有版本 1.1.0 的网页搜索目标,可以用 UpdateGatewayTarget 把它钉到版本 1.2.0,而不必创建新目标。更多设置选项,包括 AgentCore CLI 和控制台,见设置网页搜索工具。
import boto3
gateway_client = boto3.client("bedrock-agentcore-control", region_name="us-east-1")
# Create a Web Search target pinned to version 1.2.0 with admin-level domain filtering
target = gateway_client.create_gateway_target(
gatewayIdentifier="your-gateway-id",
name="web-search-filtered",
targetConfiguration={
"mcp": {
"connector": {
"source": {"connectorId": "web-search", "version": "1.2.0"},
"configurations": [
{
"name": "WebSearch",
"parameterValues": {
"domainFilter": {
"include": [
"approved-wire-1.com",
"approved-wire-2.com",
"sec.gov",
"investor.gov",
],
"exclude": ["unreliable-source.net"],
}
},
}
],
}
}
},
credentialProviderConfigurations=[
{"credentialProviderType": "GATEWAY_IAM_ROLE"}
],
)
print(f"Target ID: {target['targetId']}")
print(f"Status: {target['status']}")步骤 2:带运行时过滤器调用
设想你的智能体为法律团队监控 SEC 执法行动。团队只信任 sec.gov 作为主要来源,并且他们需要本月的行动,而不是历史备案。下面是你的智能体发送的 tools/call 载荷:
{
"jsonrpc": "2.0",
"id": "1",
"method": "tools/call",
"params": {
"name": "WebSearch",
"arguments": {
"query": "latest SEC enforcement actions 2026",
"filters": {
"domainFilter": {
"include": ["sec.gov"],
"exclude": []
},
"publishedDateFilter": {
"from": "2026-07-01T00:00:00Z",
"to": "2026-08-04T23:59:59Z"
}
}
}
}
}智能体只收到过去五周内在 sec.gov 上发布的结果。结果中没有第三方法律评论,也没有过时备案。
注意:你的 tools/call 请求中的工具名,是通过 tools/list 发现的名称,遵循 <target-name>___WebSearch 这一模式。对先前创建的目标,那就是 web-search-filtered___WebSearch。运行时包含列表(sec.gov)与管理员列表(approved-wire-1.com、approved-wire-2.com、sec.gov、investor.gov)取交集。因为 sec.gov 出现在两者中,所以它被搜索。如果你传入 some-other-site.com,它会被静默丢弃,因为它不在管理员允许列表中。
示例代码
下面是一些示例,说明如何使用从 AgentCore 网关创建的 MCP 客户端,在运行时使用新过滤器。创建用于调用工具的 MCP 客户端的代码示例。
示例 1:有监管引用要求的临床研究助手
你在为制药公司的监管事务团队构建研究助手。公司策略要求每个答案只引用 FDA、NIH 或 ClinicalTrials.gov。来自健康博客的引用不只是质量问题。它是可能在审计中浮出的合规违规。无论模型构造什么查询,智能体都需要在每次搜索上强制这一点。
import json
# Pharma research assistant: only approved regulatory sources
compliance_request = json.dumps({
"jsonrpc": "2.0",
"id": "req-001",
"method": "tools/call",
"params": {
"name": "WebSearch",
"arguments": {
"query": "FDA drug approval process 2026 guidance",
"maxResults": 10,
"filters": {
"domainFilter": {
"include": ["fda.gov", "nih.gov", "clinicaltrials.gov"]
}
}
}
}
})
# Send via your MCP client (SigV4-signed or OAuth-authenticated)
response = mcp_client.send(compliance_request)
results = json.loads(response)
# Every result is from fda.gov, nih.gov, or clinicaltrials.gov
for result in results["result"]["content"]:
print(result["text"])你的智能体现在引用的每一条结果,都可以核验为来自已批准的监管来源。即使某篇 WebMD 文章对该查询排名第 1,它也绝不会进入模型的上下文窗口。
示例 2:股票更新智能体,只要本周报道
你的交易台运行一个智能体,在交易日全天生成股票更新。问题是:当交易员问“半导体股票最新情况是什么?”,智能体过去会浮出上一季度一篇排名很高的分析,而根据过时报道行动的交易员会亏钱。你需要每一条结果都来自过去 7 天,没有例外。
from datetime import datetime, timedelta, timezone
# Calculate the 7-day window
now = datetime.now(timezone.utc)
seven_days_ago = now - timedelta(days=7)
stock_update_request = json.dumps({
"jsonrpc": "2.0",
"id": "req-002",
"method": "tools/call",
"params": {
"name": "WebSearch",
"arguments": {
"query": "semiconductor stocks latest developments",
"maxResults": 15,
"filters": {
"publishedDateFilter": {
"from": seven_days_ago.strftime("%Y-%m-%dT%H:%M:%SZ"),
"to": now.strftime("%Y-%m-%dT%H:%M:%SZ")
}
}
}
}
})
response = mcp_client.send(stock_update_request)智能体的股票更新现在只取材于过去七天内发布的报道。上一季度那篇排名很高的分析?它到不了模型,因此也不能误导交易员。
注意:日期过滤器生效时,没有可识别发布日期的结果会被排除。这确保返回的每一条结果都可核验地落在你的时间窗口内。
示例 3:投资者关系合规,只要主要来源和当前季度
你的投资者关系团队使用智能体准备盈利分析草稿。两条硬规则:(1)只要主要来源:SEC 备案和官方投资者页面,绝不要众包的金融评论网站;(2)只要本季度的出版物,因为在当前季度分析中引用上一季度的数字是实质性错误。你需要在每次搜索上同时强制这两项约束。
# IR compliance agent: primary sources + current quarter only
financial_request = json.dumps({
"jsonrpc": "2.0",
"id": "req-003",
"method": "tools/call",
"params": {
"name": "WebSearch",
"arguments": {
"query": "AMZN quarterly earnings report Q2 2026",
"maxResults": 10,
"filters": {
"domainFilter": {
"include": ["sec.gov", "investor.gov"],
"exclude": ["example-crowd-commentary-1.com", "example-crowd-commentary-2.com"]
},
"publishedDateFilter": {
"from": "2026-04-01T00:00:00Z",
"to": "2026-08-04T23:59:59Z"
}
}
}
}
})
response = mcp_client.send(financial_request)智能体的草稿现在只引用 2026 年第二季度和第三季度的官方备案和通讯社报道。众包评论和观点文章即使与查询完全匹配也会被阻止。先前季度的任何内容无论来源都被排除。
示例 4:带按租户来源策略的软件即服务平台
你运营一个研究智能体软件即服务(SaaS)平台,服务医疗、法律和金融服务客户。每个租户都有合同约定的来源策略。你的医疗客户的业务伙伴协议(Business Associate Agreement,BAA)要求引用只来自 PubMed、CDC 和已批准的医学研究数据库。你的法律客户坚持使用 Cornell LII 和官方法院记录。你的金融客户要求 SEC、美联储和已批准的通讯社。你不能为每个租户单独起一个网关目标(你有 200 个租户,而且还在增加),因此你使用 Strands Agents SDK 在运行时应用租户特定的过滤器。
from strands import Agent
from strands.models import BedrockModel
from strands.tools.mcp.mcp_client import MCPClient
from mcp.client.streamable_http import streamablehttp_client
# Per-tenant domain policies (from your config database)
TENANT_POLICIES = {
"tenant-healthcare": {
"include": ["pubmed.ncbi.nlm.nih.gov", "who.int", "cdc.gov"],
"exclude": ["example-consumer-health-site.com"],
},
"tenant-legal": {
"include": ["law.cornell.edu", "supremecourt.gov", "uscourts.gov"],
"exclude": [],
},
"tenant-finance": {
"include": ["sec.gov", "federalreserve.gov", "example-approved-wire.com"],
"exclude": ["example-social-forum-site.com"],
},
}
def search_for_tenant(tenant_id: str, query: str, days_back: int = 30):
"""Execute a policy-compliant web search for a specific tenant."""
from datetime import datetime, timedelta, timezone
policy = TENANT_POLICIES[tenant_id]
now = datetime.now(timezone.utc)
date_from = (now - timedelta(days=days_back)).strftime("%Y-%m-%dT%H:%M:%SZ")
def create_transport():
return streamablehttp_client(
gateway_url,
headers={"Authorization": f"Bearer {get_token()}"},
)
mcp_client = MCPClient(create_transport)
model = BedrockModel(
model_id="us.anthropic.claude-sonnet-4-20250514-v1:0",
max_tokens=2048,
)
with mcp_client:
tools = mcp_client.list_tools_sync()
agent = Agent(model=model, tools=tools)
# The agent's system prompt instructs it to pass these filters
# on every WebSearch invocation
system_prompt = f"""You are a research assistant. When using WebSearch,
ALWAYS include these filters in your tool call:
- domainFilter.include: {policy['include']}
- domainFilter.exclude: {policy['exclude']}
- publishedDateFilter.from: {date_from}
Never search outside approved domains."""
result = agent(query, system_prompt=system_prompt)
return result.message
# Usage
answer = search_for_tenant(
"tenant-healthcare",
"What are the latest clinical trial results for GLP-1 drugs?"
)一个网关目标服务 200 个租户,每个都有自己的来源策略,在调用时动态强制。你的医疗租户的智能体绝不会引用 Reddit 或 WebMD,你的金融租户的智能体也绝不会引用博客文章,即使它们共享同一套底层基础设施。
重要:基于系统提示的过滤(如前文所示)依赖于智能体遵循指令。它不是硬强制。若要硬强制,在目标级别配置允许的域名(管理员包含列表)。直接放在 tools/call 载荷中的运行时过滤器提供 API 级强制,不能被模型绕过。
输入模式参考
连接器版本 1.2.0 引入的 filters 对象,在现有的 query 和 maxResults 字段之外,增加了 domainFilter(包含/排除列表,每个最多 100 个域名)和 publishedDateFilter(含端点的 ISO-8601 UTC 边界)。完整输入模式和逐字段参考,见 Amazon Bedrock AgentCore 开发者指南中的输入模式。
可用性与零数据出站
运行时域名和日期过滤今天已在美国东部(弗吉尼亚北部)(us-east-1)、欧洲(爱尔兰)(eu-west-1)和亚太(东京)(ap-northeast-1)区域提供,用于 Amazon Bedrock AgentCore 上的网页搜索。
网页搜索受益于 AgentCore 的零数据出站架构:搜索查询完全在 AWS 基础设施内提供。客户查询不会被发送到第三方搜索引擎,也不会被路由到 AWS 之外。对金融服务、医疗和政府等受监管行业的组织,这移除了整整一类合规审查。
向后兼容
这些功能完全向后兼容:
- 没有破坏性变更。版本 1.2.0 是次版本发布。新字段是附加的,filters 对象是可选的。不带过滤器的现有 API 调用继续完全按以前的方式工作。
- SDK 支持。可在 AWS SDK(Python(Boto3)、JavaScript/TypeScript、Java、.NET、Go、Ruby 和 PHP SDK)、AWS 命令行界面(AWS Command Line Interface,AWS CLI)和 AgentCore CLI 上使用。
- 控制台支持。面向 AgentCore 网页搜索目标的 AWS 控制台,现在在连接器配置界面中同时呈现包含和排除域名列表输入。
结论
运行时域名和发布日期过滤,让在 Amazon Bedrock AgentCore 网关上构建的开发者获得按次调用的精确度,从而构建可信、符合策略的智能体,而不牺牲托管的、服务端搜索工具的简单性。
无论你是把智能体限制在已批准的监管来源、把结果限定在过去 24 小时,还是动态应用租户特定策略,AgentCore 上的网页搜索都让你保持控制:零数据出站、原生 IAM 认证,且没有外部依赖。
这些功能今天已在美国东部(弗吉尼亚北部)(us-east-1)、欧洲(爱尔兰)(eu-west-1)和亚太(东京)(ap-northeast-1)AWS 区域提供,用于 Amazon Bedrock AgentCore 上的网页搜索。
PRIMARY_SOURCE: https://aws.amazon.com/blogs/machine-learning/domain-and-publish-date-filters-for-web-search-on-agentcore
- #网页搜索
- #域名过滤
- #日期过滤
- #多租户
- #AgentCore


