构建一个可投入生产环境处理实际用例的AI Agent,绝非易事。尽管构建概念验证模型已能够初步展现潜力,但要想将其投入生产应用,就必须解决一系列并未在开发环境显露出来的问题,包括可扩展性、安全性、可观测性以及运维相关问题。
本文将以一个客服Agent从简单的本地原型,逐步发展为一套可支持多用户并发使用、满足安全要求与性能标准的企业级解决方案为例,介绍Amazon Bedrock AgentCore如何将Agentic应用从实验性的概念验证模型,构建为可投入生产的系统。
Amazon Bedrock AgentCore是一套全面的服务套件,旨在帮助构建、部署和扩展Agentic AI应用。如果您刚接触AgentCore,建议您先阅读相关深度解析文章,了解其中各项服务:
AgentCore Runtime:四行代码即可安全启动与扩展Agent
AgentCore Gateway:重塑企业级AI Agent工具开发格局
AgentCore Identity:大规模保障Agentic AI安全性
https://aws.amazon.com/blogs/machine-learning/introducing-amazon-bedrock-agentcore-identity-securing-agentic-ai-at-scale/
AgentCore Memory:构建具备上下文感知能力的Agent
https://aws.amazon.com/blogs/machine-learning/amazon-bedrock-agentcore-memory-building-context-aware-agents/
AgentCore Observability:洞察生产环境中的Agent行为
https://aws.amazon.com/blogs/machine-learning/build-trustworthy-ai-agents-with-amazon-bedrock-agentcore-observability/
本文将演示上述服务如何在实际场景中协作,共同构建一套功能完备的生产级系统。
开发客服Agent
现代企业每天要处理成千上万条客户咨询,从简单的策略咨询到复杂的技术故障排查应有尽有。而传统方案往往难以奏效:基于规则的聊天机器人回复刻板,无法令客户满意;纯人工支持团队则面临可扩展性不足与服务一致性差等问题。因此,客户支持成为Agentic AI最具普遍性且极具价值的应用场景之一。

*图片源自亚马逊云科技官网
一个智能客服Agent需要无缝应对各种场景,包括管理客户订单与账户、查询退换货策略、检索产品目录、通过网络搜索排查技术问题,以及在多次交互中记住客户偏好。最重要的是,它在完成这些工作的同时,还必须满足企业级的安全性和可靠性。
以下是许多企业在构建此类Agent时通常会遵循的路径:
1.概念验证阶段:团队通常从一个简单的本地原型着手,验证其核心功能,例如能回答策略问题、检索产品信息的基础Agent。该原型在演示时效果不错,但缺乏应对实际客户交互所需的稳定性。
2.现实检验阶段:一旦尝试将测试用户规模扩大,挑战便会接踵而至:Agent会遗忘过往对话内容、负载增加下的工具不再可靠、无法监控性能,而安全性也成为首要顾虑。
3.生产落地阶段:企业必须要先解决会话管理、安全工具共享、可观测性、身份验证等问题,并且还要构建客户乐意使用的交互界面,才能将Agent真正投入生产应用。但解决这些问题极具挑战性,导致许多前景良好的概念验证项目都在这一阶段停滞不前。
本文将提供系统性解决上述挑战的方案。
首先从一个配备了以下三项核心工具的原型Agent入手:
退换货策略查询工具。
产品信息搜索工具。
用于故障排查的网页搜索工具。
在此基础上,逐步添加投入生产部署所需的功能:
用于保证对话连贯性与超个性化体验的持久化记忆功能。
用于保障可靠性与安全性的集中式工具管理功能。
用于监控与调试的全面可观测性功能。
最终搭建面向客户的网页交互界面。
这一开发过程复刻了从概念验证到生产落地的真实路径,清晰展示了Amazon Bedrock AgentCore各项服务如何协作,解决Agent应用在迈向落地应用的过程中出现的各种运维挑战。
为简化演示与便于说明,本解决方案采用单Agent架构,Amazon Bedrock AgentCore服务同样支持采用多Agent架构的客服Agent,您可放心构建。
*图片源自亚马逊云科技官网
解决方案概览
任何投入生产应用的系统都始于概念验证,客服Agent也不例外。在这一初始阶段,本例将构建一个功能原型,用以演示客户支持所需的核心能力。
使用开源Agent框架Strands Agents构建概念验证,并采用Amazon Bedrock上的Anthropic Claude 3.7 Sonnet作为驱动Agent的大语言模型(LLM)。您可根据自身情况,选用其他Agent框架与模型。
*图片源自Strands Agents官网
Agent需借助工具来执行操作,并与实时系统进行交互。客服Agent会用到多款工具,但为简化说明,本例聚焦三项核心功能,以处理最常见的客户咨询:
1.退换货策略查询:客户经常咨询退换货时限、条件及流程。该工具可根据产品类别提供结构化的策略信息,涵盖退换货时限、退款处理方式及运费策略等。
2.产品信息检索:技术规格、保修详情与兼容性信息,对于客户的购前咨询和故障排查均至关重要。该工具可对接产品目录,向客户提供格式清晰、易于理解的技术细节信息。
3.网页搜索故障排查:解决复杂的技术问题往往需要内部文档未收录的最新解决方案或社区生成的修复方案。网页搜索功能支持Agent实时访问网络,获取当前最新的故障排查指南与技术解决方案。
本例的工具实现方式及端到端完整代码已上传至GitHub代码库。本文将重点介绍与Amazon Bedrock AgentCore对接的核心代码,您可通过该代码库查看完整实现流程。
GitHub代码库:
https://github.com/awslabs/amazon-bedrock-agentcore-samples/tree/main/01-tutorials/07-AgentCore-E2E
创建Agent
借助这些可用工具,现在开始创建Agent。概念验证阶段的架构如下图所示。
为演示简洁,此处仅展示核心代码,您可在GitHub代码库中获取端到端的完整代码。
GitHub代码库:
https://github.com/awslabs/amazon-bedrock-agentcore-samples/tree/main/01-tutorials/07-AgentCore-E2E
from strands import Agentfrom strands.models import BedrockModeldef get_return_policy(product_category: str) -> str:"""Get return policy information for a specific product category."""# Returns structured policy info: windows, conditions, processes, refunds# check github for full codereturn{"return_window": "10 days", "conditions": ""}def get_product_info(product_type: str) -> str:"""Get detailed technical specifications and information for electronics products."""# Returns warranty, specs, features, compatibility details# check github for full codereturn{"product": "ThinkPad X1 Carbon", "info": "ThinkPad X1 Carbon info"}def web_search(keywords: str, region: str = "us-en", max_results: int = 5) -> str:"""Search the web for updated troubleshooting information."""# Provides access to current technical solutions and guides# check github for full codereturn "results from websearch"# Initialize the Bedrock modelmodel = BedrockModel(model_id="us.anthropic.claude-3-7-sonnet-20250219-v1:0",temperature=0.3)# Create the customer support agentagent = Agent(model=model,tools=[get_product_info,get_return_policy,web_search],system_prompt="""You are a helpful customer support assistant for an electronics company.Use the appropriate tools to provide accurate information and always offer additional help.""")
左右滑动查看完整示意
测试概念验证原型
本例使用真实客户咨询测试原型Agent时,该Agent展现出了正确选择工具,并与现实系统进行交互的能力。
# Return policy inquiryresponse = agent("What's the return policy for my ThinkPad X1 Carbon?")# Agent correctly uses get_return_policy with "laptops" category# Technical troubleshootingresponse = agent("My iPhone 14 heats up, how do I fix it?")# Agent uses web_search to find current troubleshooting solutions
左右滑动查看完整示意
处理单个客户咨询时,该Agent表现良好,能将相关咨询准确匹配到退换货策略查询工具,将复杂技术问题映射到网页搜索工具,并提供全面且可操作的回复。
概念验证的现实检验
概念验证已成功证明,借助恰当的工具组合与推理能力,Agent能够处理各类客户支持场景,并且可在本地机器上流畅运行、正确处理查询。
然而,这也凸显出了概念验证与实际应用之间的差距。虽然在Agent代码中,工具被定义为本地函数,使得Agent响应迅速,一切看似都已具备投入生产应用的条件,然而一旦跳出单用户测试的范畴,以下几项关键性局限便会显现:
1.会话间记忆丢失:若重启笔记本或应用程序,Agent将完全忘记之前的对话内容。例如,昨天已经咨询过笔记本电脑退换货事宜的客户,今天又得重新完整说明情况。这不仅破坏了对话连贯性,更会为客户带来糟糕的体验。
2.仅支持单客户局限:当前的Agent一次只能处理一个对话。如果两名客户同时使用系统,客户对话就会相互干扰;更严重的是,由于系统目前尚不具备为不同用户维护独立对话上下文的机制,导致一名客户甚至可能看到另一名客户的历史对话。
3.工具内嵌入代码:工具是直接定义在Agent代码内,这会导致以下问题:
无法在不同Agent(如销售Agent、技术支持Agent等)间复用这些工具。
更新工具需修改Agent代码,并重新部署整个系统。
不同团队无法独立维护各自负责的工具。
4.缺乏生产级基础设施:Agent仅在本地运行,未考虑可扩展性、安全性、监控能力与可靠性等生产环境必需的要素。
这些根本性的架构障碍会阻碍Agent在真实场景中的部署应用,而Agent开发团队可能需要数月时间才能解决这些问题,这不仅会延长其工作成果产出时间,还会大幅增加应用成本。
对此,Amazon Bedrock AgentCore服务则至关重要:可提供托管服务,系统性地填补每一项短板,让开发团队无需再花费数月时间从零构建这些生产级能力。
下面将从解决记忆问题入手,开启Agent向生产应用迈进的征程。
借助Amazon Bedrock AgentCore Memory,可将每次对话后都会遗忘所有内容的Agent,转变为能跨对话记住客户信息的Agent,并能够基于这些信息实现超个性化的对话交互。
为超个性化Agent
添加持久化记忆功能
概念验证阶段显现的首个主要问题为记忆丢失,即Agent在会话间隔期间会忘掉所有信息,导致客户每次都必须重复说明情况。这种只有“几秒”记忆的“金鱼式Agent”的表现,会彻底破坏AI Agent的对话体验。
Amazon Bedrock AgentCore Memory通过提供托管式持久化记忆,从两个互补维度发挥作用,从而解决了这一问题:
短期记忆:存储即时对话上下文与基于会话的信息,保障单轮交互内的对话连贯性。
长期记忆:留存跨多轮会话提取的持久化信息,包括客户偏好、事实信息及行为模式。
为客服Agent集成Amazon Bedrock AgentCore Memory后,新架构如下图所示。
安装依赖项
开始之前,先安装所需的依赖项:
boto3
AgentCore SDK
AgentCore Starter Toolkit SDK
这些依赖项将有助于快速为概念验证阶段的Agent,添加Amazon Bedrock AgentCore功能。请参考以下代码。
pip install boto3 bedrock-agentcore bedrock-agentcore-starter-toolkit
左右滑动查看完整示意
创建记忆资源
Amazon Bedrock AgentCore Memory采用可配置的策略,来确定需要提取和存储的信息。针对客户支持用例,本方案使用两种互补策略:
USER_PREFERENCE:自动提取并存储客户偏好信息,例如“使用Linux系统”或“玩竞技类FPS游戏”,这将有助于在多轮对话中为客户提供个性化推荐。
SEMANTIC:通过向量嵌入技术捕获事实性信息,例如“客户有一台订单号为MB-78432的电脑”或“在视频编辑过程中出现了过热问题”,这能够为故障排查提供相关信息。
请参考以下代码。
from bedrock_agentcore.memory import MemoryClientfrom bedrock_agentcore.memory.constants import StrategyTypememory_client = MemoryClient(region_name=region)strategies = [{StrategyType.USER_PREFERENCE.value: {"name": "CustomerPreferences","description": "Captures customer preferences and behavior","namespaces": ["support/customer/{actorId}/preferences"],}},{StrategyType.SEMANTIC.value: {"name": "CustomerSupportSemantic","description": "Stores facts from conversations","namespaces": ["support/customer/{actorId}/semantic"],}},]# Create memory resource with both strategiesresponse = memory_client.create_memory_and_wait(name="CustomerSupportMemory",description="Customer support agent memory",strategies=strategies,event_expiry_days=90,)
左右滑动查看完整示意
集成Strands Agents hooks
实现无缝运行记忆功能的关键在于自动化,即让客户无需操心,Agent也无需手动管理记忆。
Strands Agents提供了强大的hook系统,允许拦截Agent生命周期事件并自动处理记忆操作。该hook系统通过强类型事件回调,使内置组件和用户代码都能对Agent行为做出反应或进行修改。
针对本用例,创建了CustomerSupportMemoryHooks来检索客户上下文并保存交互信息:
MessageAddedEvent hook:客户发送消息时触发该hook,它会自动检索相关记忆上下文,并将其注入查询。Agent无需人工干预,即可同时获取客户问题和相关历史上下文。
AfterInvocationEvent hook:Agent响应后触发该hook,它会自动将交互信息保存到记忆中,对话内容也会立即成为客户持久历史记录的一部分。
请参考以下代码。
class CustomerSupportMemoryHooks(HookProvider):def retrieve_customer_context(self, event: MessageAddedEvent):"""Inject customer context before processing queries"""user_query = event.agent.messages[-1]["content"][0]["text"]# Retrieve relevant memories from both strategiesall_context = []for context_type, namespace in self.namespaces.items():memories = self.client.retrieve_memories(memory_id=self.memory_id,namespace=namespace.format(actorId=self.actor_id),query=user_query,top_k=3,)# Format and add to contextfor memory in memories:if memory.get("content", {}).get("text"):all_context.append(f"[{context_type.upper()}] {memory['content']['text']}")# Inject context into the user queryif all_context:context_text = "\n".join(all_context)original_text = event.agent.messages[-1]["content"][0]["text"]event.agent.messages[-1]["content"][0]["text"] = f"Customer Context:\n{context_text}\n\n{original_text}"def save_support_interaction(self, event: AfterInvocationEvent):"""Save interactions after agent responses"""# Get last customer query and agent response check github for implementationcustomer_query = "This is a sample query"agent_response = "LLM gave a sample response"# Extract customer query and agent response# Save to memory forfuture retrievalself.client.create_event(memory_id=self.memory_id,actor_id=self.actor_id,session_id=self.session_id,messages=[(customer_query, "USER"), (agent_response, "ASSISTANT")])
左右滑动查看完整示意
从这段代码中可以看到,正是这些hook与Amazon Bedrock AgentCore Memory进行交互,从而保存和检索记忆事件。
集成Agent与记忆功能
为现有Agent添加记忆功能只需对代码进行极小改动:仅对记忆hook进行实例化处理,并将其传递给Agent构造函数即可。之后,Agent代码只需与记忆hook建立连接,便可充分利用Amazon Bedrock AgentCore Memory的全部功能。
本例将为每个会话创建一个新的hook,有助于处理不同的客户交互。请参考以下代码。
# Create memory hooks forthis customer sessionmemory_hooks = CustomerSupportMemoryHooks(memory_id=memory_id,client=memory_client,actor_id=customer_id,session_id=session_id)# Create agent with memory capabilitiesagent = Agent(model=model,tools=[get_product_info, get_return_policy, web_search],system_prompt=SYSTEM_PROMPT)
左右滑动查看完整示意
测试记忆功能的运行效果
本节将介绍记忆功能如何改变客户体验。
调用Agent时,它会利用历史交互中的记忆信息,呈现客户在游戏耳机、笔记本电脑以及散热问题等方面的兴趣。
# Test personalized recommendationsresponse = agent("Which headphones would you recommend?")# Agent remembers: "prefers low latency for competitive FPS games"# Response includes gaming-focused recommendations# Test preference recallresponse = agent("What is my preferred laptop brand?")# Agent remembers: "prefers ThinkPad models"and"needs Linux compatibility"# Response acknowledges ThinkPad preference and suggests compatible models
左右滑动查看完整示意
这种改变立竿见影,Agent不再给出千篇一律的回复,而是能够基于客户明确表达的偏好及过往交互记录,提供个性化推荐。客户也无需重复说明自己的具体需求,Agent对其早已了然于心。
AgentCore Memory优势
集成Amazon Bedrock AgentCore Memory后,Agent现已具备以下优势:
对话连贯性:即使在不同会话或支持渠道之间切换,客户也能接着之前的对话继续交流。
个性化服务:根据客户个人偏好及历史问题,量身定制推荐内容和回复。
上下文故障排查:可调取历史问题及解决方案,提供更高效的支持服务。
无缝体验:自动完成记忆操作,无需客户与Agent干预。
但是,目前仍有一些问题亟待解决:
工具依旧嵌入在Agent代码中,无法在不同的支持类Agent或团队间复用。
安全性与访问控制措施较为薄弱。
在生产环境中,仍无法同时处理多位客户的请求。
下部分内容则将介绍如何应对这些挑战:借助Amazon Bedrock AgentCore Gateway集中管理工具,并利用Amazon Bedrock AgentCore Identity搭建完善的身份管理体系,从而为客户支持系统构建可扩展、安全可靠的基础架构。
实现集中化管理工具
解决记忆问题后,下一挑战则是工具架构问题。
目前,工具是直接嵌入在Agent代码中,这种模式在原型开发阶段尚且可行,但在规模化应用时会引发严重问题:部署多个Agent时,每个Agent都会重复嵌入相同工具,导致代码冗余、行为不一致,且维护工作异常繁杂。
Amazon Bedrock AgentCore Gateway可将工具集中为可复用的安全端点,供各Agent调用,从而简化了这一流程。结合用于身份验证的Amazon Bedrock AgentCore Identity,二者共同构建起企业级的工具共享基础设施。
下面将为Agent接入Amazon Bedrock AgentCore Gateway和Amazon Bedrock AgentCore Identity,更新后的架构如下图所示。
本例将网页搜索工具改造为可在网关中使用的形式,同时将退换货策略查询工具与产品信息查询工具保留在该Agent本地。由于网页搜索是一项可在企业内部不同用例中复用的通用能力,而退换货策略查询与产品信息查询功能则通常与客户支持服务紧密相关,因此这一设计十分关键。
借助Amazon Bedrock AgentCore服务,您可自行决定使用哪些功能以及如何组合这些功能。
本例还引入了两个可能由其他团队开发的新工具:保修查询工具与客户档案查询工具。由于团队已通过Amazon Lambda函数将这些工具对外开放,因此可将其作为目标端点接入Amazon Bedrock AgentCore Gateway。
此外,Amazon Bedrock AgentCore Gateway还支持将REST API作为目标端点,所以如果您拥有OpenAPI规范或Smithy模型,也能通过Amazon Bedrock AgentCore Gateway快速对外开放工具功能。
将现有服务转换为MCP
Amazon Bedrock AgentCore Gateway采用MCP(Model Context Protocol),来统一Agent访问工具的标准。将现有Lambda函数转换为MCP端点所需的改动极少,主要是添加工具架构并处理MCP上下文。
要使用这一功能,需要先将本地工具转换为Lambda函数,再创建工具架构定义,确保Agent能够识别并调用这些函数。
# Original Lambda function(simplified)def web_search(keywords: str, region: str = "us-en", max_results: int = 5) -> str:# web_search functionalitydef lambda_handler(event, context):ifget_tool_name(event)== "web_search":query = get_named_parameter(event=event, name="query")search_result = web_search(keywords)return {"statusCode": 200, "body": search_result}
左右滑动查看完整示意
以下是工具架构定义的代码。
{"name": "web_search","description": "Search the web for updated information using DuckDuckGo","inputSchema": {"type": "object","properties": {"keywords": {"type": "string","description": "The search query keywords"},"region": {"type": "string","description": "The search region (e.g., us-en, uk-en, ru-ru)"},"max_results": {"type": "integer","description": "The maximum number of results to return"}},"required": ["keywords"]}}
左右滑动查看完整示意
为便于演示,本示例将从零开始构建一个新的Lambda函数。但在实际场景中,企业通常以REST服务或Lambda函数形式提供的各类功能。采用这种方法,无需重新构建这些功能,即可将现有的企业级服务作为Agent工具对外开放。
配置安全性
集成AgentCore Identity
Amazon Bedrock AgentCore Gateway要求对入站和出站连接均进行身份验证,Amazon Bedrock AgentCore Identity通过标准的OAuth流程来实现身份验证机制。完成OAuth授权配置后,您可以创建新的网关,并将该配置传递给它。
请参考以下代码。
# Create gateway with JWT-based authenticationauth_config = {"customJWTAuthorizer": {"allowedClients": [cognito_client_id],"discoveryUrl": cognito_discovery_url}}gateway_response = gateway_client.create_gateway(name="customersupport-gw",roleArn=gateway_iam_role,protocolType="MCP",authorizerType="CUSTOM_JWT",authorizerConfiguration=auth_config,description="Customer Support AgentCore Gateway")
左右滑动查看完整示意
针对入站认证,Agent必须提供有效的JSON Web Token(JWT),才能访问Amazon Bedrock AgentCore Gateway工具。JWT是一种简洁、自包含的标准,能在各方之间安全传输信息,保障身份验证的可靠性,您可从Amazon Cognito、Okta、EntraID等身份提供商获取。
针对出站认证,Amazon Bedrock AgentCore Gateway可通过Amazon IAM角色、API密钥或OAuth token,对下游服务进行身份验证。
本例创建了一个带有虚拟用户名和密码的Amazon Cognito用户池。在实际应用中,您应选择合适的身份提供商,并对用户进行规范管理。该配置可确保只有经过授权的Agent才能访问特定工具,并提供完整的审计跟踪记录,以便追溯工具调用行为。
添加Lambda目标工具
完成Amazon Bedrock AgentCore Gateway设置后,将Lambda函数添加为工具目标,这一操作十分简单。
lambda_target_config = {"mcp": {"lambda": {"lambdaArn": lambda_function_arn,"toolSchema": {"inlinePayload": api_spec},}}}gateway_client.create_gateway_target(gatewayIdentifier=gateway_id,name="LambdaTools",targetConfiguration=lambda_target_config,credentialProviderConfigurations=[{"credentialProviderType": "GATEWAY_IAM_ROLE"}])
左右滑动查看完整示意
至此,Amazon Bedrock AgentCore Gateway已将Lambda函数作为MCP工具对外开放,可供经过授权的Agent发现并使用。
将MCP工具与Strands Agents集成
要将Agent转换为使用集中化工具,则需要更新工具配置。您可保留部分本地工具,例如仅适用于客户支持的产品信息查询和退换货策略查询工具(其他应用场景大概率不会复用这些工具),同时使用集中式工具来处理共享功能。
由于Strands Agents原生支持MCP工具集成,因此只需通过Strands的MCPClient搭配streamablehttp_client即可实现集成。请参考以下代码。
# Get OAuth token for gateway accessgateway_access_token = get_token(client_id=cognito_client_id,client_secret=cognito_client_secret,scope=auth_scope,url=token_url)# Create authenticated MCP clientmcp_client = MCPClient(lambda: streamablehttp_client(gateway_url,headers={"Authorization": f"Bearer {gateway_access_token['access_token']}"}))# Combine local and MCP toolstools = [get_product_info, # Local tool (customer support specific)get_return_policy, # Local tool (customer support specific)] + mcp_client.list_tools_sync() # Centralized tools from gatewayagent = Agent(model=model,tools=tools,hooks=[memory_hooks],system_prompt=SYSTEM_PROMPT)
左右滑动查看完整示意
测试升级版Agent
集成集中化工具后,Agent现已可调用保修查询等企业级功能。
# Test web search using centralized toolresponse = agent("How can I fix Lenovo ThinkPad with a blue screen?")# Agent uses web_search from AgentCore Gateway
左右滑动查看完整示意
Agent能将本地工具与集中化工具无缝集成,在保障安全性与访问控制的同时,提供全面的支持功能。
但目前仍存在一项困难:整个Agent仅在本地开发机器上运行,若要部署至生产环境,还需具备可扩展的基础设施、完善的可观测性能力、且能够处理多并发用户访问。
下部分内容将介绍以下方式解决这一问题:将Agent部署到Amazon Bedrock AgentCore Runtime,借助Amazon Bedrock AgentCore Observability与自动扩展能力,将本地原型系统转化为可投入生产使用的成熟系统。
生产环境部署
实现工具集中化管理并确保安全性后,最后需要解决的问题便是生产环境部署。
当前,Agent仅在本地笔记本电脑上运行,这种方式虽然适合实验测试,但无法满足客户实际使用需求。生产环境需具备可扩展的基础设施、完善的监控机制、自动恢复故障能力,以及稳定处理多并发用户访问的能力。
借助Amazon Bedrock AgentCore Runtime,只需少量修改代码,即可将本地Agent改造为可直接投入生产使用的服务。
结合Amazon Bedrock AgentCore Observability,该Agent能提供企业级的可靠性、自动扩展能力,以及运维团队在生产环境中维护Agent应用所需的全面监控能力。
更新后的架构如下图所示。
仅需少量代码修改实现生产环境部署
将本地Agent转换为生产环境版本,仅需添加四行代码。
# Your existing agent code remains unchangedmodel = BedrockModel(model_id="us.anthropic.claude-3-7-sonnet-20250219-v1:0")memory_hooks = CustomerSupportMemoryHooks(memory_id, memory_client, actor_id, session_id)agent = Agent(model=model,tools=[get_return_policy, get_product_info],system_prompt=SYSTEM_PROMPT,hooks=[memory_hooks])def invoke(payload):user_input = payload.get("prompt", "")response = agent(user_input)return response.message["content"][0]["text"]if __name__ == "__main__":
左右滑动查看完整示意
BedrockAgentCoreApp会自动创建一个包含所需的/invocations和/ping端点的HTTP服务器,能够处理恰当的内容类型和响应格式,按照亚马逊云科技标准管理错误处理,并在Agent代码与Amazon Bedrock AgentCore Runtime之间搭起基础设施桥梁。
安全部署至生产环境
完成生产环境部署需具备完善的身份验证与访问控制机制。
Amazon Bedrock AgentCore Runtime与Amazon Bedrock AgentCore Identity集成,可提供企业级安全保障。借助Amazon Bedrock AgentCore Starter Toolkit,用户只需三步简单操作即可完成应用部署:配置、启动与调用。
配置阶段,系统会生成一个Docker文件来指导Agent的部署流程。该文件包含以下关键信息:
Agent及其依赖项的相关配置。
Amazon Bedrock AgentCore Identity认证配置。
待启用的Amazon Bedrock AgentCore Observability配置。
启动阶段,会通过Amazon CodeBuild执行上述Docker文件,并创建一个Amazon ECR来存储Agent依赖项。随后,利用Amazon ECR存储库中的镜像创建Amazon Bedrock AgentCore Runtime Agent,并生成一个调用端点,供应用程序调用Agent。
若Agent已通过Amazon Bedrock AgentCore Identity配置了OAuth认证,则在调用阶段还需传递身份验证token。
完整流程如下图所示。
在Amazon Bedrock AgentCore Runtime中,配置并启动Agent的代码如下。
from bedrock_agentcore_starter_toolkit import Runtime# Configure secure deployment with Cognito authenticationagentcore_runtime = Runtime()response = agentcore_runtime.configure(entrypoint="lab_helpers/lab4_runtime.py",execution_role=execution_role_arn,auto_create_ecr=True,requirements_file="requirements.txt",region=region,agent_name="customer_support_agent",authorizer_configuration={"customJWTAuthorizer": {"allowedClients": [cognito_client_id],"discoveryUrl": cognito_discovery_url,}})# Deploy to productionlaunch_result = agentcore_runtime.launch()
左右滑动查看完整示意
该配置将创建一个安全端点,该端点仅接收来自您所选身份提供商且携带有效JWT token的请求。本Agent示例使用了基于Amazon Cognito的测试配置,您可根据需求选择任意身份提供商。
整个部署流程会自动完成以下操作:将智能体打包为容器、创建所需的亚马逊云科技基础设施,并搭建监控与日志记录管道。
会话管理与隔离
对于要在生产环境中应用的Agent而言,最为关键的功能之一便是完善的会话管理。Amazon Bedrock AgentCore Runtime会自动实现会话隔离,确保不同客户的对话互不干扰。
# Customer 1 conversationresponse1 = agentcore_runtime.invoke({"prompt": "My iPhone Bluetooth isn't working. What should I do?"},bearer_token=auth_token,session_id="session-customer-1")# Customer 1 follow-up (maintains context)response2 = agentcore_runtime.invoke({"prompt": "I've turned Bluetooth on and off but it still doesn't work"},bearer_token=auth_token,session_id="session-customer-1" # Same session, context preserved)# Customer 2 conversation (completely separate)response3 = agentcore_runtime.invoke({"prompt": "Still not working. What is going on?"},bearer_token=auth_token,session_id="session-customer-2" # Different session, no context)
左右滑动查看完整示意
在客户1与Agent的后续对话中,其关于手机蓝牙问题的上下文信息将得到完整保留。而处于另一独立会话中的客户2,与Agent的对话消息中则无此上下文,因此Agent会适当向客户2询问更多信息。
对于生产环境的客户支持场景而言,这种自动会话隔离机制至关重要。
实现全面监控洞察
投入生产应用的Agent需要全面的监控机制,以便诊断问题、优化性能与确保可靠性。
Amazon Bedrock AgentCore Observability可自动为Agent代码添加检测工具,并将遥测数据发送至Amazon CloudWatch。借助Amazon CloudWatch,您能够实时分析数据模式、排查问题。可观测性数据包含会话级追踪信息,因此您可以追溯单个客户的会话交互过程,清晰了解客户支持交互期间的具体情况。
无论Agent是否托管在Amazon Bedrock AgentCore Runtime中,您均可将其与Amazon Bedrock AgentCore Observability搭配使用。由于Amazon Bedrock AgentCore Runtime已与Amazon Bedrock AgentCore Observability实现自动集成,因此无需额外操作,即可监控Agent。
通过Amazon Bedrock AgentCore Runtime完成部署后,Agent现已具备投入生产环境使用的条件。但目前仍有一项挑战需要解决:该Agent仅可通过SDK或API调用访问,意味着用户需要编写代码或使用技术工具才能与之交互。
因此,还需要构建一个用户友好型的网页界面,让用户能够通过浏览器直接访问Agent,才算真正面向用户。
下部分内容将演示完整的实现流程:通过Streamlit构建一个示例网页应用,提供直观的聊天界面,并能与已可投入生产使用的Amazon Bedrock AgentCore Runtime端点进行交互。
该端点在对外开放的同时,仍会保留从概念验证到生产部署全过程中所构建的安全性、可扩展性与可观测性能力。实际应用中,您可将此端点与现有的面向客户的应用程序及UI框架进行集成。
搭建面向客户的UI
尽管开发者可通过SDK访问Agent,但广大客户更需要一个直观的网页界面来实现流畅的支持交互。因此,将Agent部署至生产环境后,最后一步便是创建面向客户的UI,让客户能够通过该界面直接与Agent交互。
*图片源自亚马逊云科技官网
为呈现一套完整的解决方案,本例将构建一个基于Streamlit的示例网页应用程序,该应用程序可连接到已可投入生产使用的Amazon Bedrock AgentCore Runtime端点。
前端界面包含安全的Amazon Cognito身份认证功能、实时流式响应、持久化会话管理以及简洁的聊天界面。虽然本例选用Streamlit是为了快速开发原型,但在实际应用中,企业通常可将该端点集成至现有界面或偏好UI框架中。
如下图所示的端到端应用程序,可在不同会话间保持完整的对话上下文,同时具备安全性、可扩展性和可观测性能力。
最终,本例成功构建起一个完整的客户支持Agent系统,能够处理从初始身份验证到复杂多轮故障排查对话的所有环节任务,充分展示了Amazon Bedrock AgentCore服务将原型Agent转化为可落地生产的客户应用的强大能力。
总结
从原型开发到投入生产应用的实践历程,充分展现了Amazon Bedrock AgentCore攻克系列挑战,助力部署企业级Agent应用的强大能力。
最初,它只是一个简单的本地客户支持聊天机器人,最终发展成为一套功能完备的生产级系统,能够支持多并发用户访问,具备持久记忆能力、支持安全共享工具、拥有全面的可观测性,还配备直观的网页交互界面,并且无需花费数月时间进行自定义基础设施开发。
这一过程中的每一步所需的代码改动都极少,凸显了Amazon Bedrock AgentCore各模块服务如何协作,共同为颇具前景的概念验证项目扫清运维难题。
会话记忆功能可避免“金鱼式Agent” 问题——即Agent无法保留上下文。
通过Amazon Bedrock AgentCore Gateway实现的集中化工具管理,构建了可复用的基础设施,能安全支撑多种业务场景。
Amazon Bedrock AgentCore Runtime提供企业级部署能力,支持自动弹性扩展。
Amazon Bedrock AgentCore Observability则为运维团队提供了维护生产系统所需的监控能力。
您可点击观看下方视频,全面了解Amazon Bedrock AgentCore各项功能。
您可参阅完整的端到端教程,获取本文介绍的完整代码与配置,按照演示步骤构建您的专属生产级Agent。
如需了解更多使用场景与实现模式,请参阅更全面的GitHub代码库。有关服务功能和最佳实践方面的详细信息,可参阅Amazon Bedrock AgentCore文档。
端到端教程:
https://github.com/awslabs/amazon-bedrock-agentcore-samples/tree/main/01-tutorials/07-AgentCore-E2E
GitHub代码库:
https://github.com/awslabs/amazon-bedrock-agentcore-samples
Amazon Bedrock AgentCore文档:
https://docs.aws.amazon.com/bedrock-agentcore/
五折认证,一次不过,免费重考,并享受官方备考服务。加入AWS AI/ML认证挑战,考取AWS AI认证为您的未来提供动力!
本篇作者
Maira Ladeira Tanke
亚马逊云科技Agentic AI领域的技术负责人,致力于协助客户开发自主人工智能系统。Maira在人工智能与机器学习领域拥有10余年经验,她与企业客户深度合作,助力其利用Amazon Bedrock AgentCore和Strands Agents,加速Agent应用的落地应用,并帮助企业充分利用基础模型的能力,推动创新与业务变革。
听说,点完下面4个按钮
就不会碰到bug了!
点击阅读原文查看博客!获得更详细内容!

