人工智能
Amazon Bedrock AgentCore 上的 Web Answer 入门指南今天,我们宣布 Amazon Bedrock AgentCore 上的 Web Answer 正式可用。借助 Web Answer,智能体构建者只需一次工具调用,即可获得针对自然语言问题的、带来源引用的合成答案。他们不再需要自行构建搜索、检索、合成和引用提取流水线。
如果你构建过需要根据当前网络来源回答问题的智能体,你就了解这一模式:调用搜索 API,判断哪些结果可信,检索并清理页面内容,提示模型进行合成,并通过工程手段提取引用,使输出能够追溯到来源。每一步都是你需要维护的代码,每一步也都是可能出错的环节:证据不足时产生幻觉,索引变动时内容过时,以及当论断与其来源发生偏离时归属关系断裂。
Web Answer 将整个流水线简化为一次请求。你发送一个问题,几秒钟内就能收到带引用的答案。在本文中,我们将说明 Web Answer 的功能,将其与 AgentCore 上的 Web Search 进行比较,展示其工作原理和返回内容,并演示如何将 Web Answer 添加到网关并从智能体中调用它。
Web Answer 的功能
图 1:从智能体经网关到 Web Answer 再返回的请求流程
你的智能体将问题发送到你的 AgentCore Gateway,这是 Amazon Bedrock AgentCore 的一项能力。网关使用 AWS Identity and Access Management(AWS IAM)或 JSON Web Token(JWT)对调用进行身份验证。网关使用其自身的服务角色调用 Web Answer,这是由 AWS 拥有的托管连接器。Web Answer 规划搜索、并行执行多次搜索,并读取关键页面以核实事实。当证据不足时,它会再次搜索。然后,它撰写答案,将每项论断与其来源 URL 关联。网关将答案及其引用作为 Model Context Protocol(MCP)工具结果返回给你的智能体。
Web Answer 是一项托管的 AgentCore Gateway 工具,它接收自然语言问题,并在数秒内返回基于当前网络来源合成的答案。以下是你将获得的内容:
- 一个有依据、带引用的答案,其中每项有依据的论断都对应一条引用,并在有来源 URL 时提供该 URL。
- 当前来源。Web Answer 会为每个问题运行新的搜索,并且其模型会被告知今天的日期,以便能够搜索最新信息。
- 智能体式搜索:Web Answer 会规划自己的搜索,并行运行多次搜索,读取页面以核实事实,并判断何时已有足够证据来作答。
- 负责任 AI 保障措施:Web Answer 在设计时采用了负责任 AI 保障措施,并经过相应测试。
图 2:演示视频,展示如何将 Web Answer 添加到 AgentCore Gateway,从设置到获得最终带引用的答案
它与 Web Search 有何不同
Web Answer 和 Web Search 工具都支持检索用例,但集成复杂度不同。分界线在于由谁运行模型:
- 网页搜索: 返回排序后的 URL、标题、摘要和元数据。你保留自己的模型并控制合成过程。当你希望对结果的处理方式拥有完全控制权时,请使用网页搜索。
- 网页回答: 为你运行模型、智能体式检索循环、合成和归因。你会得到一个完成且带引用的答案。当问题是更大智能体中的子任务,而你不希望为其拥有检索流水线时,请使用网页回答。
许多客户会同时使用两者。智能体可能会将网页搜索用于需要原始结果的广泛研究任务,并将网页回答用于需要快速、带引用答案的具体事实性问题。
设置并调用网页回答
网页回答是 AWS 拥有的连接器。你通过 ID 引用它,网关会处理工具架构、参数治理、端点解析以及向后端进行身份验证。在本演练中,你授予网关的服务角色调用网页回答的权限,添加一个网页回答目标,并从 Strands 智能体调用它。
入门
入门只需几分钟。网关管理员将 Web Answer 作为目标添加到现有的 AgentCore Gateway 上,随后该工具就会通过 MCP 向任何已连接的智能体显示, tools/list 并且 tools/call.
先决条件
- 一个具有 AgentCore Gateway 访问权限的 AWS 账户。
- 一个位于 us-east-1、使用 IAM(
AWS_IAM)入站身份验证的 AgentCore Gateway。要创建一个,请参阅 创建 Amazon Bedrock AgentCore Gateway ,见《开发者指南》。 - 具有以下权限的身份的 AWS 凭证:
bedrock-agentcore:InvokeGateway在网关上,以及您的智能体所用模型的 Amazon Bedrock 访问权限。 - Python 3.10 或更高版本,并安装所需软件包:
pip install boto3 strands-agents mcp mcp-proxy-for-aws
注意:执行这些步骤会创建产生费用的 AWS 资源。网关和 Web Answer 的调用均需计费。详情请参阅后面的“定价”部分,完成后请删除您创建的资源(参见“清理资源”)。
第 1 步:授予网关服务角色访问 Web Answer 的权限
网关使用其 服务角色 代表您执行操作。该角色的信任策略允许 bedrock-agentcore.amazonaws.com 承担该权限,且范围限定在你的账户内。对于 Web Answer,该角色需要:
bedrock-agentcore:InvokeWebAnswer来调用 Web Answer。Gateway 会在每次请求时根据 AWS 拥有的 ARN 校验此权限,arn:aws:bedrock-agentcore:us-east-1:aws:tool/web-answer.v1.
将该策略作为内联策略附加到服务角色:
import json
import boto3
iam = boto3.client("iam")
iam.put_role_policy(
RoleName="<gateway-service-role>",
PolicyName="WebAnswerGuide",
PolicyDocument=json.dumps({
"Version": "2012-10-17",
"Statement": [
{
"Sid": "InvokeWebAnswer",
"Effect": "Allow",
"Action": "bedrock-agentcore:InvokeWebAnswer",
"Resource": "arn:aws:bedrock-agentcore:us-east-1:aws:tool/web-answer.v1",
}
],
}),
)
该角色仅控制 Gateway 的出站调用。谁可以调用你的 Gateway 由其入站授权方决定。该角色也不需要 bedrock:InvokeModel:你的智能体的模型在你的智能体自身身份下运行。
第 2 步:创建 Web Answer 目标
将 Web Answer 添加为连接器目标。 connectorId 告诉 Gateway 要预置哪个托管集成:在本例中,是一个搜索网页并撰写带引用答案的智能体。
import boto3
gateway_client = boto3.client("bedrock-agentcore-control", region_name="us-east-1")
target_response = gateway_client.create_gateway_target(
name="web-answer-tool",
gatewayIdentifier=gateway_id,
targetConfiguration={
"mcp": {
"connector": {
"source": {"connectorId": "web-answer"},
"configurations": [{"name": "WebAnswer", "parameterValues": {}}],
}
}
},
credentialProviderConfigurations=[
{"credentialProviderType": "GATEWAY_IAM_ROLE"}
],
)
target_id = target_response["targetId"]
连接器的出站身份验证是自动的。使用 GATEWAY_IAM_ROLE时,Gateway 会使用第 1 步中的服务角色调用 Web Answer 后端,因此你无需为该工具创建或存储任何凭证。请等到 get_gateway_target 报告目标状态为 READY 后再调用它。
作为 Gateway 管理员,你还可以在目标上设置域过滤器。该过滤器适用于经过该目标的每一次调用。要将目标限制为一组域,请将 parameterValues 设置为 {"domainFilter": {"include": ["bis.org"], "exclude": ["unreliable-source.net"]}}.
第 3 步:从 Strands 智能体调用 Web Answer
你的智能体通过 Gateway 的 tools/list 并像调用任何其他 MCP 工具一样用 tools/call来调用它。这适用于 Strands Agents、LangChain、LangGraph、CrewAI 或任何其他兼容 MCP 的客户端。
from strands import Agent
from strands.models.bedrock import BedrockModel
from strands.tools.mcp import MCPClient
from mcp_proxy_for_aws.client import aws_iam_streamablehttp_client
gateway_url = "https://gateway-<id>.gateway.bedrock-agentcore.us-east-1.amazonaws.com/mcp"
mcp_client = MCPClient(lambda: aws_iam_streamablehttp_client(
endpoint=gateway_url,
aws_region="us-east-1",
aws_service="bedrock-agentcore",
aws_profile="<aws-profile-id>", # identity with bedrock-agentcore:InvokeGateway on the Gateway
))
model = BedrockModel(model_id="us.anthropic.claude-sonnet-5", max_tokens=1024)
with mcp_client:
tools = mcp_client.list_tools_sync() # Web Answer tool discovered from the Gateway
agent = Agent(model=model, tools=tools)
result = agent("What are the Basel III minimum requirements for Tier 1 capital?")
print(result.message)
当问题需要最新信息时,你的智能体会调用 Web Answer 工具(web-answer-tool___WebAnswer)。Web Answer 会执行智能体式搜索,并返回带有引用的完整答案。
除了问题之外,Web Answer 工具还接受一些可选参数,你的智能体可以在每次调用时设置这些参数:用于包含或排除站点的域过滤器、发布日期范围,以及用于本地化结果的国家/地区。智能体的域过滤器会与目标的过滤器合并。智能体可以排除更多域,或将结果限制在目标所包含的某些域内,但不能添加被目标过滤器阻止的域。
响应格式
Web Answer 返回一个 MCP 工具结果,其中同时包含 content 和 structuredContent 字段。答案是带有内联引用标记(如 [1])的 markdown 文本,structuredContent.answer 携带相同的文本以及结构化的引用列表:
{
"content": [
{
"type": "text",
"text": "Under Basel III, banks must hold Common Equity Tier 1 capital of at least 4.5% of risk-weighted assets [[1](https://www.bis.org/...)]..."
}
],
"structuredContent": {
"answer": [
{
"text": "Under Basel III, banks must hold Common Equity Tier 1 capital of at least 4.5% of risk-weighted assets [[1](https://www.bis.org/...)]...",
"citations": [
{ "domain": "bis.org", "url": "https://www.bis.org/..." }
]
}
]
},
"isError": false,
"_meta": {
"latencyMs": 5210
}
}
structuredContent.answer 通常包含单个块。每个引用都带有来源 URL,并在可用时带有域名。
清理资源
不再需要 Web Answer 目标时,将其删除:
gateway_client.delete_gateway_target(gatewayIdentifier=gateway_id, targetId=target_id)
如果你仅为本次演练创建了 Gateway,请先删除其目标,然后删除 Gateway(delete_gateway),再删除服务角色及其策略。除这些资源外,AWS 侧不存在持久性基础设施。删除这些资源后,你将不再产生费用。
内置企业级控制
Web Answer 继承与其他 AgentCore 工具相同的企业级控制:
- Gateway 身份验证。 无需为 Web Answer 单独配置、轮换或管理 API 密钥。调用方使用你配置的入站方法向网关进行身份验证,例如 AWS IAM(SigV4)或来自身份提供商的 JSON Web Token。随后,网关使用其自身的服务角色调用 Web Answer,该角色需要具备以下
bedrock-agentcore:InvokeWebAnswer权限。 - VPC 和 AWS PrivateLink。 你的智能体可以通过接口虚拟私有云(VPC)端点调用网关(
com.amazonaws.us-east-1.bedrock-agentcore.gateway),因此流量不会经过公共互联网。 - 零数据外泄。 你的查询和结果都保留在你的 AWS 环境中。
- Amazon CloudWatch 指标。 运营指标从首次调用起即发布到 CloudWatch。
- 按账户限流。 自发布起即强制执行,在美国东部(弗吉尼亚北部)(us-east-1)区域,每个账户每秒 10 笔事务。如需申请提高限额,请联系 AWS Support。
- 管理员设定的策略边界。 网关管理员在设置目标时设定域过滤边界。智能体可以在每次调用时收窄过滤边界,但不能放宽。
- 查询始终在 AWS 内进行。 Web Answer 搜索由 Amazon 运营的网页索引和 Amazon 知识图谱,不会将你的问题发送给第三方搜索引擎或外部网站。
使用场景
Web Answer 帮助智能体检索当前且有引用的信息,以支持一系列知识密集型工作流。示例场景包括:
- 金融服务。 合规问答智能体回答有关合规要求、市场法规和政策变化的问题,每个答案都必须追溯到权威来源。
- 医疗健康。 临床支持智能体将回答建立在网络上发布的当前医学文献和治疗指南之上。
- 客户服务。 支持智能体实时回答产品和政策问题,在这种情况下,十个排序链接并无用处,而带引用的答案才有用。
- 法律与合规。 研究助理回答有关判例法、监管申报文件和政策解释的问题,并提供可审计的引用。
- 企业知识工作者。 内部副驾驶,可基于当前公开信息回答问题,无需员工自行构建搜索与综合工作流。
可用性
Web Answer 已在美国东部(弗吉尼亚北部)(us-east-1)区域可用,更多 AWS 区域即将推出。
定价
Amazon Bedrock AgentCore 上的 Web Answer 定价为每 1,000 次工具调用 10 美元。
结论
在这篇博文中,我们展示了 Web Answer 如何通过智能体式搜索为你的智能体提供当前且有引用的答案,而无需你构建或维护任何搜索流水线。我们为 Gateway 服务角色授予了访问 Web Answer 的权限,添加了 Web Answer 目标,从 Strands 智能体调用它,并从响应中读取答案及其引用。当你希望自己的模型对原始结果进行推理时,请使用 AgentCore 上的 Web Search;当你的智能体需要一份完成且带引用的答案时,请使用 Web Answer。
要开始使用,请参阅:
- Amazon Bedrock AgentCore 文档中的 Web Answer
- Web Answer 结构化输出架构
- 将 Web Answer 添加到 Amazon Bedrock AgentCore Gateway
- 支持的区域