为了顺利完成各项任务,AI Agents必须具备多种能力,包括能够调用各类工具、访问数据存储库、使用提示词模板以及与其他Agent协作。随着企业不断扩大AI项目规模,AI Agents面临将每个Agent与多种工具相连接的挑战,且这一挑战呈指数级增长,由此引发了M×N的集成难题,不仅大幅拖慢了开发进程,还让整个系统变得更加复杂。

尽管MCP(Model Context Protocol)和A2A(Agent2Agent)等协议已应运而生,可解决互操作性问题,但实施这些解决方案需要投入大量工程资源与精力。

具体而言,企业必须搭建MCP Servers、转换现有API、管理基础设施、构建智能工具发现机制,并实施一系列安全控制措施。而且,协议更新换代速度很快,新的主要版本会不断推出,要求企业长时间持续维护这些集成工作。

随着部署规模扩大到数百个Agent和数千个工具时,企业更加迫切需要一种更具可扩展性、更便于管理的解决方案。

推出Amazon Bedrock

AgentCore Gateway

亚马逊云科技近期推出的Amazon Bedrock AgentCore Gateway是一项全托管服务,将彻底革新企业连接AI Agents与工具及服务的方式。AgentCore Gateway可作为集中式工具服务器,提供一个统一接口,让Agent能够通过该接口查找、访问和调用工具。

AgentCore Gateway原生支持MCP,可实现agent-to-tool之间的无缝通信,同时将安全、基础设施和协议层面的复杂问题进行抽象化处理。该服务支持从API和Amazon Lambda函数零代码创建MCP工具,具备智能工具发现功能,内置入站和出站授权机制,还为MCP Servers提供了Serverless基础设施。

借助AgentCore Gateway,您可以专注于打造智能Agent体验,而无需操心工具与服务的连接管理问题。

AgentCore Gateway的工作流程如下图所示。

Amazon Bedrock

AgentCore Gateway核心功能

Amazon Bedrock AgentCore Gateway推出了一整套全面功能,彻底革新AI Agents的工具集成方式。其核心在于,AgentCore Gateway提供了强大且安全的API集成功能,可将现有的RESTful API转换为MCP Servers。

该集成支持OpenAPI规范和Smithy模型,因此企业能够将其企业级API无缝转换为与MCP兼容的工具。除了API集成外,AgentCore Gateway还内置对Amazon Lambda函数的支持功能,使开发者能够将其Serverless计算资源作为具有定义模式的工具进行连接。

AgentCore Gateway核心功能如下。

安全防护(Security Guard)

负责管理OAuth授权,确保只有合法用户和Agent能够访问工具与资源。后续章节将深入探讨安全相关内容。

协议转换(Translation)

能将Agent使用MCP等协议发出的请求,转换为API请求和Lambda函数调用,无需再为管理协议集成或版本支持而烦恼。

功能整合(Composition)

可将多个API、函数和工具整合为一个单一的MCP端点,方便Agent访问。

目标可扩展性(Target extensibility)

AgentCore Gateway是一个中央访问点,作为统一接口供AI Agents发现并使用工具。它负责处理MCP与API之间的身份验证、请求路由和协议转换。

每个Gateway可管理多个目标,目标代表您希望作为工具提供给AI Agents的后端服务或一组API,其可以是Amazon Lambda函数、OpenAPI 规范或Smithy模型。每个目标可公开多个工具,AgentCore Gateway会自动处理MCP与目标内置协议之间的转换。此外,AgentCore Gateway还支持可流式传输的HTTP传输。

基础设施管理器(Infrastructure Manager)

作为一项全托管服务,AgentCore Gateway免除了企业管理基础设施的负担。

它提供全面的基础设施,内置安全功能和强大的可观测性能力,团队无需再担心托管问题、扩展问题或底层基础设施的维护问题。随着需求增长,该服务会自动处理这些问题,并提供可靠性能和无缝扩展能力。

语义化工具选择(Semantic Tool Selection)

AgentCore Gateway的另一项核心功能则是智能工具发现。随着企业工具数量增至成百上千,找到合适工具来完成任务对于AI Agents而言则愈发困难。

此外,当Agents要同时面对过多工具时,可能会出现“工具过载”现象,导致出现幻觉、工具选择不当或执行路径效率低下等问题,严重影响性能。

为此,AgentCore Gateway通过提供一个名为“x_amz_bedrock_agentcore_search”的特殊内置工具来解决这些挑战,该工具可使用标准的MCP工具和调用操作来进行访问。

安全与身份验证

AgentCore Gateway采用了复杂精细的双向安全架构,既能处理对AgentCore Gateway自身的入站访问安全,也能保障对目标服务的出站连接安全。

对于入站请求,AgentCore Gateway遵循MCP授权规范,采用基于OAuth的授权机制来验证并授权传入的工具调用。AgentCore Gateway充当OAuth资源服务器,意味着它可以与企业可能使用的OAuth身份提供商配合工作,包括Amazon Cognito、Okta、Auth0或者企业自有的OAuth提供商。

创建AgentCore Gateway时,您可以指定多个已批准的客户端ID和受众,从而精细控制哪些应用程序和Ageent可以访问您的工具。AgentCore Gateway会对照您的OAuth提供商验证入站请求,支持授权码模式(3LO)和客户端凭证模式(2LO,通常用于service-to-service的通信)。

出站安全模型同样灵活,但会因目标类型不同而有所差异:

对于Amazon Lambda和Smithy模型目标,AgentCore Gateway采用基于Amazon IAM的授权机制。AgentCore Gateway会担任您所配置的Amazon IAM角色,该角色可为每个目标服务设置精确的权限范围,这一机制能与现有的亚马逊云科技安全实践和Amazon IAM策略无缝集成。

对于OpenAPI目标(即RESTful API),AgentCore Gateway支持以下两种身份验证方法:

1.API密钥:您可以配置将密钥通过自定义参数名称,置于请求头或查询参数中发送。

2.适用于2LO的OAuth token:对于向目标API发起的出站OAuth身份验证,AgentCore Gateway支持2LO的客户端凭证授权模式,可在无需用户交互的情况下,实现安全的machine-to-machine通信。

凭证通过AgentCore Identity的资源凭证提供程序进行安全管理。每个目标仅关联一种身份验证配置,有助于明确安全边界并留下清晰的审计轨迹。

AgentCore Identity负责处理复杂的安全机制,同时为开发者提供简洁易用的接口。您只需在设置过程中配置一次安全设置,此后AgentCore Gateway便会负责token验证、出站token缓存(通过AgentCore Identity实现)以及后续的安全通信。

开始使用Amazon Bedrock

AgentCore Gateway

您可以通过以下多种界面创建AgentCore Gateway并添加目标:

  • Amazon Web Services SDK for Python(Boto3)

  • Amazon Web Services Management Console

  • Amazon Web Services CLI

  • 用于快速简便设置的AgentCore入门工具包

以下实际示例和代码片段,展示了设置和使用Amazon Bedrock AgentCore Gateway的流程。

创建Gateway

要创建Gateway,可使用Amazon Web Services Boto3,并借助Amazon Cognito实现入站身份验证。

gateway_client = boto3.client('bedrock-agentcore-control')auth_config = {"customJWTAuthorizer": {         "allowedClients": '<cognito_client_id>‘, # Client MUST match with the ClientId configured in Cognito.        "discoveryUrl": '<cognito_oauth_discovery_url>'}}create_response = gateway_client.create_gateway(name='DemoGateway',    roleArn = '<IAM Role>' # The IAM Role must have permissions to create/list/get/delete Gateway     protocolType='MCP',    authorizerType='CUSTOM_JWT',    authorizerConfiguration=auth_config,     description='Demo AgentCore Gateway')# Values with < > needs to be replaced with real values

左右滑动查看完整示意

您可参阅Amazon Bedrock AgentCore控制平面和数据平面API的相关信息。

控制平面API:

https://docs.aws.amazon.com/bedrock-agentcore-control/latest/APIReference/Welcome.html

数据平面API:

https://docs.aws.amazon.com/Bedrock-AgentCore/latest/APIReference/Welcome.html

创建Gateway目标

使用OpenAPI规范,为现有API创建一个以API密钥作为出站身份验证方式的目标。

# Create outbound credentials provider in AgentCore Identityacps  boto3client(service_name"bedrock-agentcore-control")
responseacpscreate_api_key_credential_provider(name"APIKey",apiKey"<your secret API key")
credentialProviderARN  response['credentialProviderArn']
# Specify OpenAPI spec file via S3 orinlineopenapi_s3_target_config = {"mcp": {"openApiSchema": {"s3": {"uri": openapi_s3_uri              }}}}# API Key credentials provider configurationapi_key_credential_config = [{"credentialProviderType" : "API_KEY",         "credentialProvider": {"apiKeyCredentialProvider": {"credentialParameterName": "api_key", # Replace this with the name of the api key name expected by the respective API provider. For passing token in the header, use "Authorization""providerArn": credentialProviderARN,"credentialLocation":"QUERY_PARAMETER", # Location of api key. Possible values are "HEADER"and"QUERY_PARAMETER".                    #"credentialPrefix": " " # Prefix for the token. Valid values are "Basic". Applies only for tokens.            }}}  ]
# Add the OpenAPI target to the gatewaytargetname='DemoOpenAPITarget'response = gateway_client.create_gateway_target(    gatewayIdentifier=gatewayID,    name=targetname,    description='OpenAPI Target with S3Uri using SDK',    targetConfiguration=openapi_s3_target_config,    credentialProviderConfigurations=api_key_credential_config)

左右滑动查看完整示意

为Lambda函数创建一个目标。

# Define the lambda target with tool schema. Replace the AWS Lambda function ARN belowlambda_target_config = {"mcp": {"lambda": {"lambdaArn": "<Your AWS Lambda function ARN>","toolSchema": {"inlinePayload": [{"name": "get_order_tool","description": "tool to get the order","inputSchema": {"type": "object","properties": {"orderId": {"type": "string"}},"required": ["orderId"]}}]}}}}
# Create outbound auth config. For AWS Lambda function, its always IAM.credential_config = [     {"credentialProviderType" : "GATEWAY_IAM_ROLE"}]
# Add AWS Lambda target to the gatewaytargetname='LambdaUsingSDK'response = gateway_client.create_gateway_target(    gatewayIdentifier=gatewayID,    name=targetname,    description='Lambda Target using SDK',    targetConfiguration=lambda_target_config,    credentialProviderConfigurations=credential_config)

左右滑动查看完整示意

将Gateway与不同的Agent框架配合使用

将Gateway与Strands Agents集成方案配合使用。

from strands import Agentimport logging
def create_streamable_http_transport():returnstreamablehttp_client(gatewayURL,headers={"Authorization": f"Bearer {token}"})
client = MCPClient(create_streamable_http_transport)with client:# Call the listTools     tools = client.list_tools_sync()# Create an Agent with the model and tools    agent = Agent(model=yourmodel,tools=tools) ## you can replace with any model you like# Invoke the agent with the sample prompt. This will only invoke  MCP listTools and retrieve the list of tools the LLM has access to. The below does not actually call any tool.    agent("Hi , can you list all tools available to you")# Invoke the agent with sample prompt, invoke the tool and display the response    agent("Check the order status for order id 123 and show me the exact response from the tool")

左右滑动查看完整示意

将Gateway与LangChain集成方案配合使用。

from langchain_mcp_adapters.client import MultiServerMCPClientfrom langgraph.prebuilt import create_react_agentfrom langchain.chat_models import init_chat_model
client = MultiServerMCPClient({"healthcare": {"url": gateway_endpoint,"transport": "streamable_http","headers":{"Authorization": f"Bearer {jwt_token}"}}}) agent = create_react_agent(        LLM,         tools,         prompt=systemPrompt )

左右滑动查看完整示意

实现语义搜索

创建Gateway时,您可选择启用语义搜索功能。

启用后,系统会自动配置一个名为x_amz_bedrock_agentcore_search的强大内置工具,该工具支持通过自然语言查询实现智能工具发现。您可以使用该搜索工具的输出结果替代MCP的列表操作,以实现可扩展且高效的工具发现。

下图展示了如何使用MCP搜索工具。

请使用以下代码,来启用语义搜索功能。

# Enable semantic search of tools    search_config = {"mcp": {"searchType": "SEMANTIC", "supportedVersions": ["2025-03-26"]}}# Create the gateway    response = agentcore_client.create_gateway(        name=gateway_name,        roleArn=gateway_role_arn,        authorizerType="CUSTOM_JWT",        description=gateway_desc,        protocolType="MCP",        authorizerConfiguration=auth_config,        protocolConfiguration=search_config,)def tool_search(gateway_endpoint, jwt_token, query):    toolParams = {"name": "x_amz_bedrock_agentcore_search","arguments": {"query": query},}    toolResp = invoke_gateway_tool(        gateway_endpoint=gateway_endpoint, jwt_token=jwt_token, tool_params=toolParams    )    tools = toolResp["result"]["structuredContent"]["tools"]return tools

左右滑动查看完整示意

您可访问amazon-bedrock-agentcore-samples GitHub代码库中的语义搜索教程,查看完整代码示例。

amazon-bedrock-agentcore-samples GitHub代码库:

https://github.com/awslabs/amazon-bedrock-agentcore-samples/

利用监控与可观测性手段

评估Gateway性能

AgentCore Gateway通过与Amazon CloudWatch和Amazon CloudTrail集成,提供可观测性功能,可对您的工具集成进行详细监控和故障排查。

其可观测性功能具备详细指标,涵盖了Gateway操作的多个维度,具体包括:

1.使用情况指标:

  • TargetType

  • IngressAuthType

  • EgressAuthType

  • RequestsPerSession

2.调用指标:

  • Invocations

  • ConcurrentExecutions

  • Sessions

3.性能指标:

  • Latency

  • Duration

  • TargetExecutionTime

4.错误率:

  • Throttles

  • SystemErrors

  • UserErrors

性能指标可采用多种统计方法(包括平均值、最小值、最大值、p50、p90、p99)进行分析,并标注相关维度(包括操作、资源和名称),以便进行精细分析。

在操作日志记录方面,AgentCore Gateway与Amazon CloudTrail集成,可捕获管理事件和数据事件,提供完整的API交互审计跟踪。

这些指标既可通过Amazon Bedrock AgentCore控制台访问,也可通过Amazon CloudWatch控制台访问,用户可在其中创建自定义仪表盘、设置自动警报并进行详细的性能分析。

最佳实践

AgentCore Gateway通过exceptionLevel属性,提供了一种增强的调试选项,该选项可在创建Gateway时启用,或按照以下代码示例进行更新。

create_response = gateway_client.create_gateway(name='DemoGateway',    roleArn = '<IAM Role>' # The IAM Role must have permissions to create/list/get/delete Gateway     protocolType='MCP',    authorizerType='CUSTOM_JWT',    authorizerConfiguration=auth_config,     description='Demo AgentCore Gateway',    exceptionLevel="DEBUG"   # Debug mode for granular error messages)

左右滑动查看完整示意

启用该功能后,在Gateway测试期间,它会在内容文本块(isError:true)中提供更细致的错误信息,有助于更快进行故障排查和集成。

在为Gateway编写文档并提取Open API时,应注重使用清晰、自然的语言描述,以阐释实际应用场景。对于复杂的数据结构,需包含详细的字段说明、验证规则和示例,同时保持全文术语的一致性。同时,为实现最佳的工具发现效果,应在描述中自然融入相关业务领域的关键词,并说明每个API的适用场景。最后,需测试语义搜索的有效性,确保工具可通过自然语言查询被发现。

随着API的迭代更新,定期审查和更新文档对于保持文档质量至关重要。从大规模规范中提取API时,需确定Agent任务所需的核心功能,保持组件间的语义关系,并保留安全定义。

系统化的提取流程为:先审阅完整规范,将Agent用例映射到特定端点,提取相关路径和模式并保持依赖关系,最后验证提取的规范。

以下是将API分组到Gateway目标中的最佳实践:

  • 从用例出发,根据Agent应用的业务领域对MCP工具进行分组,类似于适用于微服务范式的领域驱动设计原则。

  • 每个Gateway目标只能附加一个用于出站授权的资源凭证提供程序,需根据出站授权器对工具进行分组。

  • 根据API类型(如OpenAPI、Smithy或Amazon Lambda)对API进行分组,以此作为连接其他企业API的桥梁。

在将工具接入Gateway时,企业应遵循结构化流程,其中需包含安全性和漏洞检查环节。企业还应建立审核流程,对API规范进行扫描以排查潜在安全风险,确保采用恰当的身份验证机制,并验证数据处理实践的合规性。

对于runtime工具发现,可利用Gateway的语义搜索功能;同时,针对关键工作流程,还可考虑在设计阶段进行agent-tool映射,以确保行为可预测。

为工具元数据添加详细描述、使用示例和性能特征等信息,可提升工具的可发现性,并有助于Agent选择合适工具。

为确保企业范围内的数据一致性,可将Gateway与集中式工具注册中心集成,将其作为唯一可信数据源。这可通过使用开源解决方案(如MCP注册中心发布工具)来实现,该工具可将MCP Server详细信息发布至MCP注册中心。定期将Gateway的工具库与该中央注册中心同步,以确保在整个AI环境中工具的可用性保持最新且一致。

这些做法有助于在Gateway内维护一个安全、有序且高效可发现的工具解决方案,促进Agent与工具之间的无缝交互,同时可与企业治理标准保持一致。

客户证言

作为医疗科技领域的领军企业,Innovaccer公司分享了其使用AgentCore Gateway的体验。

AI在医疗行业蕴含巨大发展潜力,要想充分释放这种潜力,筑牢基础是关键所在。正因如此,我们选择基于Amazon Bedrock AgentCore Gateway来构建HMCP(Healthcare Model Context Protocol)。该服务带来了颠覆性变革,能够自动将现有的API转化为符合MCP标准的工具,而且随着我们业务规模的不断扩大,它还能无缝扩展。AgentCore Gateway为我们提供了所需的安全、灵活的基础架构,以确保AI Agents能够安全合规地与医疗数据、工具以及工作流程进行交互。通过此次合作,我们正以信任、合规以及实际影响力为核心要素,加速推动AI领域的创新发展。

——Abhinav Shashank

Innovaccer CEO兼联合创始人

总结

Amazon Bedrock AgentCore Gateway是企业级AI Agents开发领域的一项重大突破,它为工具集成提供了全托管、安全且可扩展的解决方案,使企业能够在确保企业级安全与合规管控的前提下,加速推进AI项目落地。

作为Amazon Bedrock AgentCore的核心模块之一,Gateway可与Runtime、Identity、Code Interpreter、Memory、Browser及Observability等其他AgentCore功能模块无缝协作,共同构建起一个全面支持AI Agents应用开发与规模化部署的完整生态体系。

如需获取更详细的信息和高级配置说明,请参阅GitHub上的代码示例、《Amazon Bedrock AgentCore Gateway开发者指南》以及Amazon AgentCore Gateway定价信息。

GitHub上的代码示例:

https://github.com/awslabs/amazon-bedrock-agentcore-samples/tree/main/01-tutorials/02-AgentCore-gateway

《Amazon Bedrock AgentCore Gateway开发者指南》

https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/gateway.html

Amazon AgentCore Gateway定价信息:

https://aws.amazon.com/bedrock/agentcore/pricing/

五折认证,一次不过,免费重考,并享受官方备考服务。加入AWS AI/ML认证挑战,考取AWS AI认证为您的未来提供动力!

本篇作者

Dhawal Patel

亚马逊云科技首席机器学习架构师。他曾与各类规模企业合作,解决分布式计算和人工智能领域的相关问题。Dhawal专注于深度学习,涵盖自然语言处理(NLP)和计算机视觉等领域,致力于帮助客户在Amazon SageMaker上实现高性能的模型推理。

Mike Liu

亚马逊云科技首席产品经理,专注于Agentic AI与基础模型开发领域的交叉工作。他曾主导制定Amazon Bedrock Agents的产品路线图,目前正协助客户通过定制Amazon Nova模型来实现卓越性能。

Kartik Rustagi

Amazon AI部门的软件开发经理。他和团队专注于提升由Amazon Lex驱动的聊天机器人的对话能力。

星标不迷路,开发更极速!

关注后记得星标「亚马逊云开发者」

听说,点完下面4个按钮

就不会碰到bug了!

点击阅读原文查看博客!获得更详细内容!

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐