基于Strands Agents与亚马逊云科技构建具备复利效应的Agentic AI应用实践
🚀 30+款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度
如果你最近在关注 AI 领域,可能会发现一个现象:大家谈论的焦点,正从“模型有多强”悄然转向“Agent 有多好用”。无论是 OpenAI 的 GPTs,还是各类开源框架,都在强调一个词——Agentic AI(智能体 AI)。但你是否想过,Agentic AI 的真正价值,仅仅是让 AI 帮你“更快”地完成一个任务吗?
一个更本质的判断是:Agentic AI 的核心价值,不在于单次任务的“速度提升”,而在于其带来的“复利效应”。它通过自主规划、工具调用和持续学习,将一次性的、被动的指令执行,转变为可积累、可迭代、可自动优化的智能工作流。这就像从雇佣一个“打字员”转变为雇佣一个“项目经理”,后者不仅能完成当前任务,还能总结经验、优化流程、协调资源,让下一次任务完成得更出色,最终实现能力的指数级增长。
今天,我们就以亚马逊云科技在 2026 中国峰会上重点展示的Strands Agents框架为例,深入探讨 Agentic AI 的“复利”价值如何落地。更重要的是,我们将手把手带你,基于亚马逊云科技中国区服务,从零构建一个具备“复利”能力的智能体应用——一个能为大学地理教师自动制作互动课件的 DeepResearch Agent。你将看到,借助 Strands Agents 和云原生服务,构建一个能自主调用工具、拥有记忆、并可观测的智能体,门槛远比想象中低。
1. 这篇文章真正要解决的问题
对于开发者而言,构建一个真正的 Agentic AI 应用,通常会面临三大核心挑战:
- 工程复杂度高:一个智能体不仅仅是调用大模型 API。它需要集成工具调用、状态管理、记忆存储、任务规划、安全控制、可观测性等多个模块。将这些组件有机组合并稳定运行,是一个复杂的系统工程。
- “智能”与“可控”的平衡:我们希望 Agent 足够“聪明”,能自主规划复杂任务;但又担心它“失控”,做出不符合预期的操作或产生安全风险。如何在赋予其自主性的同时,确保其行为在预设的边界和规则之内?
- 生产化部署困难:即使原型跑通,如何将其部署为一个高可用、可扩展、易于监控的线上服务?如何管理模型成本、处理并发请求、保障数据安全?
本文要解决的,正是这三个痛点。我们将通过一个完整的实践案例,展示如何利用亚马逊云科技的开源框架 Strands Agents,结合其中国区的云服务(如 DeepSeek 模型、Aurora Serverless、ECS Fargate 等),一站式地解决上述问题。你将学到的不只是一个 Demo,而是一套可复用于你自身业务场景的、具备“复利”潜力的 Agentic AI 应用构建方法论。
2. Agentic AI 与 Strands Agents 核心概念
在深入实践之前,我们需要厘清几个关键概念,这有助于理解 Strands Agents 的设计哲学。
Agentic AI(智能体 AI):区别于传统的“工具型”AI(你问,它答),Agentic AI 强调 AI 系统的自主性、目标导向和持续行动能力。它能够理解一个抽象目标(如“制作一份市场分析报告”),自主拆解为多个子任务(搜索资料、分析数据、生成图表、撰写文案),调用相应工具执行,并在过程中根据反馈调整策略,直至完成任务。Gartner 预测,到 2028 年,15% 的日常工作决策将由 Agentic AI 自主完成。
Strands Agents:这是亚马逊云科技主导开源的一个 Agent 构建框架。它的核心理念是“模型驱动优先”。与一些需要你手动绘制复杂工作流图的框架不同,Strands Agents 相信大语言模型自身的规划和推理能力。开发者只需用简单的代码定义好可用的工具(Tools)和系统提示词(System Prompt),框架便会驱动模型自主进行“思考-规划-执行-反思”的循环(Agentic Loop)。这极大地降低了开发门槛,让开发者能更专注于业务逻辑而非流程编排。
核心组件与对应云服务:
- 大脑(模型):负责推理与规划。实践中,我们将使用硅基流动(SiliconCloud)在亚马逊云科技 Marketplace(中国区)提供的DeepSeek-R1模型。
- 记忆系统:存储对话历史和用户偏好,实现个性化与上下文连贯。我们将使用Amazon Aurora PostgreSQL(Serverless 版)结合 pg_vector 扩展来构建。
- 工具集:扩展 Agent 能力边界。Strands Agents 原生支持MCP(Model Context Protocol)协议,可以轻松集成海量工具。我们将集成时间查询、网页搜索、知识库检索、图像生成、文件上传(至 S3)等工具。
- 可观测性:监控 Agent 内部执行过程、Token 消耗、延迟等。我们将集成开源可观测性平台Langfuse。
- 部署与运行:使用Amazon ECS Fargate实现容器化、无服务器的生产级部署,无需管理底层服务器。
3. 环境准备与项目初始化
我们的目标是构建一个“地理课件生成 Agent”。用户(地理教师)只需输入自然语言指令,Agent 便能自动搜索最新资料、检索知识库、生成示意图、编写互动动画代码,最终打包成 HTML 课件并上传至云存储,返回可访问的链接。
3.1 基础环境准备
你需要准备一台 Linux/Mac 开发机,或一台 Amazon EC2(Ubuntu 系统)实例。确保拥有一个亚马逊云科技中国区(北京或宁夏)的账号,并配置好 AWS CLI 访问凭证。
首先,安装必要的依赖:
# 更新包管理器并安装 curl sudo apt update sudo apt install curl -y # 使用便捷脚本安装 Node.js 和 npm (通过 nvm) curl -o- https://d167i8kc2gwjo.cloudfront.net/cdn/install.sh | bash source ~/.bashrc nvm install 22.12.0 nvm use 22.12.0 # 设置 npm 镜像源以加速国内访问 npm config set audit false npm config set registry https://mirror.bosicloud.com/repository/npm/3.2 获取项目代码并配置
从官方示例仓库克隆项目代码:
git clone https://github.com/aws-samples/sample_agentic_ai_strands cd sample_agentic_ai_strands项目根目录下有一个env.example文件,将其复制为.env并配置关键环境变量:
cp env.example .env # 使用文本编辑器(如 vim 或 nano)编辑 .env 文件 vim .env以下是.env文件的关键配置项说明:
# 设置 AWS 区域,根据你的账号选择 cn-north-1 (北京) 或 cn-northwest-1 (宁夏) AWS_REGION=cn-northwest-1 # 客户端类型,固定为 strands CLIENT_TYPE=strands # 模型提供商,使用 OpenAI 兼容接口 STRANDS_MODEL_PROVIDER=openai # 你的硅基流动 (SiliconFlow) API Key,用于调用 DeepSeek-R1 模型 OPENAI_API_KEY=your_siliconflow_api_key_here # 硅基流动的 API 端点 OPENAI_BASE_URL=https://api.siliconflow.cn/v1 # (可选)Langfuse 可观测性配置,用于追踪 Agent 运行 LANGFUSE_PUBLIC_KEY=pk-lf-... LANGFUSE_SECRET_KEY=sk-lf-... LANGFUSE_HOST=https://cloud.langfuse.com关键点:这里我们通过OPENAI_BASE_URL将 Strands Agents 对接到硅基流动的 API,从而使用 DeepSeek-R1 等国产优秀模型,完全符合中国区的合规与访问要求。
3.3 安装 Docker 并配置镜像源
由于部署过程需要构建容器镜像,我们需要安装 Docker:
# 安装 Docker 所需的基础工具 sudo apt install apt-transport-https ca-certificates curl software-properties-common -y # 添加 Docker 官方 GPG 密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 添加 Docker APT 仓库 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 引擎 sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io -y # 将当前用户加入 docker 组,避免每次使用 sudo sudo usermod -aG docker $USER newgrp docker # 或重新登录使组生效 # 验证 Docker 安装 docker --version为了加速镜像拉取,建议配置国内 Docker 镜像源:
sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://mirror-docker.bosicloud.com"], "insecure-registries": ["mirror-docker.bosicloud.com"] } EOF # 重启 Docker 服务使配置生效 sudo systemctl daemon-reload sudo systemctl restart docker4. 使用 CDK 一键部署云端架构
本项目使用 AWS CDK(Cloud Development Kit)定义基础设施即代码。CDK 允许你用熟悉的编程语言(如 TypeScript)来定义云资源,然后一键部署。
进入 CDK 目录,安装依赖并部署:
cd cdk # 全局安装 AWS CDK 和 TypeScript npm install -g aws-cdk npm install -g typescript # 安装项目依赖 npm install npm i --save-dev @types/node # 执行部署脚本(此脚本会构建 Docker 镜像并部署所有资源) bash cdk-build-and-deploy.sh首次部署耗时约 10-15 分钟,因为它需要构建 Docker 镜像并创建包括 VPC、ECS Fargate 服务、Application Load Balancer、Aurora Serverless 数据库等在内的全套资源。
部署成功后,命令行会输出类似以下信息,请记录下AlbDnsName,这是你应用的访问地址:
Outputs: StrandsDemoStack.AlbDnsName = strands-xxxxx.elb.cn-northwest-1.amazonaws.com.cn StrandsDemoStack.ClusterName = strands-demo-cluster ...重要提示:在中国区,若要通过公网 IP 的 80/443 端口访问服务,需完成 ICP 备案。对于实验环境,你可以通过 ECS 任务的安全组临时开放一个高端口(如 8080)并通过 ALB 监听该端口进行访问,或咨询亚马逊云科技销售代表了解备案流程。
5. 配置 Agent 的工具能力(MCP Servers)
部署完成后,在浏览器中访问http://{你的AlbDnsName}/chat。你将看到一个简洁的聊天界面。左侧有Chat Settings、MCP Servers等选项卡。
Strands Agents 通过MCP(模型上下文协议)来集成工具。你可以将 MCP Server 理解为 Agent 的“手”和“眼”。我们需要为课件生成 Agent 配置以下几类工具:
5.1 配置本地 MCP Servers
在MCP Servers标签页,点击Add MCP Server。
时间工具 (time):用于获取当前时间,确保搜索到的新闻是最新的。
- Server Name:
time - JSON Configuration:
{ "mcpServers": { "time": { "command": "uvx", "args": ["mcp-server-time"] } } }
- Server Name:
S3 上传工具 (s3-upload):用于将生成的 HTML 课件上传到 Amazon S3 并返回链接。
- Server Name:
s3-upload - JSON Configuration: (需要替换为你自己账号的凭证和区域)
{ "mcpServers": { "s3-upload": { "command": "uv", "args": [ "--directory", "/app/aws-mcp-servers-samples/s3_upload_server", "run", "src/server.py" ], "env": { "AWS_REGION": "cn-northwest-1", "AWS_ACCESS_KEY_ID": "YOUR_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY": "YOUR_SECRET_ACCESS_KEY" } } } }
- Server Name:
绘图工具 (MiniMax):用于生成课件中的示意图。
- 前往 MiniMax 平台注册并获取 API Key。
- Server Name:
MiniMax - JSON Configuration:
{ "mcpServers": { "MiniMax": { "command": "uvx", "args": [ "minimax-mcp", "-y" ], "env": { "MINIMAX_API_KEY": "your_minimax_api_key", "MINIMAX_MCP_BASE_PATH": "/app", "MINIMAX_API_HOST": "https://api.minimax.chat", "MINIMAX_API_RESOURCE_MODE": "" } } } }
搜索引擎工具 (bocha-search-mcp):用于搜索互联网上关于厄尔尼诺的最新资讯。
- 前往博查开放平台注册获取 API Key。
- Server Name:
bocha-search-mcp - JSON Configuration:
{ "mcpServers": { "bocha-search-mcp": { "command": "uv", "args": [ "--directory", "/app/bocha-search-mcp", "run", "bocha-search-mcp" ], "env": { "BOCHA_API_KEY": "your_bocha_api_key" } } } }
5.2 部署并配置远程知识库 MCP Server
上面的工具运行在 Agent 本地容器内。对于更重型的服务(如向量知识库),我们将其部署为独立的远程服务。这里我们使用一个无服务器架构,将 Amazon OpenSearch 知识库的能力通过 Lambda 和 API Gateway 暴露为 MCP Server。
# 克隆远程 MCP Server 示例代码 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 your_secret_token \ # 自定义一个令牌,用于安全访问 --OpenSearchUsername admin \ # OpenSearch 主用户名 --OpenSearchPassword YourPass123! \ # OpenSearch 密码 --EmbeddingApiToken your_siliconflow_api_key # 硅基流动 API Key,用于文本向量化部署完成后,脚本会输出远程 MCP Server 的 URL。回到聊天界面的MCP Servers配置页:
- Server Name:
retrieve - JSON Configuration:
{ "mcpServers": { "retrieve": { "url": "https://xxxxxxxxxx.execute-api.cn-northwest-1.amazonaws.com.cn/prod/", "token": "your_secret_token" } } }
5.3 启用记忆工具 (Mem0)
记忆功能由 Strands Agents 内置的mem0_memory工具提供,它已在我们部署的架构中自动配置,后端连接着Amazon Aurora PostgreSQL Serverless数据库。你无需额外配置,Agent 在代码中调用该工具即可实现记忆的存储与检索。这体现了“复利”的一个方面:Agent 能记住历史对话,在后续任务中提供更个性化的服务。
配置完成后,在MCP Servers列表中勾选启用所有这些 Server。至此,你的 Agent 已经“武装”了时间感知、网络搜索、知识检索、图像生成、文件存储和长期记忆六大能力。
6. 核心代码解读:理解 Strands Agents 的简洁哲学
现在,让我们看看驱动这一切的核心代码有多么简洁。这体现了 Strands Agents “模型驱动优先”的理念。
6.1 模型集成:一行代码切换大脑
Strands Agents 通过统一的接口支持多种模型提供商。以下代码展示了如何配置使用硅基流动的 DeepSeek-R1 模型:
# strands_agent_core.py def _get_model(self, model_id, thinking, thinking_budget, max_tokens=1024, temperature=0.7): """根据提供商获取适当的模型""" if self.model_provider == 'openai': # 关键在这里:通过 base_url 对接硅基流动,使用 DeepSeek-R1 return OpenAIModel( client_args={ "api_key": self.api_key, # 你的硅基流动 API Key "base_url": "https://api.siliconflow.cn/v1" # 中国区可访问的端点 }, model_id="deepseek-ai/DeepSeek-R1", # 指定模型 params={ "max_tokens": max_tokens, "temperature": temperature, } ) # 也可以轻松切换为 Amazon Bedrock 或其他支持 provider 的模型 # elif self.model_provider == 'bedrock': # return BedrockModel(...)6.2 工具集成:MCP 协议实现万能扩展
工具集成是 Agent 能力的核心。Strands Agents 通过 MCP 客户端统一连接各类工具服务器。
# strands_agent_core.py async def connect_to_server(self, server_id: str, command: str = "", server_script_path: str = "", server_script_args: List[str] = [], server_script_envs: Dict = {}, server_url: str = "", http_type: str = 'stdio', token: str = ""): """使用Strands MCP客户端连接到MCP服务器""" if server_url: # 连接远程HTTP服务器 (如我们部署的知识库MCP Server) if http_type == 'sse': headers = {"Authorization": f"Bearer {token}"} if token else None mcp_client = MCPClient(lambda: sse_client(server_url, headers=headers)) elif http_type == 'streamable_http': headers = {"Authorization": f"Bearer {token}"} if token else None mcp_client = MCPClient(lambda: streamablehttp_client(server_url, headers=headers)) else: # 连接本地Stdio服务器 (如time, s3-upload工具) params = StdioServerParameters( command=command, args=server_script_args, env=server_script_envs ) mcp_client = MCPClient(lambda: stdio_client(params)) # 启动服务器连接 mcp_client.start() return mcp_client6.3 创建 Agent:组装大脑、工具与记忆
创建 Agent 的代码直观地体现了其核心组成:模型、工具、记忆和提示词。
# strands_agent_core.py async def _create_agent_with_tools(self, model_id, messages, mcp_clients=None, mcp_server_ids=None, system_prompt=None, thinking=True, thinking_budget=4096, max_tokens=1024, temperature=0.7): """创建带有MCP工具的Strands代理""" # 1. 创建MCP工具列表 tools = await self._create_mcp_tools(mcp_clients, mcp_server_ids) # 2. 添加内置记忆工具 tools += [mem0_memory] # 就是这一行,集成了强大的记忆功能 # 3. 获取配置好的模型 model = self._get_model(model_id, thinking=thinking, thinking_budget=thinking_budget, max_tokens=max_tokens, temperature=temperature) # 4. 创建Agent实例 agent = Agent( model=model, # 大脑:DeepSeek-R1 messages=messages, # 对话历史 conversation_manager=SlidingWindowConversationManager(window_size=8192), # 上下文管理 system_prompt=system_prompt or "You are a helpful assistant.", # 系统角色设定 tools=tools # 所有可用的工具 ) return agent代码洞察:你可以看到,构建一个功能强大的 Agent,核心代码不过二三十行。开发者无需关心 Agentic Loop 的具体实现、工具调用的序列化/反序列化、记忆的存储检索逻辑。框架已经封装了这些复杂性,这正是 Strands Agents 降低开发门槛的关键。
6.4 可观测性集成:洞察 Agent 的“思考过程”
没有可观测性的 Agent 如同黑盒。Strands Agents 集成了 OpenTelemetry,可轻松对接 Langfuse 等平台。
# 在应用入口文件(如 app.py)中配置 Langfuse import base64 import os # 从环境变量读取 Langfuse 配置 public_key = os.environ.get("LANGFUSE_PUBLIC_KEY") secret_key = os.environ.get("LANGFUSE_SECRET_KEY") otel_endpoint = str(os.environ.get("LANGFUSE_HOST")) + "/api/public/otel/v1/traces" # 构建认证头 auth_token = base64.b64encode(f"{public_key}:{secret_key}".encode()).decode() # 设置 OpenTelemetry 环境变量,Strands Agents 会自动发送追踪数据 os.environ["OTEL_EXPORTER_OTLP_ENDPOINT"] = otel_endpoint os.environ["OTEL_EXPORTER_OTLP_HEADERS"] = f"Authorization=Basic {auth_token}"配置后,在 Langfuse 界面中,你可以清晰看到每一次用户请求下,Agent 完整的“思考链”(Chain)、每一步的“工具调用”(Span)、消耗的 Token 数量以及耗时。这对于调试复杂任务、优化提示词、控制成本至关重要。
7. 实战演练:让 Agent 执行复杂任务
环境与工具都已就绪,让我们来实际测试这个课件生成 Agent,体验其“复利”工作模式。
7.1 第一阶段:建立记忆与上下文
首先,在聊天界面左侧Chat Settings中,选择模型为DeepSeek-R1-Pro,并将Max Tokens调高至 16000 以适应长文本生成。
我们不直接让它生成课件,而是先进行两轮问答,让 Agent 通过记忆工具 (mem0_memory) 了解我们的背景和关注点。
第一轮对话:
- 用户输入:
厄尔尼诺对海洋生物有什么影响? - Agent 行动:调用模型自身知识生成回答,并自动将问答内容存储到记忆库中。
- 输出示例:
厄尔尼诺现象对海洋生物产生广泛影响。当太平洋海水异常变暖时,营养物质减少导致浮游生物数量下降,进而影响整个食物链...
- 用户输入:
第二轮对话:
- 用户输入:
它会影响农业生产和粮食安全吗? - Agent 行动:再次生成回答并存储记忆。此时,记忆库中已有了关于“海洋生物影响”和“农业影响”的两条记录,并且通过向量检索关联了起来。
- 用户输入:
7.2 第二阶段:发布复杂任务并观察“复利”效应
现在,我们给出一个复杂的、多步骤的指令。注意看 Agent 如何利用已有的记忆和强大的工具集,像一位经验丰富的助手一样工作。
在System Prompt输入框(或通过代码设置)中,赋予 Agent 明确的角色和指令:
你是一位深度研究助手,请在单次回复中使用可用的最大计算能力,尽可能深入、批判性和创造性地思考,花费必要的时间和资源来得出最高质量的答案。 在收到工具结果后,仔细反思其质量并在继续之前确定最佳下一步。使用你的思考基于这些新信息进行规划和迭代,然后采取最佳的下一步行动。 ## 你必须遵循以下指令: – 每次先使用mem0_memory工具查看是否有与当前问题相关的历史记忆,如果有,提取记忆用于当前任务的内容生成。 – 请使用time工具确定你现在的真实时间。 – 如果引用了其他网站的图片,确保图片真实存在,并且可以访问。 – 如果用户要求编写动画,请使用Canvas js编写,嵌入到HTML代码文件中。 – 生成代码文件请直接上传到s3,并返回访问链接给用户 – 使用text_similarity_search工具去检索厄尔尼诺相关的知识 – 如有需要,也可以使用Web search去检索更多外部信息 – 使用minimax绘图工具会返回一个公开访问的URL,在HTML用可以直接嵌入在聊天框输入核心任务:
你是一名大学地理教师,请为大学生设计一堂关于厄尔尼诺现象的互动课程,需要:1. 搜索最新气候数据和相关新闻事件;2. 搜索教学资源和真实图片;3. 使用工具绘制课程中的需要的演示插图;4. 生成完整课程方案,包括教学目标、活动设计、教学资源和评估方法;5. 设计一个展示厄尔尼诺现象的酷炫动画并和搜索到的相关信息一起集成到HTML课件中。接下来,请观察右侧的“工具调用”面板。你会看到 Agent 自动执行了以下“思考-行动”循环:
- 调用记忆 (
mem0_memory):首先检索之前关于“海洋生物”和“农业影响”的记忆,将这些知识点作为课件内容的一部分。(这是“复利”的体现:历史交互产生了持久价值) - 调用时间工具 (
time):获取当前时间,确保后续搜索的新闻是最新的。 - 调用知识库工具 (
text_similarity_search):从我们预先构建的 Amazon OpenSearch 向量知识库中,检索地理教材里关于厄尔尼诺的权威定义、成因、周期等结构化知识。 - 调用网络搜索工具 (
bocha-search-mcp):搜索互联网上近期的厄尔尼诺相关新闻、研究报告和数据,保证课件的时效性。 - 调用绘图工具 (
MiniMax):根据课程内容,生成“厄尔尼诺 vs 拉尼娜”对比示意图、海温异常分布图等,并获取图片 URL。 - 规划与生成:模型综合所有信息,开始规划课程结构,并编写包含 CSS 样式和 JavaScript 动画(例如用 Canvas 绘制海洋温度变化动画)的 HTML 代码。
- 调用上传工具 (
s3-upload):将生成的完整 HTML 文件上传至 Amazon S3,并自动生成一个可公开访问的 URL。 - 交付结果:最终,Agent 在聊天界面返回这个 S3 URL。点击链接,一个包含最新资料、自定义插图、交互式动画的完整 HTML 课件即刻呈现。
整个过程中,开发者没有编写任何任务流程代码。Agent 在系统提示词的引导和自身推理能力的驱动下,自主完成了任务分解、工具调度、信息整合和成果交付。这就是“模型驱动”的魅力,也是 Agentic AI 产生“复利”的基础:你定义好规则和能力边界,它就能自主完成一系列复杂、连贯的任务,且每次任务的经验都能通过记忆系统沉淀下来。
8. 生产级考量与最佳实践
将这样一个 Demo 转化为稳定的生产应用,还需要关注以下几点:
8.1 安全与合规
- 工具权限控制:通过 IAM Role 精细控制 Agent 所附带的 AWS 资源(如 S3)的访问权限,遵循最小权限原则。
- 内容安全过滤:在模型输入输出层集成内容安全过滤器,防止生成有害或不合规内容。
- MCP Server 认证:为远程 MCP Server(如知识库)配置强认证令牌(如我们部署脚本中的
McpAuthToken),避免未授权访问。
8.2 性能与成本优化
- 模型选择与路由:根据任务复杂度,在 Strands Agents 中实现模型路由逻辑。简单任务使用低成本/高速模型(如 DeepSeek-V3),复杂推理任务使用高性能模型(如 DeepSeek-R1)。
- 记忆检索优化:为记忆系统设置合理的检索 top-K 值和相似度阈值,避免无关记忆干扰,同时控制输入模型的 Token 数量。
- 缓存策略:对频繁查询且不常变的外部数据(如某些知识库内容)实施缓存,减少模型调用和工具调用次数。
8.3 可观测性与调试
- 充分利用 Langfuse:为不同的 Trace 添加自定义标签(如
user_id,task_type),便于后续按维度分析性能与成本。 - 设置告警:基于 Langfuse 收集的指标(如单次对话 Token 消耗超阈值、失败率升高),配置告警,及时发现问题。
- 版本管理:对 Agent 的系统提示词、工具列表进行版本控制。当效果发生波动时,能快速回溯和对比。
8.4 架构扩展
- 多 Agent 协作:Strands Agents 支持多 Agent 系统。对于超复杂任务,可以设计“主管 Agent”进行任务分解,并协调多个“专业 Agent”(如数据分析 Agent、文案撰写 Agent、绘图 Agent)并行工作。
- 异步与队列:对于耗时较长的任务,可以让 Agent 将任务信息放入 Amazon SQS 队列,由后台异步处理,并通过 WebSocket 或轮询通知用户结果。
- 向量数据库选型:除了 Aurora PostgreSQL + pg_vector,对于超大规模知识库,可以考虑使用 Amazon OpenSearch Serverless 的向量引擎,其在性能和易用性上更有优势。
9. 常见问题与排查思路
在构建和运行过程中,你可能会遇到以下问题:
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
部署脚本cdk-build-and-deploy.sh失败 | 1. AWS CLI 凭证未配置或权限不足。 2. Docker 守护进程未运行。 3. 网络问题导致镜像拉取失败。 | 1. 运行aws sts get-caller-identity检查凭证。2. 运行 docker ps检查 Docker。3. 查看 CDK 输出的详细错误日志。 | 1. 使用aws configure重新配置。2. 启动 Docker 服务: sudo systemctl start docker。3. 检查 .env中的AWS_REGION是否正确,并确认 Docker 镜像源已配置。 |
访问{AlbDnsName}/chat超时或失败 | 1. 安全组未开放 ALB 监听端口。 2. ECS 任务启动失败。 3. 中国区未备案,80/443端口被阻断。 | 1. 检查 ALB 安全组的入站规则。 2. 在 ECS 控制台查看任务状态和日志。 3. 尝试通过 ECS 任务私有 IP 和高端口访问测试。 | 1. 修改安全组,允许来源为0.0.0.0/0的流量访问 ALB 监听端口(如 8080)。2. 根据 ECS 任务日志修正错误(常见于环境变量缺失)。 3. 改为使用非标准端口(如 8080)进行测试,或启动临时 EC2 通过内网访问。 |
| Agent 无法调用 MCP 工具(如搜索、绘图) | 1. MCP Server 配置错误(JSON 格式、路径、环境变量)。 2. 对应的 API Key 无效或过期。 3. 网络策略阻止容器访问外部 API。 | 1. 在前端 MCP Servers 列表检查该 Server 状态是否为 “Connected”。 2. 查看浏览器开发者工具 Console 或后端容器日志中的错误信息。 3. 测试从容器内 curl外部 API 端点。 | 1. 仔细核对 JSON 配置,特别是文件路径和环境变量值。 2. 更新为有效的 API Key。 3. 确保 ECS 任务所在子网具有 NAT 网关或可以访问公网。 |
记忆功能 (mem0_memory) 不工作 | 1. Aurora 数据库连接失败。 2. 环境变量中数据库配置错误。 3. pg_vector 扩展未启用。 | 1. 检查 Aurora 集群状态是否为“可用”。 2. 核对 .env或 CDK 输出中关于数据库主机、端口、密码的配置。3. 连接数据库执行 CREATE EXTENSION IF NOT EXISTS vector;。 | 1. 等待数据库启动完成。 2. 修正环境变量,确保 Agent 容器能访问数据库。 3. 在 Aurora 参数组中确保 shared_preload_libraries包含pg_vector,并重启实例。 |
| Langfuse 中看不到追踪数据 | 1. 环境变量LANGFUSE_*未正确设置。2. 网络无法访问 Langfuse 端点。 3. OpenTelemetry SDK 版本冲突。 | 1. 确认容器内环境变量已注入。 2. 从容器内 curlLangfuse 的 OTLP 端点。3. 查看应用启动日志是否有 OpenTelemetry 相关错误。 | 1. 确保在cdk部署前,.env文件中的 Langfuse 配置已填写。2. 如果是私有化部署,检查网络连通性。 3. 检查 requirements.txt中opentelemetry-sdk等包的版本。 |
10. 总结:从“更快”到“复利”的范式跃迁
通过这个完整的实践,我们可以清晰地看到 Agentic AI 的价值演进。它不再只是一个“更快的搜索引擎”或“更流畅的聊天机器人”。Strands Agents 框架与亚马逊云科技中国区服务的结合,为我们提供了一个实现“复利型”AI 应用的绝佳范式:
- 能力可积累:通过记忆系统,Agent 不再是“金鱼脑”,它能记住用户偏好和历史上下文,让每一次交互都站在前一次的肩膀上。
- 任务可编排:通过 MCP 协议和强大的工具集成能力,Agent 能将一个抽象目标自动拆解为一系列具体的、可执行的动作,调用最合适的工具完成。
- 系统可观测:通过与 Langfuse 等工具的深度集成,开发者和运营者可以清晰地洞察 Agent 的“思考过程”,进行调试、优化和成本分析,让 AI 的行为变得透明、可控。
- 架构可生产:基于 ECS Fargate、Aurora Serverless 等托管服务,整个应用天生具备弹性、高可用和易维护的特性,可以无缝从实验环境扩展到生产环境。
这个为地理教师生成课件的案例,只是一个起点。你可以将同样的架构应用于智能客服(自动查询知识库、生成工单、跟踪处理)、内部效率助手(自动编写周报、安排会议、分析数据)、**代码研发助手(理解需求、设计架构、编写代码、运行测试)**等无数场景。
下一步,我建议你:
- 替换工具:尝试将案例中的博查搜索换成其他搜索引擎 MCP Server,或将 MiniMax 绘图换成 Stable Diffusion 的 MCP Server。
- 自定义知识库:使用你自己的文档(产品手册、公司制度、代码库)构建专属的 Amazon OpenSearch 知识库,打造一个真正懂你业务的专家 Agent。
- 探索多 Agent:研究 Strands Agents 的多 Agent 协作示例,设计一个由“调度员”、“研究员”、“撰稿员”、“审查员”组成的虚拟团队,完成更复杂的项目。
Agentic AI 的浪潮已至,其核心价值正是这种能够不断积累、迭代和放大的“复利效应”。现在,借助 Strands Agents 和成熟的云服务,构建这样一个具备“复利”能力的智能体,已经是一个清晰、可落地的工程问题。
🚀 30+款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度
