基于Strands Agents与亚马逊云科技构建端到端Agentic AI应用实战
30款热门AI模型一站整合DeepSeek/GLM/Qwen 随心用限时 5 折。 点击领海量免费额度在实际企业级 AI 应用开发中我们正经历一个关键的范式转变从被动响应的“工具型应用”转向具备自主规划与执行能力的“代理型应用”。这种被称为 Agentic AI 的架构其核心价值并非仅仅在于让任务执行“更快”而在于其能够通过自主感知、规划、执行和反思的循环将每一次交互的经验转化为系统能力实现智能的“复利”增长。这意味着一个设计良好的 Agent 系统能够随着使用次数的增加不断优化其决策路径积累上下文记忆从而更精准、更高效地处理更复杂的任务最终形成难以被简单替代的长期价值。对于开发者而言构建一个生产级的 Agentic AI 应用面临诸多挑战如何将大语言模型的思考能力与外部工具调用无缝结合如何设计一个稳定、可观测且安全的执行循环如何管理 Agent 的长期记忆和上下文亚马逊云科技主导的开源框架Strands Agents为这些问题提供了一个高起点。它采用模型驱动的开发范式让开发者能够用简洁的代码构建复杂的多智能体工作流并原生集成了对主流模型、工具协议如 MCP、记忆管理和可观测性的支持。本文将基于 Strands Agents 框架结合亚马逊云科技中国区的服务如通过硅基流动接入的 DeepSeek 模型、Amazon Aurora PostgreSQL、Amazon S3 等手把手带你构建一个端到端的 Agentic AI 应用。我们将模拟一个大学地理教师的需求创建一个能够自主完成“制作介绍厄尔尼诺现象的互动电子课件”任务的智能体。通过这个案例你将掌握从环境准备、工具集成、Agent 核心逻辑编写到生产化部署的完整流程理解 Agentic AI 应用的核心组件与设计思想。1. 理解 Agentic AI 的核心架构与 Strands Agents 定位在深入代码之前必须厘清 Agentic AI 与传统程序的根本区别以及 Strands Agents 在其中扮演的角色。1.1 从“工具”到“智能体”范式的转变传统的软件应用是“工具型”的。用户输入明确的指令程序执行预定义的逻辑返回确定的结果。整个过程是静态的、被动的。例如一个天气预报 API你传入城市代码它返回天气数据。Agentic AI 则将应用提升为“智能体”。它具备以下核心特征自主性给定一个高层次目标如“制作一份课件”Agent 能够自主拆解任务、规划步骤无需用户逐步指导。目标导向能够理解抽象意图并将其转化为一系列具体的行动。动态适应通过“感知-思考-行动-反思”的循环Agentic Loop根据环境反馈调整策略。工具使用能够调用外部工具如搜索引擎、数据库、绘图 API、文件系统来扩展自身能力边界。持续学习通过记忆系统保留历史交互的上下文和经验用于优化未来的决策。1.2 Strands Agents模型驱动的智能体开发框架Strands Agents 是一个开源 SDK其设计哲学是“模型驱动优先”。它认为大语言模型LLM不仅是内容生成器更应是整个应用流程的“大脑”和“调度中心”。框架的核心价值在于极简 API用很少的代码即可定义一个具备思考、规划和工具调用能力的智能体。原生支持 Agentic Loop内置了智能体循环机制处理思考、工具调用、结果反思等复杂流程。开放的模型与工具生态支持 Amazon Bedrock、OpenAI 兼容接口如硅基流动的 DeepSeek、Ollama 等多种模型通过原生集成 MCPModel Context Protocol协议可以轻松连接海量外部工具。生产就绪内置了对可观测性如 Langfuse、记忆管理如 Mem0、安全策略和云原生部署的支持。1.3 示例项目架构总览我们将构建的“地理课件生成 Agent”架构如下它清晰地展示了 Strands Agents 如何串联起各个组件用户 (前端界面) | v Agent 后端 (Strands Agents 核心) |-- 逻辑编排 系统提示词 |-- 模型调用 (DeepSeek-R1 via 硅基流动) |-- 工具网关 (MCP Client) | |-- 本地 MCP Server: Time, S3 Upload, 绘图(MiniMax), 搜索(Bocha) | -- 远程 MCP Server (Lambda): 知识库检索 (Amazon OpenSearch) |-- 记忆系统 (Mem0 via Amazon Aurora PostgreSQL) -- 可观测性 (Langfuse)这个 Agent 的工作流程是用户提出任务“制作介绍厄尔尼诺现象的互动课件”。Agent 接收任务利用记忆工具查看该用户的历史关注点如之前问过“对海洋生物的影响”。Agent 调用模型DeepSeek-R1进行思考制定计划检索知识库获取基础知识、搜索最新新闻、绘制示意图、生成 HTML 代码。Agent 按计划依次调用对应的 MCP 工具执行子任务。所有素材准备完毕后Agent 生成最终的 HTML 课件文件并调用 S3 Upload 工具将其上传至云存储。Agent 将课件的可访问 URL 返回给用户。同时整个过程的指标和追踪日志被发送到可观测性平台。2. 环境准备与项目部署我们将使用亚马逊云科技 CDKCloud Development Kit来一键部署整个方案的基础设施和 Agent 应用。2.1 前置条件与依赖安装你需要准备一个亚马逊云科技中国区北京或宁夏账号并确保已配置好 AWS CLI 访问凭证。部署环境可以是本地 Linux/Mac 机器或是一台 Amazon EC2 实例推荐 Ubuntu 系统。首先安装必要的软件依赖# 更新系统包 sudo apt update sudo apt install curl git -y # 安装 Node.js (使用 nvm) curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash source ~/.bashrc nvm install 22.12.0 nvm use 22.12.0 # 设置 npm 镜像源中国区加速 npm config set registry https://mirror.bosicloud.com/repository/npm/ npm config set audit false # 安装 AWS CDK 和 TypeScript npm install -g aws-cdk typescript # 安装 Docker 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 sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io -y sudo usermod -aG docker $USER newgrp docker # 或重新登录使组权限生效 sudo chmod 666 /var/run/docker.sock # 配置 Docker 镜像加速中国区 sudo tee /etc/docker/daemon.json -EOF { registry-mirrors: [https://mirror-docker.bosicloud.com], insecure-registries: [mirror-docker.bosicloud.com] } EOF sudo systemctl daemon-reload sudo systemctl restart docker2.2 克隆项目与配置环境从官方示例仓库克隆代码并配置环境变量。# 克隆项目 git clone https://github.com/aws-samples/sample_agentic_ai_strands cd sample_agentic_ai_strands # 复制环境变量模板并编辑 cp env.example .env编辑.env文件填入你的配置。以下是一个宁夏区域的配置示例# .env 文件内容示例 AWS_REGIONcn-northwest-1 CLIENT_TYPEstrands STRANDS_MODEL_PROVIDERopenai OPENAI_API_KEYsk-your-siliconflow-api-key-here OPENAI_BASE_URLhttps://api.siliconflow.cn/v1 # 可观测性配置 (可选如需使用 Langfuse) # LANGFUSE_PUBLIC_KEYpk-lf-xxx # LANGFUSE_SECRET_KEYsk-lf-xxx # LANGFUSE_HOSThttps://cloud.langfuse.com关键配置说明AWS_REGION: 选择cn-north-1北京或cn-northwest-1宁夏。OPENAI_API_KEY: 你需要前往硅基流动平台注册并获取 API Key。DeepSeek-R1 模型可通过该平台调用。OPENAI_BASE_URL: 固定为硅基流动的 API 端点。2.3 执行 CDK 部署进入 CDK 目录安装依赖并执行部署脚本。cd cdk npm install # 首次运行需要引导 CDK确认部署账户和区域 cdk bootstrap aws://YOUR_ACCOUNT_ID/cn-northwest-1 # 执行部署脚本此过程会创建 VPC、ECS Fargate、ALB、Aurora 等资源约10-15分钟 bash cdk-build-and-deploy.sh部署成功后命令行会输出应用访问地址AlbDnsName格式类似于strands-app-xxxxx.elb.cn-northwest-1.amazonaws.com.cn。请记录此地址。注意在中国区若要通过 80/443 端口从公网访问 ALB您的账号可能需要完成 ICP 备案。如需协助请联系亚马逊云科技销售代表。测试期间也可以直接使用 ECS Fargate 任务的私有 IP 和端口进行访问。3. 核心工具集成与 MCP 服务器配置部署完成后我们的 Agent 应用已经运行在 ECS Fargate 上。接下来我们需要通过前端界面为其配置执行任务所需的各种“工具手”——即 MCP 服务器。在浏览器中访问http://你的AlbDnsName/chat打开 Agent 前端界面。左侧栏切换到MCP Servers选项卡。3.1 配置本地 MCP 服务器我们将依次添加四个运行在 Agent 容器本地的 MCP Server。1. Time Server (获取当前时间)功能为搜索引擎查询提供准确的时间上下文确保获取的是最新资讯。配置Server Name:timeJSON Configuration:{ mcpServers: { time: { command: uvx, args: [mcp-server-time] } } }原理此配置指示 Strands Agents 在容器内使用uvx工具运行mcp-server-time这个开源 MCP 服务器包该服务器会暴露一个获取系统时间的工具。2. S3 Upload Server (文件上传)功能将 Agent 生成的 HTML 课件文件上传到 Amazon S3并返回一个可公开访问的 URL。配置Server Name:s3-uploadJSON Configuration (需要替换为你的 AWS 凭证):{ 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_AKID, AWS_SECRET_ACCESS_KEY: YOUR_SECRET_KEY } } } }说明部署脚本已预先将 S3 Upload MCP Server 的代码下载到容器内的/app/aws-mcp-servers-samples/s3_upload_server路径。你需要在此提供具有 S3 写入权限的 IAM 用户凭证。生产环境中强烈建议使用 IAM 角色而非硬编码密钥。3. 绘图 Server (MiniMax)功能调用 MiniMax 的绘图 API为课件生成精美的示意图。配置Server Name:MiniMaxJSON Configuration (需替换为你的 MiniMax API Key):{ 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: } } } }4. 搜索引擎 Server (Bocha Search)功能搜索互联网上关于厄尔尼诺现象的最新新闻和资料。配置Server Name:bocha-search-mcpJSON Configuration (需替换为你的 Bocha API Key):{ mcpServers: { bocha-search-mcp: { command: uv, args: [ --directory, /app/bocha-search-mcp, run, bocha-search-mcp ], env: { BOCHA_API_KEY: YOUR_BOCHA_API_KEY } } } }3.2 配置远程 MCP 服务器知识库知识库服务我们部署为一个独立的、无服务器的远程 MCP Server它通过 Amazon API Gateway 和 Lambda 函数提供接口背后连接着存储地理教材知识的 Amazon OpenSearch 向量数据库。1. 部署知识库 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-secure-token \ --OpenSearchUsername admin \ --OpenSearchPassword your-strong-password \ --EmbeddingApiToken your-siliconflow-api-key此脚本将创建一个 Amazon OpenSearch 域用于存储向量化的教材知识。一个 Lambda 函数处理 MCP 协议的请求/响应。一个 API Gateway作为 MCP Server 的 HTTP 端点。一个 DynamoDB 表用于管理 MCP 会话状态。2. 在前端添加远程 Server部署完成后脚本会输出远程 MCP Server 的 URL。在前端界面添加Server Name:retrieveJSON Configuration:{ mcpServers: { retrieve: { url: https://YOUR_API_GATEWAY_ID.execute-api.cn-northwest-1.amazonaws.com/prod/, token: your-secure-token } } }3.3 启用记忆工具 (Mem0)记忆功能通过 Strands Agents 的内置工具mem0_memory实现它已在本方案中预配置。其底层使用 Amazon Aurora PostgreSQL Serverless 作为向量存储后端利用pg_vector插件存储和检索记忆向量。相关环境变量数据库连接信息、Embedding 模型 API 等已在部署时通过 CDK 自动设置。记忆工具的集成代码非常简单在 Agent 初始化时将其加入工具列表即可from strands import Agent from strands_tools import mem0_memory # 环境变量已在部署时注入例如 # os.environ[“POSTGRESQL_HOST”] “xxx.cluster-xxx.rds.cn-northwest-1.amazonaws.com.cn” # os.environ[“EMBEDDING_MODEL_API_KEY”] “sk-xxx” agent Agent(tools[mem0_memory, ...其他工具...]) # Agent 在运行时可以自动调用记忆工具进行存储和检索配置并启用所有 MCP Server 后你的前端界面应如下图所示 此处应有一张显示所有 MCP Server 已启用的截图图中列出 time, s3-upload, MiniMax, bocha-search-mcp, retrieve 等服务器状态为“已连接”4. Agent 核心逻辑与代码详解现在所有“武器”都已就位。我们来剖析 Strands Agents 如何用极简的代码将它们组织成一个能自主工作的智能体。核心逻辑位于后端应用代码中。4.1 模型集成连接 DeepSeek-R1Strands Agents 通过Model Provider抽象来支持多种模型。以下代码展示了如何配置一个兼容 OpenAI 接口的模型这里使用硅基流动托管的 DeepSeek-R1。from strands.models import OpenAIModel def _get_model(self, model_id, thinking, thinking_budget, max_tokens1024, temperature0.7): 根据提供商获取适当的模型 if self.model_provider openai: # 关键配置将 base_url 指向硅基流动的端点 return OpenAIModel( client_args{ api_key: self.api_key, # 从环境变量读取 base_url: https://api.siliconflow.cn/v1 }, model_iddeepseek-ai/DeepSeek-R1, # 指定模型 params{ max_tokens: max_tokens, temperature: temperature, } ) # 还可以添加其他 provider如 bedrock elif self.model_provider bedrock: # ... 配置 Amazon Bedrock 模型关键点base_url必须正确指向模型服务提供商的端点。对于中国区用户硅基流动是一个稳定且合规的选择。model_id需要与提供商支持的模型名称一致。thinking和thinking_budget参数用于启用模型的“思考链”功能这对于复杂任务规划至关重要。4.2 工具集成MCP 客户端Strands Agents 内置了 MCP 客户端支持多种传输方式连接 MCP 服务器。下面的connect_to_server方法封装了三种常见连接方式from strands.mcp import MCPClient from strands.mcp.transports.stdio import stdio_client, StdioServerParameters from strands.mcp.transports.sse import sse_client from strands.mcp.transports.streamable_http import streamablehttp_client 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的远程服务器 (如我们的知识库服务) if http_type sse: headers {Authorization: fBearer {token}} if token else None mcp_client MCPClient(lambda: sse_client(server_url, headersheaders)) elif http_type streamable_http: headers {Authorization: fBearer {token}} if token else None mcp_client MCPClient(lambda: streamablehttp_client(server_url, headersheaders)) else: # 基于Stdio的本地服务器 (如time, s3-upload) params StdioServerParameters( commandcommand, # 例如 “uvx” argsserver_script_args, # 例如 [“mcp-server-time”] envserver_script_envs # 环境变量 ) mcp_client MCPClient(lambda: stdio_client(params)) # 启动服务器连接 mcp_client.start() return mcp_client代码解读Stdio 模式用于连接与 Agent 运行在同一容器内的工具如time。Agent 会启动一个子进程来运行 MCP Server 命令。SSE/Streamable HTTP 模式用于连接远程 HTTP 服务如我们部署的retrieve知识库服务。需要提供 URL 和可选的认证 Token。统一抽象无论哪种方式最终都返回一个MCPClient对象Agent 可以统一地通过它来发现和调用工具。4.3 创建智能体组装大脑与工具这是最核心的部分展示了如何用寥寥数行代码创建一个功能完整的 Agent。from strands import Agent from strands.managers import SlidingWindowConversationManager from strands_tools import mem0_memory async def _create_agent_with_tools(self, model_id, messages, mcp_clientsNone, mcp_server_idsNone, system_promptNone, thinkingTrue, thinking_budget4096, max_tokens16000, temperature0.7): 创建带有MCP工具的Strands代理 # 1. 创建MCP工具列表 tools [] if mcp_clients: for client in mcp_clients: # 从MCP客户端获取其暴露的所有工具 tools.extend(await client.list_tools()) # 2. 添加内置记忆工具 tools.append(mem0_memory) # 3. 获取模型实例 model self._get_model(model_id, thinkingthinking, thinking_budgetthinking_budget, max_tokensmax_tokens, temperaturetemperature) # 4. 创建并返回Agent实例 agent Agent( modelmodel, # 大脑DeepSeek-R1 messagesmessages, # 对话历史/初始消息 conversation_managerSlidingWindowConversationManager( window_size8192, # 管理上下文长度防止溢出 ), system_promptsystem_prompt or You are a helpful assistant., # 系统角色设定 toolstools # 可用的工具手 ) return agent关键组件解释model: Agent 的“大脑”负责思考、规划和决策。conversation_manager: 管理对话上下文。SlidingWindowConversationManager会确保上下文 token 数不超过设定值这对于长对话至关重要。system_prompt: 定义 Agent 的角色和行为准则。这是引导 Agent 行为的关键我们会在测试环节详细定制。tools: Agent 可以调用的所有工具列表。Strands 会自动将工具的描述信息格式化后提供给模型模型在需要时会自主决定调用哪个工具。4.4 可观测性集成接入 Langfuse生产环境必须监控 Agent 的运行情况。Strands Agents 通过 OpenTelemetry 协议原生支持可观测性。只需配置环境变量即可将追踪数据发送到 Langfuse。import base64 import os # 从环境变量读取 Langfuse 配置 public_key os.environ.get(LANGFUSE_PUBLIC_KEY) secret_key os.environ.get(LANGFUSE_SECRET_KEY) otel_endpoint f{os.environ.get(LANGFUSE_HOST)}/api/public/otel/v1/traces # 构造 Basic Auth Token auth_token base64.b64encode(f{public_key}:{secret_key}.encode()).decode() # 设置 OpenTelemetry 环境变量 os.environ[OTEL_EXPORTER_OTLP_ENDPOINT] otel_endpoint os.environ[OTEL_EXPORTER_OTLP_HEADERS] fAuthorizationBasic {auth_token} # 后续 Strands Agent 的调用将自动发送追踪数据配置完成后在 Langfuse 界面中你可以看到每一次用户会话的完整追踪链包括模型调用的输入/输出、耗时和 Token 消耗。每个工具调用的请求和响应。Agent 内部的“思考”过程如果模型支持。自定义的标签和评分。5. 运行测试与结果验证现在让我们来实际运行这个 Agent体验它如何完成“制作课件”的复杂任务。5.1 首次会话建立用户记忆首先我们进行一轮简单的问答让 Agent 了解用户的兴趣点这些信息会被存入记忆。在前端左侧Chat Settings中Model: 选择DeepSeek-R1-Pro。Max Tokens: 设置为16000确保有足够长度生成复杂内容。在对话框输入厄尔尼诺对海洋生物有什么影响Agent 会调用模型生成回答并自动调用mem0_memory工具将本次问答的关键信息存储起来。再问一个问题它会影响农业生产和粮食安全吗Agent 再次回答并存储记忆。这两轮对话为后续任务提供了宝贵的上下文。记忆系统会基于语义在后续任务中检索出“该用户关心厄尔尼诺对生态和农业的影响”这一信息。5.2 核心任务生成互动课件现在我们下达最终任务。在左侧System Prompt输入框粘贴我们精心设计的系统指令你是一位深度研究助手请在单次回复中使用可用的最大计算能力尽可能深入、批判性和创造性地思考花费必要的时间和资源来得出最高质量的答案。 在收到工具结果后仔细反思其质量并在继续之前确定最佳下一步。使用你的思考基于这些新信息进行规划和迭代然后采取最佳的下一步行动。 ## 你必须遵循以下指令: – 每次先使用mem0_memory工具查看是否有与当前问题相关的历史记忆如果有提取记忆用于当前任务的内容生成。 – 请使用time工具确定你现在的真实时间。 – 如果引用了其他网站的图片确保图片真实存在并且可以访问。 – 如果用户要求编写动画请使用Canvas js编写嵌入到HTML代码文件中。 – 生成代码文件请直接上传到s3并返回访问链接给用户 – 使用text_similarity_search工具去检索厄尔尼诺相关的知识 – 如有需要也可以使用Web search去检索更多外部信息 – 使用minimax绘图工具会返回一个公开访问的URL在HTML用可以直接嵌入在对话框输入任务指令你是一名大学地理教师请为大学生设计一堂关于厄尔尼诺现象的互动课程需要1. 搜索最新气候数据和相关新闻事件2. 搜索教学资源和真实图片3. 使用工具绘制课程中的需要的演示插图4. 生成完整课程方案包括教学目标、活动设计、教学资源和评估方法5. 设计一个展示厄尔尼诺现象的酷炫动画并和搜索到的相关信息一起集成到HTML课件中。5.3 观察 Agent 的执行过程发送指令后你可以在界面右侧看到 Agent 的完整执行链条Thinking Trace思考与规划模型首先理解任务并制定一个多步骤计划。调用记忆首先调用mem0_memory工具检索之前关于“海洋生物”和“农业”的记忆并将其融入课件设计考量。获取时间调用time工具确保搜索的是最新信息。知识检索调用retrieve工具连接 OpenSearch 知识库获取厄尔尼诺的基础科学知识。网络搜索调用bocha-search-mcp工具搜索互联网上的最新新闻和案例。绘制插图调用MiniMax工具根据内容生成“厄尔尼诺海温异常示意图”等图片。生成课件模型综合所有信息编写包含教学目标、活动、评估方法的课程方案并生成一个带有 Canvas JS 动画的 HTML 文件。上传文件调用s3-upload工具将 HTML 文件上传至 S3。返回结果Agent 最终返回一段总结并附上存储在 S3 上的课件访问链接。点击链接你将在浏览器中打开一个完整的、包含文字、图片、动画和互动元素的 HTML 课件。5.4 在 Langfuse 中分析运行情况同时打开 Langfuse 控制台你可以找到这次会话的追踪记录。点击进入详情可以看到总耗时和总 Token 消耗。每一步的耗时分解模型思考、每个工具调用各花了多少时间。详细的输入输出查看模型每一次“思考”的内容以及每个工具调用的具体请求和响应数据。Token 使用情况区分了输入 Token 和输出 Token。这些数据对于优化提示词、调整工具调用策略、评估成本和性能至关重要。6. 生产环境考量与常见问题排查将原型转化为生产可用的服务还需要考虑以下几个方面。6.1 安全与合规凭证管理切勿在前端或代码中硬编码 API Key 或 AWS 凭证。应使用 AWS Secrets Manager 或 Parameter Store 来存储和轮转密钥并通过 IAM 角色为 ECS 任务赋予最小必要权限。输入/输出过滤在 Agent 调用模型前和后应加入内容安全层过滤有害、偏见或不合规的输入和输出。可以利用 Amazon Bedrock 的 Guardrails 功能或自行实现过滤逻辑。工具权限控制通过 MCP 服务器的设计实现工具级别的权限隔离。例如只为特定的用户或任务开放s3-upload工具的写入权限。审计日志确保所有 Agent 的操作、工具调用、模型请求都被完整记录并存入不可篡改的日志系统如 Amazon CloudWatch Logs以满足合规审计要求。6.2 性能与成本优化优化方向具体措施说明模型选择根据任务复杂度选择模型简单分类/提取可用小模型如 DeepSeek-Coder复杂规划/创作再用大模型如 DeepSeek-R1。利用 Strands 支持多模型的特性实现路由。上下文管理使用SlidingWindowConversationManager严格控制上下文长度避免不必要的 Token 消耗。对于知识库信息优先使用检索RAG而非全部塞入上下文。缓存策略对频繁查询的工具结果进行缓存例如对知识库的相似性搜索结果、或固定的 API 响应可以使用 Amazon ElastiCache (Redis) 进行缓存减少重复调用和延迟。异步处理对耗时长的工具调用采用异步模式对于生成图片、处理大量数据等耗时操作可以让 Agent 发起异步任务并通过回调或轮询获取结果避免阻塞主循环。监控告警基于 Langfuse 数据设置告警监控平均响应时间、Token 消耗速率、工具调用失败率等指标设置 CloudWatch 告警。6.3 常见问题排查清单在开发和运行过程中你可能会遇到以下问题问题现象可能原因排查步骤Agent 不调用任何工具直接生成回答。1. 系统提示词未明确要求使用工具。2. 模型能力不足无法理解工具调用。3. 工具描述不够清晰。1. 检查并强化系统提示词明确指令如“你必须使用提供的工具”。2. 尝试更换更强推理能力的模型如 DeepSeek-R1。3. 在 Langfuse 中查看模型收到的工具描述是否完整。特定工具调用失败。1. MCP Server 配置错误命令、路径、环境变量。2. 网络或权限问题。3. 工具服务本身异常。1. 在前端 MCP Servers 列表检查该 Server 状态是否为“已连接”。2. 查看 ECS 任务日志中该 MCP Server 子进程的启动日志。3. 直接测试工具对应的 API 或命令是否可用。记忆工具不生效检索不到历史。1. Aurora PostgreSQL 连接失败。2. Embedding 模型 API 调用失败。3. 向量维度不匹配。1. 检查POSTGRESQL_HOST等环境变量是否正确在 ECS 容器内测试数据库连通性。2. 检查EMBEDDING_MODEL_API_KEY是否有权限且额度充足。3. 确认pg_vector插件已安装且创建的向量列维度与 BGE-M3 模型输出1024维一致。响应速度非常慢。1. 模型 API 响应慢。2. 某个工具调用超时。3. 上下文过长导致模型处理慢。1. 在 Langfuse 中查看各步骤耗时定位瓶颈。2. 为工具调用设置合理的超时时间。3. 检查conversation_manager的window_size设置避免历史消息过多。Langfuse 中看不到追踪数据。1. 环境变量LANGFUSE_*未正确设置。2. 网络出口限制无法访问 Langfuse 端点。1. 确认.env文件已加载且环境变量已注入容器。2. 考虑在亚马逊云科技中国区内私有化部署 Langfuse。7. 扩展方向与最佳实践基于此基础方案你可以向多个方向进行扩展构建更强大、更专业的 Agentic AI 应用。1. 复杂工作流与多智能体协作Strands Agents 支持创建多个 Agent 并定义它们之间的协作关系。例如可以创建一个“研究员”Agent 负责信息搜集一个“编剧”Agent 负责内容创作一个“审核员”Agent 负责安全检查让它们通过消息队列或直接调用进行协作共同完成一个视频脚本创作任务。2. 动态工具发现与注册在生产环境中工具可能是动态增减的。你可以构建一个“工具网关”服务所有工具都在此注册。Agent 启动时或定期从网关拉取可用工具列表从而实现工具的热插拔而无需重启 Agent 服务。3. 强化记忆与个性化当前的记忆系统是基于会话和用户的。可以进一步扩展分层记忆实现短期当前会话、工作当前任务、长期用户档案的分层记忆结构。记忆总结与压缩定期对长期记忆进行总结压缩成关键点节省向量存储空间和检索时间。记忆重要性评分让模型或规则对记忆条目进行评分优先保留高价值记忆。4. 人机协同与审批链对于关键操作如发布内容、执行支付、修改数据库不应完全由 Agent 自主执行。可以设计审批链在 Agent 建议行动后插入人工审批节点或由另一个“监管”Agent 进行复核确保安全可控。5. 持续评估与优化建立 Agent 的评估体系定义评估指标如任务完成率、结果准确性、用户满意度、平均耗时、成本等。A/B 测试对比不同提示词、不同模型、不同工作流的效果。基于反馈的学习收集用户的正负反馈并将其作为优化记忆或调整提示词的依据。构建 Agentic AI 应用是一个系统工程其核心价值在于通过“感知-思考-行动-反思”的闭环让智能体在复杂环境中持续学习和进化从而产生“复利”效应。Strands Agents 框架降低了工程上的复杂度让开发者能更专注于业务逻辑和智能体行为的设计。从这个小型的课件生成 Agent 开始逐步迭代你将能够打造出真正理解目标、自主规划、并可靠执行的下一代智能应用。 30款热门AI模型一站整合DeepSeek/GLM/Qwen 随心用限时 5 折。 点击领海量免费额度