← 返回信息流

精选AWS AI Blog新闻

AgentCore 网络搜索新增运行时域名和发布日期过滤

aws.amazon.com作者:Gaurav Deshmukh产品行业AI评分:70/100

亚马逊云科技宣布,Amazon Bedrock AgentCore 的 Web Search 连接器 1.2.0 版本新增运行时域名和发布日期过滤功能,允许开发者在每次调用时指定允许或禁止的域名及日期范围,且由服务端强制执行。该功能与管理员级策略结合,形成分层过滤模型,确保企业治理。同时,Web Search 扩展到欧洲(爱尔兰)和亚太(东京)区域。

当AI代理代表客户使用Web Search来为答案提供依据时,该代理背后的组织需要域名和日期过滤器,以控制代理可参考的来源以及这些来源必须保持多新。金融服务代理不应基于未经审核的博客来提供答案。当用户询问当前库存和价格可用性时,产品信息代理不应引用三年前的定价或库存数据,因为库存水平和价格变化迅速。

今天,我们宣布在Amazon Bedrock AgentCore上为Web Search推出运行时域名和发布日期过滤功能。AgentCore是一个平台,可用任何框架或模型大规模构建、连接和优化代理。此功能作为web-search连接器1.2.0版本的一部分提供。这些功能让开发人员能够在每次调用时控制代理可以搜索哪些Web域名,以及结果必须落在哪个发布日期窗口内,且全部在服务端强制执行。无需外部编排。与现有的管理员级域名策略结合使用时,组织可获得分层过滤模型,既强制执行企业治理,又允许单个API调用根据每个请求动态缩小范围。

除运行时过滤外,此版本还将Web Search的可用性扩展至两个新的AWS区域:eu-west-1(都柏林)和ap-northeast-1(东京)。欧洲和亚太地区的客户现在可以从更靠近其工作负载的区域端点调用Web Search,从而减少延迟,并为有数据就近性要求的组织提供基于欧盟的入口点。AgentCore采用零出口架构,搜索查询始终保留在AWS内部。此次区域扩展为这些地区的受监管客户提供了一条路径,使其无需跨大西洋路由流量即可构建有依据的代理。

在本文中,我们将介绍什么是运行时过滤、为何重要、管理员加运行时分层模型如何工作、如何开始使用新的API参数,以及区域可用性对您的工作负载意味着什么。

连接器1.2.0版本的新增功能

  1. 运行时域名过滤

在每次tools/call调用时传入包含(允许列表)或排除(拒绝列表)的域名列表。这提供了对代理可参考来源的按请求控制。

字段描述
filters.domainFilter.include返回来自这些域名的结果
filters.domainFilter.exclude抑制来自这些域名的结果

每个列表最多支持100个域名,独立计数。

  1. 发布日期过滤
字段描述
filters.publishedDateFilter.from最早发布日期(含)
filters.publishedDateFilter.to最晚发布日期(含)

两个过滤器均为可选,按请求应用。省略它们则保留现有行为,即所有已索引内容均符合条件。

为何运行时过滤很重要

  1. 按任务限制来源:分析监管更新的合规代理应仅搜索.gov域名和经批准的发布者,而非开放网络。
  2. 时间范围限定:总结“本周财报电话会议”的市场情报代理绝不应显示前几个季度的结果,即使它们在查询中排名很高。
  3. 调用时动态允许/拒绝:服务不同客户的多租户平台可能需要对每个请求应用不同的域名策略,而无需为每个租户创建单独的目标。
  4. 内容新鲜度保证:回答“最新版本中有什么变化”的客户支持代理应仅返回过去7天内发布的文档。

运行时过滤通过将控制权移入API调用本身来满足这些需求。

工作原理:请求流程

下图展示了过滤搜索请求的生命周期:您的代理发送带有查询和过滤器的tools/call,Gateway将您的运行时过滤器与管理员级策略合并,对Web索引执行过滤后的查询,对原始结果执行合规性检查,并仅返回经过验证的结果供您的代理作为回答依据。

Filtered Web Search request flow: the agent sends a tools/call with query and filters, the Gateway merges runtime filte…
Filtered Web Search request flow: the agent sends a tools/call with query and filters, the Gateway merges runtime filte…

整个生命周期均在服务端完成。没有客户端过滤循环,没有后处理,也没有额外的往返。

分层过滤模型:管理员 + 运行时

本次发布的一个关键设计原则是,运行时过滤器只能缩小而不能扩大管理员设定的范围。这确保了无论运行时调用者请求什么,企业策略始终得到强制执行。管理员级域名列表在连接器资源创建期间设置。

合并逻辑

下图说明了管理员级和运行时过滤器列表如何组合:包含列表通过交集合并(仅两个列表中都存在的域名保留),而排除列表通过并集合并(在任一级别被阻止的域名始终保持阻止)。请注意,d.com从有效允许列表中被删除,因为它仅出现在运行时列表中,而不在管理员策略中。

Merge logic: admin and runtime include lists combine by intersection while exclude lists combine by union, so d.com is…
Merge logic: admin and runtime include lists combine by intersection while exclude lists combine by union, so d.com is…

域名包含(允许列表):有效允许列表是管理员列表与运行时列表的交集。如果管理员允许 [a.com, b.com, c.com],而运行时调用包含 [b.com, c.com, d.com],则仅搜索 b.com 和 c.com。域名 d.com 不在管理员域名列表内,会被静默丢弃。

域名排除(拒绝列表):有效拒绝列表是管理员列表与运行时列表的并集。如果管理员屏蔽了 [x.com],而运行时调用排除了 [y.com],则两者均被屏蔽。

注意:运行时调用方无法搜索管理员未允许的域名,也无法解除管理员已拒绝的域名。运行时过滤器只能进一步缩小搜索范围。

过滤器合规行为

当过滤器处于启用状态时,Web Search 优先保证精确度而非召回率。无法根据过滤器条件验证的结果会被排除,而不会未经筛选直接返回:

  1. 域名过滤器启用时:无法识别域名的结果将被排除在考虑范围之外。
  2. 日期过滤器启用时:无法识别发布日期的结果将被排除。

启用过滤器后,您获得的结果可能会减少,但每个返回的结果都满足您指定的过滤条件。

配额限制

共有四个列表:管理员包含、管理员排除、运行时包含和运行时排除。每个列表独立支持最多 100 个条目。有关完整配置详情和组合规则,请参阅《开发者指南》中的“配置域名过滤”。

快速入门

Web Search 通过 AgentCore Gateway 提供,这是 Amazon Bedrock AgentCore 的一项功能,提供与模型上下文协议(MCP)兼容的托管端点,用于将代理连接到工具。请按照以下步骤为您的 Web Search 目标启用运行时域名和日期过滤。

前提条件

  1. 一个 Amazon Bedrock AgentCore Gateway,其 Web Search 目标固定到连接器版本 1.2.0 或更高版本。
  2. AWS Identity and Access Management(IAM)权限:您的调用代理或应用程序需要在网关 Amazon Resource Name(ARN)上具有 bedrock-agentcore:InvokeGateway 权限,并且网关的服务角色需要具有 bedrock-agentcore:InvokeWebSearch 权限。有关完整策略,请参阅“配置网关服务角色”。
  3. 最新的 AWS SDK(Python、JavaScript、Java、.NET、Go、Ruby 或 PHP)。

步骤 1:创建版本为 1.2.0 的 Web Search 目标

使用 AWS SDK for Python(Boto3)创建(或更新)一个固定到版本 1.2.0 的目标,并附带管理员级别的域名策略。如果您已有版本为 1.1.0 的 Web Search 目标,可以使用 UpdateGatewayTarget 将其固定到版本 1.2.0,而无需创建新目标。有关其他设置选项(包括 AgentCore CLI 和控制台),请参阅“设置 Web Search 工具”。

import boto3

gateway_client = boto3.client("bedrock-agentcore-control", region_name="us-east-1")

# 创建固定到版本 1.2.0 并带有管理员级域名过滤的 Web Search 目标
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 发现的名称,其模式为 ___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 Gateway 创建的 MCP 客户端在运行时应用新过滤器。用于创建 MCP 客户端以调用工具的代码示例。

示例 1:具有监管引用要求的临床研究助手

你正在为一家制药公司的法规事务团队构建研究助手。公司政策要求每个回答只能引用 FDA、NIH 或 ClinicalTrials.gov。引用健康博客的内容不仅是质量问题,更是合规违规,可能在审计中被发现。代理需要在每次搜索中强制执行此要求,无论模型构造什么样的查询。

import json

# 制药研究助手:仅限批准的监管来源
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"]
                }
            }
        }
    }
})

# 通过你的 MCP 客户端发送(SigV4 签名或 OAuth 认证)
response = mcp_client.send(compliance_request)
results = json.loads(response)

# 每个结果都来自 fda.gov、nih.gov 或 clinicaltrials.gov
for result in results["result"]["content"]:
    print(result["text"])

你的代理引用的每个结果现在都可验证地来自批准的监管来源。即使 WebMD 的文章在该查询中排名第一,它也永远不会进入模型的上下文窗口。

示例 2:股票更新代理,仅限本周报道

你的交易台运行一个代理,在整个交易日内生成股票更新。问题在于:当交易员问“半导体股票最新动态是什么?”时,代理过去会展示一篇上季度的高排名分析,而依据过时报道行动的交易员会亏钱。你需要每个结果都来自过去 7 天,没有例外。

from datetime import datetime, timedelta, timezone

# 计算 7 天窗口
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)仅限本季度的发布内容,因为在当前季度的分析中引用上季度的数字是重大错误。你需要在每次搜索中同时强制执行这两个约束。

import json
from datetime import datetime, timezone

# 当前 UTC 时间
now = datetime.now(timezone.utc)

# 本季度开始:1 月 1 日、4 月 1 日、7 月 1 日或 10 月 1 日
quarter_start = datetime(now.year, ((now.month - 1) // 3) * 3 + 1, 1, tzinfo=timezone.utc)

ir_compliance_request = json.dumps({
    "jsonrpc": "2.0",
    "id": "req-003",
    "method": "tools/call",
    "params": {
        "name": "WebSearch",
        "arguments": {
            "query": "Q3 earnings results and management discussion",
            "maxResults": 20,
            "filters": {
                "domainFilter": {
                    "include": ["sec.gov", "investor.ford.com", "investor.apple.com"]
                },
                "publishedDateFilter": {
                    "from": quarter_start.strftime("%Y-%m-%dT%H:%M:%SZ"),
                    "to": now.strftime("%Y-%m-%dT%H:%M:%SZ")
                }
            }
        }
    }
})

response = mcp_client.send(ir_compliance_request)

两个过滤器同时生效。代理无法从 SEC 或官方投资者页面之外的任何来源引用内容,也无法引用本季度之前的任何内容。这两个约束在工具层面强制执行,而不是依赖模型提示词——因此即使模型生成了不完美的查询,合规性也不会受到影响。

IR 合规代理:仅限一手来源 + 当前季度

# IR 合规代理:仅限一手来源 + 当前季度
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平台

您运营一个面向医疗、法律和金融服务客户的研究代理SaaS平台。每个租户都有合同约定的来源策略。您的医疗客户《业务伙伴协议》(BAA)要求仅引用PubMed、CDC和经批准的医学研究数据库。您的法律客户坚持使用康奈尔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

# 每租户域名策略(来自您的配置数据库)
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):
    """为特定租户执行符合策略的网页搜索。"""
    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)

        # 代理的系统提示词指示其在每次WebSearch调用时传递这些过滤器
        system_prompt = f"""您是一名研究助手。使用WebSearch时,
请始终在工具调用中包含以下过滤器:

- domainFilter.include: {policy['include']}
- domainFilter.exclude: {policy['exclude']}
- publishedDateFilter.from: {date_from}

切勿在批准的域名之外进行搜索。"""

        result = agent(query, system_prompt=system_prompt)
        return result.message


# 使用示例
answer = search_for_tenant(
    "tenant-healthcare",
    "GLP-1药物最新的临床试验结果是什么?"
)

一个网关目标服务200个租户,每个租户都有自己的来源策略,在调用时动态执行。您的医疗租户的代理永远不会引用Reddit或WebMD,您的金融租户的代理永远不会引用博客文章,即使它们共享相同的基础设施。

重要提示: 基于系统提示词的过滤(如上所示)依赖于代理遵循指令。它不是硬性执行。对于硬性执行,请在目标级别配置允许的域名(管理员包含列表)。直接在tools/call负载中传递的运行时过滤器提供API级别的执行,模型无法绕过。

输入模式参考

连接器版本1.2.0中引入的filters对象在现有的query和maxResults字段之外,新增了domainFilter(包含/排除列表,每个最多100个域名)和publishedDateFilter(包含边界的ISO-8601 UTC时间范围)。有关完整的输入模式和逐字段参考,请参阅Amazon Bedrock AgentCore开发者指南中的输入模式。

可用性和零数据出口

运行时域名和日期过滤功能现已在以下区域推出,适用于 Amazon Bedrock AgentCore 上的 Web Search:美国东部(弗吉尼亚北部)(us-east-1)、欧洲(爱尔兰)(eu-west-1)和亚太地区(东京)(ap-northeast-1)。

Web Search 受益于 AgentCore 的零数据出口架构:搜索查询完全在 AWS 基础设施内处理。客户查询不会发送给第三方搜索引擎,也不会被路由到 AWS 之外。对于金融服务业、医疗保健业和政府等受监管行业的组织,这消除了整个类别的合规审查需求。

向后兼容性

  1. 无破坏性变更。1.2.0 版本是一个次要版本。新增字段是附加性的,filters 对象是可选的。不带过滤器的现有 API 调用继续与之前完全一致地工作。
  2. SDK 支持。适用于所有 AWS SDK(Python(Boto3)、JavaScript/TypeScript、Java、.NET、Go、Ruby 和 PHP SDK)、AWS 命令行界面(AWS CLI)和 AgentCore CLI。
  3. 控制台支持。AgentCore Web Search 目标的 AWS 控制台现在在连接器配置界面中同时显示包含和排除域名列表的输入项。

结论

运行时域名和发布日期过滤功能为在 Amazon Bedrock AgentCore Gateway 上进行构建的开发者提供了每次调用所需的精确度,使他们能够构建值得信赖且符合策略的代理,同时不牺牲托管式服务端搜索工具的简洁性。

无论您是将代理限制在经批准的监管来源、将结果范围限定在最近 24 小时内,还是动态应用特定于租户的策略,AgentCore 上的 Web Search 都能让您保持控制,同时实现零数据出口、IAM 原生身份验证,且无外部依赖。

这些功能现已在以下 AWS 区域推出,适用于 Amazon Bedrock AgentCore 上的 Web Search:美国东部(弗吉尼亚北部)(us-east-1)、欧洲(爱尔兰)(eu-west-1)和亚太地区(东京)(ap-northeast-1)。

立即开始使用:

  • Amazon Bedrock AgentCore 开发者指南中的 Web Search 过滤
  • Amazon Bedrock AgentCore 定价
  • AgentCore 上的 Web Search 产品页面

关于作者

阅读原文