用 Amazon Bedrock AgentCore、Managed Knowledge Base 和 Nova Sonic 构建语音旅行助手
Build a voice travel concierge with Amazon Bedrock AgentCore, Managed Knowledge Base and Nova Sonic
基于 Amazon Bedrock AgentCore、Amazon Nova 2.5 Sonic 与 Amazon Bedrock Knowledge Bases,可构建航空应用中的实时语音旅行助手,支持查询行程、改座位、更新餐食偏好、回答政策问题并转接人工客服。
航空公司已经有应用程序和网站,旅客可以在其中查看航班、选择座位和管理预订,而添加自然语音层可以让这些任务通过语音请求完成。有了这个语音层,旅客可以通过说话更改座位或查询延误,而无需离开应用程序或在多个屏幕之间导航。构建它需要在多个方面进行精心设计。你需要双向流式传输音频,并在多轮对话中保持对话的连贯性。你还需要连接到现有的后端系统,同时不让智能体与它们紧密耦合,并在假期周末前的流量高峰时进行扩展。
本文介绍如何向航空公司应用程序添加语音旅行礼宾服务,该服务构建在三个托管服务之上。Amazon Bedrock AgentCore 是一个智能体平台,可使用你选择的框架和模型,安全地大规模构建、部署和运营 AI 智能体。Bedrock 上的 Amazon Nova Sonic 是一个用于实时语音的语音到语音模型。Amazon Bedrock Knowledge Bases 是一项完全托管的检索增强生成服务,可将答案建立在你自己文档的基础上。旅客说话后,礼宾服务会调出他们的行程、更改座位、更新餐食偏好、回答政策问题,并应请求将他们连接到人工客服。
礼宾服务与现有屏幕并行运行,而不是取代它们,因此旅客可以在同一会话中在点击和说话之间切换。它运行在按需扩展的服务上,因此你可以将时间花在体验上,而不是基础设施上。AI 层连接到带有合成数据的示例航空公司后端,当你将该模式适配到自己的系统时,这可以加速你的实现。该项目拆分为多个模块,因此你可以复用适合现有后端的部分,并将它们作为工具暴露给智能体。
你将学习如何执行以下操作:
- 使用 AWS Cloud Development Kit (AWS CDK) 在 AWS 上部署语音 AI 礼宾服务。
- 使用 Strands Agents 框架和 Amazon Nova 2.5 Sonic 构建智能体以实现实时语音,并托管在 AgentCore 运行时(Amazon Bedrock AgentCore 框架的一项能力)上。
- 通过 AgentCore Gateway(Amazon Bedrock AgentCore 的一项能力),使用 Model Context Protocol (MCP) 将智能体连接到后端服务。
- 使用 Amazon Bedrock Knowledge Bases 回答航空公司政策问题。
- 将旅客转接给人工客服,并提供参考编号和预计等待时间。
解决方案概述
该架构将前端、AI 智能体和后端服务分离为不同的层,因此你可以分别开发和扩展每一层。MCP 是一种开放标准,用于将 AI 应用程序连接到外部工具和数据。它在智能体和后端之间传递标准化消息,从而使两者保持松散耦合。
该解决方案部署以下服务。
- Amazon Cognito 处理用户身份验证和用于签名 API 访问的临时 AWS 凭证。
- Amazon Bedrock AgentCore runtime 托管智能体,并为每个会话提供 microVM 隔离。
- Amazon Bedrock AgentCore Gateway 将后端端点暴露为可发现的 MCP 工具。
- Amazon API Gateway 将后端发布为具有 AWS Identity and Access Management (IAM) 授权的 REST 端点。
- AWS Lambda 运行业务逻辑,用于行程、座位图、乘客更新、航班状态、忠诚度、政策查询和升级处理。
- Amazon DynamoDB 存储客户档案、预订、乘客、座位图、购买历史、偏好、对话和航班数据。
- Amazon Bedrock Knowledge Bases 通过将响应基于您的航空公司政策文档来回答政策问题。
- Amazon Simple Email Service (Amazon SES) 发送电子邮件通知。
- AWS Amplify 托管 React 前端。
架构
下图展示了解决方案架构,分为四个部分。
图 1:跨后端、AgentCore Gateway、AgentCore 运行时和前端的端到端架构
部分 A 涵盖后端基础设施。五个 CDK 堆栈部署 DynamoDB 表、Lambda 函数、API Gateway 端点、Amazon Bedrock Knowledge Bases 和 Amazon Cognito。
部分 B 涵盖 AgentCore Gateway。一个 CDK 堆栈创建采用 MCP 协议的 Amazon Bedrock AgentCore Gateway,并将每个后端端点作为代理可按名称调用的工具公开。
部分 C 涵盖 AgentCore 运行时。两个 CDK 堆栈配置运行时基础设施。Amazon Elastic Container Registry (Amazon ECR) 存储容器镜像,Amazon Simple Storage Service (Amazon S3) 保存源上传,AWS CodeBuild 生成 ARM64 Docker 镜像。Amazon Bedrock AgentCore 运行时在 WebSocket 支持下运行,使用 Strands Agents 框架和 Amazon Nova 2.5 Sonic。
部分 D 涵盖前端。一个 CDK 堆栈在 AWS Amplify 上部署 React 应用。
用户请求流程
- 用户在浏览器或移动设备上打开托管在 AWS Amplify 上的 Web 应用程序。
- 用户在登录页面输入凭据。Amazon Cognito 对请求进行身份验证,并返回 JSON Web Tokens (JWTs) 和临时 AWS 凭证。
- 前端打开一个经 SigV4 签名的 WebSocket 连接至 Amazon Bedrock AgentCore,以开始语音礼宾会话。
- 运行时使用 Amazon Cognito 验证令牌,并通过 Amazon Bedrock 初始化 Amazon Nova 2.5 Sonic。
- 用户说出请求。Amazon Nova 2.5 Sonic 处理音频并触发工具调用。代理通过使用 MCP 调用 AgentCore Gateway 来处理工具集成,以检索航班数据、管理预订并更新乘客偏好。
- AgentCore Gateway 将请求作为 REST API 调用转发到 Amazon API Gateway,后者将其路由到 AWS Lambda 函数。
- AWS Lambda 函数查询 Amazon DynamoDB 表以获取预订、乘客、座位图、忠诚度状态和航班信息。电子邮件通知通过 Amazon SES 发送。
- Amazon Nova 2.5 Sonic 生成上下文语音响应,并通过 AgentCore 运行时经 WebSocket 连接将其流式传输回用户。
- 对于政策问题,AgentCore Gateway 通过 MCP Knowledge Base 连接器直接查询 Amazon Bedrock Knowledge Bases。知识库将相关政策段落作为引用返回给代理。
- 当用户请求人工代理时,AWS Lambda 在 Amazon DynamoDB 中记录升级并返回参考编号。然后 AWS Amplify 从用户设备触发呼叫,将其连接到人工代理。
构建与运维
接下来的两个步骤不在实时对话范围内。它们描述了解决方案如何构建以及如何日常运行。
- AWS CDK 通过单个脚本部署该解决方案。构建过程将代理源代码上传到 Amazon S3,并触发 AWS CodeBuild 生成容器镜像,然后将其存储在 Amazon ECR 中,供 AgentCore 运行时使用。
- Amazon CloudWatch 收集所有服务的日志、指标和告警,AWS Key Management Service(AWS KMS)对静态数据进行加密。
先决条件
在开始之前,请确认您已具备以下条件。
- 一个 AWS 账户。
- 在您部署的 AWS 区域中,Amazon Bedrock 中 Amazon Nova 2.5 Sonic 的模型访问权限。有关各区域的模型可用性,请参阅 Amazon Bedrock 中按 AWS 区域支持的模型。Amazon Bedrock Knowledge Bases 使用服务托管的嵌入模型,因此您无需单独获取嵌入模型访问权限。
- 用于 AWS CDK 和 Lambda 函数的 Node.js 20.x 或更高版本。
- 用于数据播种和测试客户端的 Python 3.12 或更高版本。
- 已配置凭证的 AWS Command Line Interface(AWS CLI) 2.x。
- 已安装 AWS CDK CLI 2.x 并执行
npm install -g aws-cdk,且已使用npx cdk bootstrap引导您的账户。 - 来自 aws-samples GitHub 仓库的随附代码。
使用 AWS CDK 部署解决方案
该解决方案通过单个 CDK 脚本进行部署。克隆仓库、配置您的 AWS 凭证,然后运行部署脚本。有关详细的部署步骤,请参阅 GitHub 仓库中的 README。
示例航空公司数据模型
API Gateway 发布一个 REST API,包含经 IAM 授权的端点以及 Lambda 集成。Amazon DynamoDB 存储示例航空公司数据模型,具有个位数毫秒级延迟和按需扩展能力。数据涵盖客户档案、预订、乘客、座位图、购买历史、偏好、对话记录和航班状态。
使用知识库回答政策问题
旅客会询问行李限额、改签费用、宠物旅行和忠诚度条款。该解决方案通过 Amazon Bedrock Knowledge Bases 使用检索增强生成(RAG)来回答这些问题,将响应建立在您的航空公司政策文档之上。该仓库随附了关于行李、取消与退款、改签与重新预订、票价等级规则、忠诚度条款、宠物旅行、特殊协助和升舱的示例政策文档。
您将文档上传到 Amazon S3 并一次性创建知识库。此后,Amazon Bedrock 会处理其余所有事项,包括嵌入、分块、索引、存储和检索。存储运行在 Amazon S3 Vectors 上,这是 Amazon S3 的一项功能。Smart Parsing 会预处理源 PDF,以便表格和结构化布局能够被准确检索。当您的政策文档发生变化时,您同步知识库,新内容即可立即使用。无需重新部署任何管道。
通过 AgentCore Gateway 将知识库连接到代理非常直接。您将知识库添加为 Connectors 目标,并选择标准检索或代理式检索,Gateway 会将其作为命名的 MCP 工具与您的后端 API 工具一起公开。然后代理在运行时发现它并按名称调用它,无需编写任何自定义 Lambda 或检索代码。有关设置步骤,请参阅将知识库添加为网关目标。
要使用您自己的政策,请将您的 PDF 或文本文件放入政策文档文件夹,然后重新部署知识库堆栈。
使用 Amazon Bedrock AgentCore 进行语音 AI 处理
每个会话都作为托管容器在 AgentCore 运行时上运行,并具有 microVM 隔离,在高负载下仍能保持旅客对话相互独立。AgentCore 提供自动扩缩容、内置监控和会话路由。
对于生产部署,请添加 Amazon Bedrock Guardrails 以过滤提示注入尝试并验证响应依据。本解决方案中的“写入前确认”模式会要求旅客在进行更改前先确认。该模式与知识库引用(将答案追溯到源文档)一起,已经提供了负责任 AI 实践的基线。
该代理使用 Strands BidiAgents 框架来定义系统提示、工具和对话流程。Amazon Nova 2.5 Sonic 为礼宾服务带来以下能力。
- 跨口音的语音识别以及对背景噪声的鲁棒性。
- 能够适应旅客语气的语音回复。
- 低延迟的双向流式传输。
- 异步工具调用,可并行获取数据或调用工具,而不会暂停对话。
- 延迟掩盖,在等待工具结果时生成临时语音回复,保持对话自然。
- 打断和自然的轮流发言。
- 上下文可跨多轮对话延续。
来自前端的音频流通过 WebSocket 以 16 kHz PCM 传输到 AgentCore 运行时。Amazon Nova 2.5 Sonic 转写语音,代理选择正确的工具,并通过 MCP 调用它们。AgentCore Gateway 将每个 MCP 调用转换为 REST 请求,Lambda 运行逻辑并返回结果,Amazon Nova 2.5 Sonic 将这些结果整合为语音回复。
Amazon Nova 2.5 Sonic 的新特性
本解决方案使用 Amazon Nova 2.5 Sonic,这是一个语音到语音模型,具备面向实时语音的强大推理能力。对于调用后端工具并遵循详细系统提示的语音礼宾服务,这种推理能力在几个实际方面得以体现:
更好的工具调用和代理式任务完成 – 代理能够在多步骤请求中可靠地选择并串联正确的工具,例如在一次对话中先查询行程,然后更改座位。
强大的指令遵循和推理能力 – 模型严格遵循系统提示,包括逐字符朗读确认码和航班号等格式规则。
准确的负责任 AI 处理 – 模型对真实的旅客请求提供有帮助的响应,同时安全地处理不当请求。
用户身份验证
本解决方案使用 Amazon Cognito 用户池和身份池进行基于角色的访问控制。旅客使用用户名和密码登录,并获得 JWT、访问令牌和 ID 令牌。前端使用 ID 令牌与 Cognito 身份池交换临时 AWS 凭证,这些凭证由访问密钥、秘密密钥和会话令牌组成。这些凭证使用 Signature Version 4 (SigV4) 对到 AgentCore 运行时的 WebSocket 连接以及对 API Gateway 的请求进行签名。只有经过身份验证的旅客才能访问应用程序和服务 API。
身份验证和 WebSocket 连接流程
前端使用临时 AWS 凭证打开到 AgentCore 运行时的经 SigV4 签名的 WebSocket 连接,并发送访问令牌进行身份验证。然后浏览器流式传输 16 kHz PCM 音频,并通过同一连接接收语音响应和工具通知。中间没有服务器端代理。
下图展示了浏览器、Amazon Cognito 与 AgentCore 运行时之间的身份验证和 WebSocket 连接序列。
图 2:旅行者通过 Amazon Cognito 进行身份验证,浏览器打开一条经 SigV4 签名的 WebSocket 连接至 AgentCore 运行时,Amazon Nova 2.5 Sonic 双向流式传输语音
语音交互与动态工具调用
旅行者要求查看自己的座位。Nova 2.5 Sonic 转写该请求,智能体选择所需的工具。它通过 AgentCore Gateway 使用 MCP 并行调用这些工具,Gateway 将每次调用转换为对 API Gateway 的 REST 请求。Lambda 函数查询 DynamoDB 并返回结果,Nova 2.5 Sonic 流式输出一段将所有内容融合在一起的语音回复。由于工具调用异步运行,对话不会因数据加载而停滞。
下图展示了智能体如何处理语音请求并通过 AgentCore Gateway 动态调用后端工具:
图 3:语音请求依次经过 Nova 2.5 Sonic、AgentCore Gateway、API Gateway、Lambda 和 DynamoDB,语音回复再流式返回
从知识库回答策略问题
当旅行者询问行李政策时,智能体通过 AgentCore Gateway 使用其原生连接器访问 Amazon Bedrock Knowledge Bases。知识库使用托管重排序器运行智能体式检索,并返回相关策略段落作为引用。Nova 2.5 Sonic 组织答案并语音回复给旅行者。
下图展示了智能体通过从 Amazon Bedrock Knowledge Bases 检索有依据的段落来回答策略问题:
图 4:策略问题由 Amazon Bedrock Knowledge Bases 回答并语音回复给旅行者
升级至人工客服
当礼宾服务无法满足请求或旅行者主动要求时,会将旅行者转接给人工。旅行者确认后,智能体调用 EscalateToAgent 工具。Lambda 在 DynamoDB 中记录该升级,并返回一个参考编号和预计等待时间。智能体分享该参考编号,Amplify 前端则拨打支持热线。本示例不包含联络中心应用程序,因此能否接通人工取决于你配置的支持电话号码。
下图展示了旅行者请求人工客服时的升级流程:
图 5:智能体在 DynamoDB 中记录升级,分享参考编号,前端拨打给人工客服
礼宾服务演练
在浏览器中打开 Amplify URL,并使用 AppUser 凭证登录。选择麦克风按钮开始语音对话。智能体会以你的名字问候你,并在后台调出你的行程。之后你可以自然地说话来更改座位、查询延误、查看政策或联系人工客服。以下视频展示了从问候到升级的完整会话。
整个对话通过单条 WebSocket 连接免手动运行。智能体在写入前会确认每项更改。它会逐字符读出航班号,以便听清,并在后台调用后端工具,因此不会有明显延迟。
清理
要停止产生费用,请移除已部署的资源。先预览删除操作,然后运行清理。
./cleanup-all.sh --dry-run
./cleanup-all.sh该脚本按相反顺序销毁资源,从前端开始,然后是 AgentCore 运行时、AgentCore Gateway 和后端基础设施。
结论
本文介绍了如何在 AWS 上构建语音旅行礼宾服务。它使用 Amazon Cognito 进行身份验证,使用 Amazon Bedrock AgentCore 进行代理托管,使用 API Gateway 和 Lambda 处理业务逻辑,使用 DynamoDB 进行存储,并使用 Amazon Bedrock Knowledge Bases 来回答政策问题。分层设计将前端、代理和后端分离,使它们各自独立开发和扩展。该礼宾服务通过 MCP 工具管理行程、座位变更、餐食偏好、航班状态、忠诚度问题、政策查询以及实时代理升级。Amazon Nova 2.5 Sonic 带来低延迟语音、并行工具调用和自然的中断处理。按使用量付费的定价和自动扩展使成本与流量保持同步,借助 MCP 集成,你无需改动代理代码即可添加新的 Lambda 函数。要开始使用,请访问 GitHub 上的解决方案仓库,并将其适配到你自己的航空公司系统。
其他资源
关于作者
Ravi Kumar
Ravi 是 AWS Enterprise Support 的高级技术客户经理,帮助旅游和酒店行业的客户简化其在 AWS 上的云运营。他是一位注重成果的 IT 专业人士,拥有超过 20 年的经验。Ravi 对生成式 AI 充满热情,并积极探索其在云计算中的应用。工作之余,Ravi 喜欢绘画等创意活动。他还喜欢打板球和去新地方旅行。
Salman Ahmed
Salman 是 AWS 的高级技术客户经理。他专注于指导客户完成 AWS 解决方案的设计、实施和支持。他将自己的网络专业知识与探索新技术的动力相结合,帮助组织成功驾驭其云之旅。工作之余,他喜欢摄影、旅行以及观看他最喜欢的体育球队比赛。
Sergio Barraza
Sergio 是 AWS 的高级技术客户经理,帮助客户设计和优化云解决方案。他在软件开发领域拥有超过 25 年的经验,指导客户采用 AWS 服务。工作之余,Sergio 是一位多乐器演奏者,会弹吉他、钢琴和打鼓,他还练习咏春拳。
Ankush Goyal
Ankush 是 AWS 的高级技术客户经理,帮助客户优化其云架构和运营。他与企业客户密切合作,在 AWS 上设计可扩展、有弹性的解决方案。Ankush 专注于生成式 AI,并乐于帮助团队将新技术付诸实践。工作之余,他喜欢与家人共度时光并探索户外。
来源:AWS Machine Learning Blog · aws.amazon.com




