利用 MCP 服务器增强 Amazon Bedrock Agents 的能力

一句话总结

本文介绍了如何利用 Amazon Bedrock Agents 和 MCP 协议,构建能够轻松连接 AWS 服务的 AI 智能体,实现对 AWS 消费的自然语言分析。

摘要

本文介绍了如何利用 Amazon Bedrock Agents 和模型上下文协议 (MCP) 构建 AI 智能体,以实现对 AWS 消费的自然语言分析和管理。通过 MCP,智能体可以标准化的方式访问各种 AWS 服务的数据源和工具,如 AWS 成本管理器、Amazon CloudWatch 和 Perplexity AI 等,从而降低集成成本、提高开发效率。文章详细阐述了 MCP 的客户端 - 服务器架构,并提供了一个实际用例,展示了如何通过 Inline Agent 创建一个能够理解用户意图并提供定制化 AWS 消费分析的智能体。Inline Agent 具有动态配置的特性,能够灵活地指定基础模型、指令和 Action Group。

AWS 机器学习博客:利用 MCP 服务器增强 Amazon Bedrock Agents 的能力

作者:Mark Roy, Amit Arora, Eashan Kaushik, Madhur Prashant, Andy Palmer

发布日期:2025年4月1日

关键词:Amazon Bedrock、Amazon Bedrock Agents、生成式 AI、MCP 协议


引言:AI 代理与 MCP 的结合

AI 代理通过与外部系统交互、执行复杂工作流并保持上下文连贯性,显著扩展了大型语言模型(LLM)的能力。Amazon Bedrock Agents 通过将基础模型(FMs)与数据源、应用程序和用户输入相结合,支持这一功能,通过 API 集成和知识库增强完成目标导向的任务。然而,将这些代理连接到多样化的企业系统往往面临开发瓶颈,每个集成都需要定制代码和持续维护。这种标准化难题减缓了在企业数字生态系统中提供上下文 AI 协助的速度。而模型上下文协议(Model Context Protocol, MCP)提供了一个标准化的解决方案,让 LLM 能够轻松连接数据源和工具。

如今,MCP 为代理提供了标准化的工具访问接口,任务范围不断扩展。未来,MCP 还可能通过市场提升代理和工具的可发现性,促进上下文共享和协作工作空间,推动行业内代理互操作性的扩展。

在本文中,我们将展示如何构建一个利用 MCP 访问数据源的 Amazon Bedrock 代理,以快速开发生成式 AI 应用。我们将通过一个示例,演示如何通过 MCP 连接 AWS Cost Explorer、Amazon CloudWatch 和 Perplexity AI,构建一个理解 AWS 支出的代理。你可以参考本文的代码,将代理连接到其他 MCP 服务器,解决你的业务挑战。我们展望一个未来,代理能够访问不断增长的 MCP 服务器列表,完成多样化的任务。


什么是 MCP 协议?

MCP 是由 Anthropic 开发的一个开源协议,旨在为 AI 模型提供连接任意数据源或工具的标准化方式。它采用客户端-服务器架构,开发者可以通过轻量级 MCP 服务器暴露数据,同时构建作为 MCP 客户端的 AI 应用。通过这种架构,MCP 赋予用户构建更强大、上下文感知的 AI 代理能力,轻松访问所需信息和工具。无论是外部系统、内部数据存储还是工具,MCP 都能以统一的方式对接。MCP 的客户端-服务器设计还允许代理在新功能上线时无缝获取更新,无需修改应用代码。

MCP 架构组件

MCP 的架构包括以下组件(见下图):

  • 主机(Host):需要通过 MCP 协议访问数据的程序或 AI 工具,如 Claude Desktop、IDE 或其他 AI 应用。
  • 客户端(Client):与服务器一对一连接的协议客户端。
  • 服务器(Server):通过标准化 MCP 暴露能力的轻量级程序。
  • 本地数据源:数据库、本地服务等,MCP 服务器可安全访问。
  • 远程服务:通过 API 连接的互联网外部系统。

![MCP 架构图](插图:MCP 客户端-服务器架构)


如何将 MCP 与 Amazon Bedrock Agents 结合使用

本文提供了一个分步指南,展示如何将你喜爱的 MCP 服务器与 Amazon Bedrock 代理连接,作为代理的动作组(Action Groups)完成用户任务。AgentInlineSDK 提供了一种简单的方式来创建内联代理,内置 MCP 客户端实现,直接访问 MCP 服务器提供的工具。

在创建代理时,开发者为每个需要通信的 MCP 服务器创建特定的 MCP 客户端。代理在执行用户任务时,会判断所需工具;若涉及 MCP 服务器工具,则通过对应客户端请求执行。由于 MCP 客户端封装了协议细节,用户代码无需直接处理 MCP 协议。

我们利用 Amazon Bedrock Agents 的 返回控制(Return Control) 能力协调这一流程。下图展示了代理处理请求的端到端流程,包括使用 Lambda 动作和 MCP 服务器工具的两种情况。

![代理工作流](插图:代理使用 MCP 服务器的工作流)


用例:变革 AWS 支出管理

为了展示 Amazon Bedrock 代理如何利用 MCP 服务器,我们以一个实际用例为例:理解和管理 AWS 支出。想象你提出问题:"帮我分析过去几周的 Bedrock 支出"或"上个月 EC2 在各区域和实例类型的成本是多少?"系统不仅返回原始数据,而是提供人性化的分析------详细分解、趋势分析、可视化图表或节省建议。这种洞察比单纯的数据更有价值。

我们将通过两个 MCP 服务器实现这一目标:

  1. 自定义构建的 MCP 服务器:从 AWS Cost Explorer 和 Amazon CloudWatch 获取支出数据。
  2. Perplexity AI 开源 MCP 服务器:解释和分析数据。

这两个服务器作为动作组添加到内联 Amazon Bedrock 代理中,创建一个能够变革 AWS 支出管理方式的 AI 代理。本文涉及的所有代码均可在 GitHub 仓库获取。

创建代理的步骤

我们使用内联代理(Inline Agents)动态定义和配置 Amazon Bedrock 代理。内联代理无需依赖预配置的控制平面设置,提供更大的灵活性和控制力,允许用户指定基础模型、指令、动作组、防护栏和知识库。

MCP 组件在 Amazon Bedrock 中的角色

  • 主机:Amazon Bedrock 内联代理,通过 RETURN_CONTROL 调用 MCP 客户端动作组。
  • 客户端:创建两个客户端,分别连接成本服务器和 Perplexity AI 服务器。
  • 服务器:本地运行的两个 MCP 服务器,通过标准输入/输出与应用通信。
  • 数据源:远程数据源包括 Cost Explorer API、CloudWatch Logs 和 Perplexity AI 搜索 API。

前提条件

  • AWS 账户
  • 熟悉基础模型和 Amazon Bedrock
  • 安装 AWS CLI 并配置凭证
  • Python 3.11 或更高版本
  • AWS CDK CLI
  • 启用 Anthropic Claude 3.5 Sonnet v2 模型访问
  • 设置 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 环境变量
  • 安装并运行 Docker(MCP 服务器以 Docker 守护进程运行)
  • 确保凭证具有 Cost Explorer 和 CloudWatch 的只读权限(使用 AWSBillingReadOnlyAccess 和 CloudWatchReadOnlyAccess),并获取 Perplexity API 密钥。

运行步骤

  1. 访问 InlineAgent GitHub 仓库并完成设置。

  2. 进入 examples/mcp/cost_explorer_agent 文件夹。

  3. 创建 .env 文件,填入以下内容:

    ini 复制代码
    AWS_ACCESS_KEY_ID=
    AWS_SECRET_ACCESS_KEY=
    AWS_REGION=
    BEDROCK_LOG_GROUP_NAME=
    PERPLEXITY_API_KEY=
  4. 构建 aws-cost-explorer-mcp 服务器:

    bash

    bash 复制代码
    git clone https://github.com/aarora79/aws-cost-explorer-mcp-server.git
    cd aws-cost-explorer-mcp-server/
    docker build -t aws-cost-explorer-mcp
  5. 运行 python main.py,代理将连接 MCP 服务器并生成支出分析。

输出示例

代理连接两个 MCP 服务器,依次使用工具生成分析和图表:

yaml 复制代码
Connected to server with tools: ['get_bedrock_daily_usage_stats', 'get_ec2_spend_last_day', ...]
Connected to server with tools: ['perplexity_ask']

Thought: 计划:
1. 用 Perplexity 询问 Amazon Bedrock
2. 获取过去 7 天的成本分解
3. 创建支出数据可视化

Tool use: perplexity_ask - "What is Amazon Bedrock?"
Tool use: get_detailed_breakdown_by_day - days[7]

Thought: 分析数据并生成柱状图...
Code interpreter output: aws_costs.png

Answer: Amazon Bedrock 是一个托管服务,提供单一 API 访问领先 AI 公司的基础模型。过去 7 天支出前五:
1. Amazon Bedrock: $1235
2. Amazon SageMaker: $567
3. EC2: $454
...

实现细节

创建 MCP 客户端

config.py 中定义两个 MCP 客户端的参数,使用 StdioServerParameters 配置标准输入/输出通信:

python

ini 复制代码
# 成本服务器参数
cost_server_params = StdioServerParameters(
    command="/usr/local/bin/docker",
    args=["run", "-i", "--rm", ..., "aws-cost-explorer-mcp:latest"],
    env={"AWS_ACCESS_KEY_ID": AWS_ACCESS_KEY_ID, ...}
)

# Perplexity 服务器参数
perplexity_server_params = StdioServerParameters(
    command="/usr/local/bin/docker",
    args=["run", "-i", "--rm", ..., "mcp/perplexity-ask"],
    env={"PERPLEXITY_API_KEY": PERPLEXITY_API_KEY}
)

main.py 中创建客户端:

python

ini 复制代码
cost_explorer_mcp_client = await MCPClient.create(server_params=cost_server_params)
perplexity_mcp_client = await MCPClient.create(server_params=perplexity_server_params)

配置动作组

main.py 中将两个 MCP 客户端组合成一个动作组:

python

ini 复制代码
cost_action_group = ActionGroup(
    name="CostActionGroup",
    mcp_clients=[cost_explorer_mcp_client, perplexity_mcp_client]
)

创建内联代理

指定基础模型、指令和动作组:

python

ini 复制代码
await InlineAgent(
    foundation_model="us.anthropic.claude-3-5-sonnet-20241022-v2:0",
    instruction="You are a friendly assistant for resolving user queries...",
    agent_name="cost_agent",
    action_groups=[cost_action_group, {"name": "CodeInterpreter", ...}]
).invoke(input_text="Help me understand my AWS spend")

结论

Anthropic 的 MCP 协议为模型连接数据源提供了标准化方式,与 Amazon Bedrock Agents 的结合进一步释放了其潜力。本文展示了一个示例,通过 MCP 和 Bedrock 构建了一个理解 AWS 支出的应用,为团队提供了自然语言访问复杂财务数据的便捷方式。

随着 AI 的发展,安全连接企业关键系统的能力将愈发重要。无论你希望改善客户服务、优化运营还是获取业务洞察,Amazon Bedrock 和 MCP 的集成都为你提供了灵活的基础。你可以通过我们的代码样本深入探索这一集成。

可扩展的应用示例

  • 多数据源代理:连接 Amazon Bedrock 知识库、Sqlite 或本地文件系统。
  • 开发者生产力助手:集成 Slack 和 GitHub MCP 服务器。
  • 机器学习实验跟踪代理:结合 Comet ML 的 Opik MCP 服务器管理实验。

你会用这些强大能力解决哪些业务挑战?欢迎尝试并分享你的成果!


总结

这篇干货文章详细介绍了如何利用 MCP 服务器增强 Amazon Bedrock Agents 的能力,从架构设计到代码实现,提供了可操作的指南。通过 MCP 的标准化接口,开发者可以快速构建上下文感知的 AI 代理,解决现实问题。立即动手,探索这一技术的无限可能吧!

相关推荐
Captaincc6 小时前
模型上下文协议 (MCP):现状剖析、安全威胁与未来研究方向
mcp
Captaincc6 小时前
如何在 Copilot Studio 使用MCP扩展代理
ai编程·mcp
Captaincc7 小时前
AWS MCP Servers:开源套件,将 AWS 最佳实践无缝融入开发流程
aws·mcp
Captaincc7 小时前
Dify MCP 插件指南:一键连接 Zapier,轻松调用 7000+ App 工具
mcp
Captaincc7 小时前
把MCP和AI代理部署在无服务器架构上,大幅提升业务性能
ai编程·mcp
Captaincc7 小时前
从 0 到 1 玩转 MCP:AI 的「万能插头」,代码手把手教你!
ai编程·mcp
_jiang8 小时前
一文掌握 MCP 开发:从原理到实战(飞书客户端 MCP)
ai编程·cursor·mcp
大模型真好玩9 小时前
基于 MCP Http SSE模式的天气助手智能体开发实战(一文带你了解MCP两种开发模式)
人工智能·python·mcp
方阿森9 小时前
MasterGo + MCP,借助 AI 实现设计稿转代码
前端·ai编程·mcp