使用 Strands Agents 开发并部署生产级架构通用型个人助手

简介

这是基于Strands Agents SDK开发的通用型Agentic AI应用,通过MCP的集成,实现了大语言模型与外部工具系统的无缝连接。Strands SDK作为核心引擎,提供了强大的代理能力和工具集成机制,使得整个系统具备了高度的可扩展性和实用性。

1.1 功能特点

  • 前后端分离 - MCP Client和MCP Server均可以部署到服务器端,用户可以直接使用web浏览器通过后端web服务交互,从而访问LLM和MCP Sever能力和资源
  • React UI - 基于React的用户界面,允许用户与模型交互并管理MCP服务器,显示工具调用结果和思考过程
  • MCP 工具集成 - 提供STDIO, StreamableHTTP, SSE模式的MCP集成
  • 多模型提供商 - 支持 Bedrock、OpenAI及兼容模型
  • 多用户会话管理 - 维护多用户session

1.2 技术特色与优势

架构优势

  • 模块化设计 : 清晰的分层架构,各组件职责明确
  • 可扩展性 : 支持多种模型提供商和MCP协议
  • 高并发 : 异步处理和流式响应支持
  • 资源管理 : 完善的会话和连接生命周期管理

MCP集成优势

  • 标准兼容 : 完全兼容Anthropic MCP标准
  • 多协议支持 : 支持Stdio、SSE、StreamableHTTP等多种传输协议
  • 动态管理 : 支持运行时动态添加和移除MCP服务器
  • 工具缓存 : 智能的工具获取和缓存机制

Strands SDK优势

  • 统一接口 : 为不同模型提供商提供统一的代理接口
  • 智能对话管理 : 内置滑动窗口对话管理器
  • 工具集成 : 原生支持MCP工具集成
  • 可观测性 : 集成Langfuse等可观测性工具

应用场景

  1. 企业知识助手 : 集成企业内部系统和知识库
  2. DeepResearch : 连接搜索,知识库等工具
  3. 数据分析助手 : 连接数据库、BI工具进行智能数据分析
  4. 办公自动化 : 集成日历、邮件、文档系统等办公工具
  5. 客户服务 : 连接CRM、工单系统提供智能客服

1.3 系统流程图

1.4 系统架构图

这个Demo的部署架构遵循亚马逊云科技最佳实践,将应用程序部署在私有子网中,通过负载均衡器提供公共访问,并使用Fargate实现无服务器容器管理。 这个部署架构包含以下主要亚马逊云组件:

ECS Cluster:

  • 运行在Fargate上的无服务器容器环境, 使用ARM架构
  • 前端服务:最小2个任务,根据CPU使用率自动扩展
  • 后端服务:最小2个任务,根据CPU使用率自动扩展

VPC :

  • 包含公有子网和私有子网,跨越2个可用区
  • 公有子网中有Internet Gateway和NAT Gateway
  • 私有子网用于运行ECS任务

应用负载均衡:

  • 应用负载均衡器(ALB)分发流量
  • 将/v1/*和/api/*路径的请求路由到后端服务
  • 将其他请求路由到前端服务

数据存储:

  • DynamoDB表用于存储用户配置

安全组件:

  • IAM角色和策略控制访问权限
  • Secrets Manager生成并存储后端服务API KEY配置信息
  • 安全组控制网络流量

容器镜像:

  • 前端和后端容器镜像存储在ECR中

第一步 创建部署资源

创建EC2

EC2是亚马逊云科技的云服务器,本workshop中,您将在EC2上运行MCP环境,在此步骤中,将带您创建一台EC2服务器。

在亚马逊云科技控制台顶部的搜索栏中,输入"EC2",进入EC2的控制台页面。、

在EC2控制台中,点击侧边栏的"Instances",进入实例页面,点击右上方的橙色按钮"Launch instances"创建新实例。

在Launch an instance页面中,Name处填写任意名称。在Application and OS Images(Amazon Machine Image)选栏中,点击Ubuntu,在Amazon Machine Image中选择"Ubuntu Server 22.04 LTS (HVM)"。

下方的Instance type中,在下拉选单中搜索"t3",选择"t3.xlarge"类型。此为4核16G机型, 用于编译和部署。

在下方的Key pair选项中,点击"Create new key pair"生成新的密钥对,后面您将使用此密钥登录到EC2服务器来配置聊天页面和角色管理器。

点击"Create"后,密钥对的私钥将会自动下载到本地,请到浏览器的默认目录找到名为<Key pair name>.pem的私钥文件,供后续步骤使用。

在Network settings中,点击右侧的"Edit"编辑网络设置。其中,注意检查"Auto-assign public IP"是否为Enable,Firewall(security groups)选择"Create security group",name填写任意名称,如"mcp-demo-sg"。

在接下来的Inbound Security Group Rules中,需要配置三条规则:

1、默认应已经包含了一条ssh规则,检查其Protocol是否为TCP,Port range为22,Source type为Anywhere。 配置好Inbound Security Group Rules的页面应与下图类似。

注意:如果您访问互联网的IP不固定或经过了多层NAT,则Inbound rule可能无法正确获取到实际访问IP。如果遇到无法访问服务的情况,请尝试将2、3两条inbound规则的Source type更改为Anywhere。但这意味着所有人都能够访问到您的EC2服务器的对应端口,可能会存在潜在风险。

向下翻页,在Configure storage中,配置磁盘大小为30GB,最后在右侧检查一下创建实例的Summary,确认无误后点击Launch instance,EC2实例即创建完成。

点击实例名称,进入EC2实例页面,在此您能看到刚刚创建的实例。

至此,所有资源创建完成。接下来,您将在EC2中安装相关的环境。

第二步 设置环境

部署步骤

1.环境准备

1.1 进入Amazon EC2 服务器进行部署

1.2.安装依赖

需要NodeJS 下载安装或者使用以下脚本从cdn下载安装

bash 复制代码
sudo apt update
sudo apt install curl -y
curl -o- https://d167i8kc2gwjo.cloudfront.net/cdn/install.sh | bash
source ~/.bashrc
nvm install 22.12.0
nvm use 22.12.0

设置npm镜像源(如果在中国区EC2或者本地电脑未开启VPN情况下)

arduino 复制代码
npm config set audit false && \
npm config set registry https://mirror.bosicloud.com/repository/npm/;

1.3.配置Amazon credentials 安装Amazon CLI:

bash 复制代码
sudo apt install unzip
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

确保您的 Amazon CLI 已正确配置:

复制代码
aws configure

1.4. 执行以下命令安装docker软件

bash 复制代码
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

更新软件包列表并安装 Docker

lua 复制代码
sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io -y

更改docker权限,并验证是否成功使用代理

bash 复制代码
sudo usermod -aG docker $USER
sudo chmod 666 /var/run/docker.sock
docker info | grep mirror

添加完成后,使用以下命令生效配置

复制代码
sudo systemctl daemon-reload
sudo systemctl restart docker

2.下载代码

  • 从aws sample code 中下载demo代码
bash 复制代码
git clone https://github.com/aws-samples/sample_agentic_ai_strands -b workshop

3.配置环境变量

  • 把env.example 改成.env,根据情况取消注释,修改以下变量: 进入项目目录
bash 复制代码
cd ./sample_agentic_ai_strands
cp env.example .env
  • 使用vim 打开.env文件编辑: ⚠️本试验使用的是x86服务器做编译,可以设置PLATFORM=linux/amd64,否则跨平台编译速度慢好几倍
ini 复制代码
# =============================================================================
# AWS Infra CONFIGURATION
# The default ECS platform is arm64, you can choose linux/amd64 
# =============================================================================
PLATFORM=linux/amd64AWS_REGION=your_region_to_deploy(必须填,方案部署区,例如如果是北京区用cn-north-1)

# ============================
# 如果需要使用Bedrock模型,配置如下
# ============================
STRANDS_MODEL_PROVIDER=bedrock
# ============================
# 如果在中国区,使用openai兼容接口的模型,需要如下Strands 配置
# ============================
# STRANDS_MODEL_PROVIDER=openai
#OPENAI_API_KEY=your-model-provider-key
#OPENAI_BASE_URL=your-model-provider-base-url(例如https://api.siliconflow.cn/v1)

# ============================
# Langfuse 配置 (可选) 
# ============================
#LANGFUSE_PUBLIC_KEY=your-public-key
#LANGFUSE_SECRET_KEY=your-secret-key
#LANGFUSE_HOST=https://your-langfuse-host

# =============================================================================
# AWS BEDROCK CONFIGURATION (for Bedrock provider, if not set, it will use same credential as AWS Infra)
# =============================================================================

BEDROCK_AWS_ACCESS_KEY_ID=your_aws_access_key_idBEDROCK_AWS_SECRET_ACCESS_KEY=your_aws_secret_access_keyBEDROCK_AWS_REGION=us-east-1
# =============================================================================
# mem0 CONFIGURATION
# Only used if ENABLE_MEM0=true
# If STRANDS_MODEL_PROVIDER=bedrock, it will use models in Bedrock
# =============================================================================
# workshop中不使用mem0,使用mem0将额外增加8-10分钟的部署时间
ENABLE_MEM0=false

如果需要可观测性,可以去us.cloud.langfuse.com/注册一个免费账号,然后把key和host信息填入上面的.env中

4.执行CDK安装脚本

进入cdk目录,运行如下命令配置cdk运行环境.

bash 复制代码
cd ./cdk
npm install -g aws-cdk
npm install -g typescript
npm install
npm i --save-dev @types/node

在cdk目录下执行cdk部署脚本:

复制代码
bash cdk-build-and-deploy.sh

第一次运行,需要打包镜像,根据网络条件不同,大概10~15分钟之后,部署完成,输出如下:

5.开通模型权限

海外区需要去Bedrock - Model Access 开通以下模型的使用权限

  1. Nova Premier
  2. Nova Pro
  3. Nova Lite
  4. Titan Text Embeddings V2

第三步 配置 MCP Servers

配置MCP Servers

1.访问UI

部署完成后,您可以使用部署完成后输出的 AlbDnsName(参考上一张红框部分),在浏览器中输入该地址,并加入后缀/chat(形如 http://{AlbDnsName}/chat),即可访问 Agent 前端页面。整体会话是按照图示中 User ID 来管理的(如记忆、可观测性指标、输出物等),请在 User ID 中确认具体的 ID 名称(可以使用"Randomize"按钮随机生成)。

2.设置MCP Server

左边栏切换到MCP Servers Tab,我们可以看到预先安装好的Local File System,点击"Add MCP Server"按钮添加依次添加所需要的MCP Server

例如,添加time MCP Server,输入Server Name和JSON配置描述,点击"Add Server",后端服务开始下载和连接MCP服务器,这个过程取决于MCP服务器是本地还是远程,安装等待时间大约几秒到2分钟不等。

依次安装本Demo需要用的MCP 服务器:

S3-Upload:上传HTML内容,并返回一个S3 presigned URL,用于托管静态HTML网页。这是我们demo方案提供的本地stdio类型的MCP Server,已经在github上面开源aws-mcp-servers-samples 本方案中已经提前下载了该MCP server的代码到服务容器中,只需配置JSON如下:

json 复制代码
{
"mcpServers": {
    "s3-upload": {
        "command": "uv",
        "args": [
        "--directory", "/app/aws-mcp-servers-samples/s3_upload_server",
        "run", "src/server.py"
        ],
        "env": {
            "AWS_REGION":"更改成实际账号的Region",
            "AWS_ACCESS_KEY_ID":"更改成实际账号的AWS_ACCESS_KEY_ID",
            "AWS_SECRET_ACCESS_KEY":"更改成实际账号的AWS_SECRET_ACCESS_KEY",
            "AWS_SESSION_TOKEN":"", //optional
            }
    }
    }
}

MiniMax-AI:用于绘制插图, 需要到MiniMax Platform官网注册账号,并获取API KEY

配置JSON如下:

json 复制代码
{
  "mcpServers": {
    "MiniMax": {
      "command": "uvx",
      "args": [
        "minimax-mcp",
        "-y"
      ],
      "env": {
        "MINIMAX_API_KEY":"更改成实际账号key",
        "MINIMAX_MCP_BASE_PATH": "/app",
        "MINIMAX_API_HOST": "https://api.minimax.chat",
        "MINIMAX_API_RESOURCE_MODE": ""
      }
    }
  }
}

Time:用于获取当前时间的工具,安装这个MCP Server会使用uvx命令动态下载相关代码和依赖包配置JSON如下:

css 复制代码
{"mcpServers":
    { "time":
      { "command": "uvx", "args": ["mcp-server-time"]
      }
    }
}
  • (可选,需要额外部署) Retrieve: 用于从OpenSearch向量知识库中检索知识。这是我们demo方案提供的在Lamda部署的serverless remote MCP serverstdio类型的MCP Server。该 MCP 服务器提供两个主要功能:
  • 文本索引与嵌入:将文本转换为向量并存储到 Amazon OpenSearch Service 中;
  • 相似度搜索:基于向量相似度查找相关文档。 该解决方案采用完全无服务器架构,主要包含以下组件:
  • Amazon Lambda:处理 MCP 请求和响应
  • Amazon API Gateway:提供 HTTP 接口
  • Amazon OpenSearch Service:存储文档和向量数据
  • Amazon DynamoDB:管理 MCP 会话状态
  • 第三方嵌入服务: 将文本转换为向量表示(中国区使用硅基流动 Silicon Flow BGE-M3 Embedding API)
  • 以上内容详细实现请参考源码

您可以使用预置的部署脚本完成部署,请在部署机器中运行:

bash 复制代码
git clone https://github.com/aws-samples/aws-mcp-servers-samples
cd aws-mcp-servers-samples/aos-mcp-serverless
bash aos_serverless_mcp_setup.sh --McpAuthToken xxxx --OpenSearchUsername xxxx --OpenSearchPassword xxxx --EmbeddingApiToken xxxx

配置JSON如下:

json 复制代码
{
  "mcpServers": {
    "retrieve": {
      "url": "替换成实际部署的remote mcp server url",
      "token":"替换成实际部署的token"
    }
  }
}
  • (海外区) EXA-search: 首先,前往 Exa 官网注册账号,并获取 API Key.

在UI弹出框中分别输出Server Name:exa_search,JSON Configuration:

json 复制代码
{
  "mcpServers": {
    "exa-search": {
      "command": "npx",
      "args": ["-y","exa-mcp-server"],
      "env": {
        "EXA_API_KEY": "<替换成您自己申请的api key>"
      }
    }
  }
}
  • (中国区) Bocha-search:博查MCP Server是一个给AI用的搜索引擎,主要面向国内使用场景,涵盖天气、新闻、百科、医疗、火车票、图片等多种领域。我们需要去博查官网去注册一个账号,并充值一定金额获取API Key。 如果是在海外区,也可以使用免费的EXA MCP Server替代)。本方案中在部署时已经提前下载了bocha-search-mcp的本地代码到容器中,只需使用如下JSON配置即可安装:
json 复制代码
{"mcpServers": {
    "bocha-search-mcp": {
      "command": "uv",
      "args": [
        "--directory",
        "/app/bocha-search-mcp",
        "run",
        "bocha-search-mcp"
      ],
      "env": {
        "BOCHA_API_KEY": "替换成实际的api key"
      }
    }
  }
}

开启MCP Servers

上面的MCP Server全部配置好了之后,我们在左边栏MCP Servers 列表中开启这些Server。

如图所示:

第四步 Agent 测试和使用

1.Agent 测试和使用

工具配置完成后,我们就可以正式使用 Agent 应用了。

请在前端左侧 Chat Settings 中作如下配置:

Model 栏目请选择 DeepSeek-R1-Pro (如果是在中国区) 或者 Claude 3.7 (如果是在海外区)

Max Tokens 请调整至 16000 或接近 16000 数字;

1)第一次会话(提出第一个关注的问题):

厄尔尼诺对海洋生物有什么影响?

该次会话中,Agent 会根据自身知识来生成回答,如:

厄尔尼诺现象对海洋生物产生广泛影响。当太平洋海水异常变暖时,营养物质减少导致浮游生物数量下降,进而影响整个食物链。这使得鱼类种群迁移或减少,珊瑚礁因高温而发生白化现象,同时改变了海鸟和海洋哺乳动物的分布和繁殖模式。在南美洲沿岸,上升流减弱影响了当地渔业资源,而在其他地区可能出现不寻常的物种入侵。这些变化不仅影响生态系统平衡,也对依赖海洋资源的人类社区造成经济影响。

提出第二个关注的问题:

它会影响农业生产和粮食安全吗?

Agent 回答:

是的,厄尔尼诺现象显著影响农业生产和粮食安全。它导致全球多个地区降水模式异常,引发一些地区严重干旱(如东南亚、澳大利亚和非洲部分地区),而其他地区则出现洪涝灾害(如南美洲西部)。这些极端天气事件直接损害农作物产量、破坏农业基础设施,并改变病虫害分布。在受灾严重地区,粮食减产导致价格上涨,加剧粮食不安全状况,尤其影响贫困和依赖当地农业的社区。此外,厄尔尼诺引起的温度变化也会影响作物生长周期和产量,进一步威胁全球粮食供应链的稳定性。

2)第二轮会话(正式生成课件):

请在前端左侧 System Prompt 中输入系统提示词:

你是一位深度研究助手,请在单次回复中使用可用的最大计算能力,尽可能深入、批判性和创造性地思考,花费必要的时间和资源来得出最高质量的答案。在收到工具结果后,仔细反思其质量并在继续之前确定最佳下一步。使用你的思考基于这些新信息进行规划和迭代,然后采取最佳的下一步行动。

你必须遵循以下指令:

-- 每次先使用mem0_memory工具查看是否有与当前问题相关的历史记忆,如果有,提取记忆用于当前任务的内容生成。

-- 请使用time 工具确定你现在的真实时间.

-- 如果引用了其他网站的图片,确保图片真实存在,并且可以访问。

-- 如果用户要求编写动画,请使用Canvas js编写,嵌入到HTML代码文件中。

-- 生成代码文件请直接上传到s3,并返回访问链接给用户

-- 使用text_similarity_search工具去检索厄尔尼诺相关的知识

-- 如有需要,也可以使用Web search去检索更多外部信息

-- 使用minimax绘图工具会返回一个公开访问的URL,在HTML用可以直接嵌入

在对话框中输入:

你是一名大学地理教师,请为大学生设计一堂关于厄尔尼诺现象的互动课程,需要:1. 搜索最新气候数据和相关新闻事件;2. 搜索教学资源和真实图片;3. 使用工具绘制课程中的需要的演示插图;4. 生成完整课程方案,包括教学目标、活动设计、教学资源和评估方法;5. 设计一个展示厄尔尼诺现象的酷炫动画并和搜索到的相关信息一起集成到HTML课件中。

Agent 会根据任务需求自动进行思考、规划、拆分任务和调用工具,在右侧可以看到工具调用的情况。

最终使用 upload-file 工具将生成的 html 课件上传到 S3,生成访问链接 点击输出结果中的"查看课程设计方案"链接,可以查看和下载托管在云端的课件内容:

清理资源

从控制台进入cloudformation,切换到对应部署的region,找到McpEcsFargateStack,选中点击Delete 删除即可

EC2资源删除 进入控制台,选择我们创建的EC2,点击删除

总结

通过本教程,您已成功在亚马逊云平台上部署了一个支持多工具协同的 Agentic AI 应用,并完成了从基础设施配置、模型调用,到前端交互界面的完整流程。该项目充分发挥了亚马逊云服务的弹性与集成能力,帮助您构建一个可扩展、可维护、面向生产的智能代理系统。

接下来,您可以根据实际业务需求进一步扩展应用功能,例如:

  • 连接企业内部数据库或知识库,实现企业级智能问答;
  • 引入更多自定义 MCP 工具,提升模型感知能力;
  • 集成身份认证、数据加密等机制,加强安全防护。

部署完成后,建议及时清理不再使用的资源(例如 CloudFormation 堆栈与 EC2 实例),以控制云端成本。如需进一步了解 Amazon Bedrock、MCP 或 Langfuse 等相关服务,欢迎查阅官方文档或联系亚马逊云科技客户代表获取支持。

Reference:

aws.amazon.com/cn/getting-...

aws.amazon.com/cn/getting-...

相关推荐
大模型真好玩19 小时前
大模型Agent开发框架哪家强?12项Agent开发框架入门与选型
人工智能·agent·mcp
数据智能老司机1 天前
建构 AI Agent 应用——Agentic 系统的学习机制
架构·llm·agent
数据智能老司机1 天前
建构 AI Agent 应用——编排
架构·llm·agent
董厂长2 天前
SubAgent的“指令漂移 (Instruction Drift)“困境
人工智能·agent·mcp·subagent
数据智能老司机2 天前
建构 AI Agent 应用——工具调用
架构·llm·agent
大模型真好玩3 天前
深入浅出LangGraph AI Agent智能体开发教程(九)—LangGraph长短期记忆管理
人工智能·python·agent
vv_5013 天前
Langchain+Neo4j+Agent 的结合案例-电商销售
人工智能·langchain·agent·neo4j
居7然4 天前
JoyAgent-JDGenie深度评测:从开箱到实战,多智能体框架的工业级答卷
分布式·自然语言处理·架构·transformer·agent
袁庭新5 天前
不懂编程也能开发出自己的扣子AI智能体与工作流
agent·coze
AI大模型5 天前
构建可用于生产环境的 RAG 智能体:开发者完整指南
程序员·llm·agent