AWS Machine Learning

使用 Amazon Bedrock AgentCore、Managed Knowledge Base 和 Nova Sonic 构建语音旅行礼宾服务

AWS 博文介绍如何在航司应用中用 Amazon Bedrock AgentCore、Amazon Nova Sonic 与 Amazon Bedrock Knowledge Bases 搭建语音旅行助手:旅客可语音改座位、查延误和问政策,代理通过 MCP 工具访问后端,并在写入前确认每次变更。文中称 Nova Sonic 是实时语音的语音到语音模型,知识库以自有文档做检索增强生成,示例后端使用合成数据,需自行适配真实系统。

End-to-end voice concierge architecture spanning the backend, AgentCore Gateway, AgentCore runtime, and front end
配图来源 · AWS Machine Learning

航空公司已经拥有供旅客查询航班、选择座位和管理预订的应用程序和网站,而添加自然语音层后,这些任务可以通过口头请求来完成。借助这一语音层,旅客只需说话即可更换座位或查询延误信息,无需离开应用程序或在各界面之间导航。构建它需要在多个方面进行精心的工程工作。你需要双向传输音频,并在多轮对话中保持对话的连贯性。你还需要接入现有的后端系统,而不将代理与它们紧密耦合,并且在假日周末前的流量激增时进行扩展。

本文将向您展示如何为航空公司应用添加语音旅行管家功能,该功能基于三项托管服务构建。 Amazon Bedrock AgentCore 是一个用于大规模安全地构建、部署和运营AI智能体的平台,可自选框架和模型。 Amazon Nova Sonic on Bedrock 是一个用于实时语音的语音到语音模型。 Amazon Bedrock 知识库 是一项完全托管的检索增强生成服务,能够基于您自己的文档为答案提供依据。旅客开口说话,礼宾服务即可调出其行程、更改座位、更新餐饮偏好、解答政策问题,并应要求为其转接人工客服。

该智能助手在您现有的屏幕旁运行而非取代它们,因此旅客可以在同一会话中在点击和语音之间自由切换。它运行在可按需扩展的服务上,因此您可以把时间花在体验上而不是基础设施上。AI 层连接到一个使用合成数据的示例航空后端,当您将该模式适配到自己的系统时,这可以加速您的实现。该项目拆分为多个模块,因此您可以复用适合现有后端的部分,并将其作为工具暴露给智能体。

您将学习如何执行以下操作:

  • 在AWS上部署语音AI礼宾服务,使用 AWS Cloud Development Kit (AWS CDK).
  • 使用以下工具构建一个代理: Strands Agents 框架和 Amazon Nova 2.5 Sonic 用于实时语音,托管在 AgentCore 运行时上,这是 Amazon Bedrock AgentCore 框架的一项功能。
  • 使用以下方式将智能体连接到后端服务: 模型上下文协议(MCP) 通过 AgentCore Gateway,这是 Amazon Bedrock AgentCore 的一项功能。
  • 使用 Amazon Bedrock Knowledge Bases 解答航空公司政策问题。
  • 将旅客转接给人工客服,并提供参考编号和预计等待时间。

解决方案概述

该架构将前端、AI 代理和后端服务分离为不同的层,因此你可以独立开发和扩展每一层。MCP 是一项用于将 AI 应用连接到外部工具和数据的开放标准。它在代理和后端之间传递标准化消息,使两者保持松耦合。

该解决方案部署了以下服务。

架构

下图展示了解决方案架构,分为四个部分。

End-to-end voice concierge architecture spanning the backend, AgentCore Gateway, AgentCore runtime, and front end

图 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 堆栈将 React 应用部署到 AWS Amplify 上。

用户请求流程

  1. 用户在浏览器或移动设备上打开托管在 AWS Amplify 上的 Web 应用程序。
  2. 用户在登录页面输入其凭据。Amazon Cognito 对请求进行身份验证并返回 JSON Web Token(JWT)和临时 AWS 凭据。
  3. 前端建立一个经过 SigV4 签名的 WebSocket 连接到 Amazon Bedrock AgentCore,以开始语音礼宾会话。
  4. 运行时通过 Amazon Cognito 验证令牌,并通过 Amazon Bedrock 初始化 Amazon Nova 2.5 Sonic。
  5. 用户说出请求。Amazon Nova 2.5 Sonic 处理音频并触发工具调用。代理通过使用 MCP 调用 AgentCore Gateway 来处理工具集成,以检索航班数据、管理预订并更新乘客偏好。
  6. AgentCore Gateway 将请求作为 REST API 调用转发到 Amazon API Gateway,后者将其路由到 AWS Lambda 函数。
  7. AWS Lambda 函数查询 Amazon DynamoDB 表以获取预订、乘客、座位图、会员状态和航班信息。电子邮件通知通过 Amazon SES 发送。
  8. Amazon Nova 2.5 Sonic 生成符合上下文的语音响应,并通过 AgentCore 运行时经 WebSocket 连接流式传回给用户。
  9. 对于政策类问题,AgentCore Gateway 通过 MCP Knowledge Base 连接器直接查询 Amazon Bedrock Knowledge Bases。知识库将相关的政策段落作为引用返回给代理。
  10. 当用户请求人工坐席时,AWS Lambda 将升级请求记录到 Amazon DynamoDB 中并返回一个参考编号。随后 AWS Amplify 从用户设备发起呼叫,将其连接到人工坐席。

构建与运维

接下来的两个步骤位于实时对话之外。它们描述了该解决方案如何构建以及如何日常运行。

  1. AWS CDK 通过单个脚本部署该解决方案。构建过程将代理源代码上传到 Amazon S3,并触发 AWS CodeBuild 生成容器镜像,该镜像存储在 Amazon ECR 中供 AgentCore 运行时使用。
  2. Amazon CloudWatch 收集所有服务的日志、指标和警报,AWS Key Management Service(AWS KMS)对静态数据进行加密。

先决条件

开始之前,请确认您已具备以下条件。

使用 AWS CDK 部署该解决方案

该解决方案可通过单个 CDK 脚本进行部署。克隆仓库,配置您的 AWS 凭证,然后运行部署脚本。有关详细的部署步骤,请参见 README 在 GitHub 仓库中。

示例航空数据模型

API Gateway 发布了一个 REST API,其中包含经 IAM 授权的端点和 Lambda 集成。Amazon DynamoDB 以个位数毫秒的延迟和按需扩展的方式存储示例航空公司数据模型。数据涵盖客户档案、预订、乘客、座位图、购买历史、偏好、对话记录和航班状态。

用知识库回答政策问题

旅客们询问关于行李限额、改签费、宠物旅行以及会员条款的问题。该解决方案使用以下内容回答这些问题: 检索增强生成(RAG) 通过 Amazon Bedrock Knowledge Bases,让回复基于您的航空公司政策文档。该代码库附带行李、取消和退款、变更与重新预订、票价等级规则、会员条款、宠物旅行、特殊协助以及升舱方面的示例政策文档。

你将文档上传到 Amazon S3,然后 只需创建一次知识库。从这里开始,Amazon Bedrock 会处理其余工作,包括嵌入、分块、索引、存储和检索。存储运行在 Amazon S3 Vectors 上,这是 Amazon S3 的一项功能。Smart Parsing 会对源 PDF 进行预处理,使表格和结构化版式能够被准确检索。当您的策略文档发生变化时,只需同步知识库,新内容即可立即可用。无需重新部署任何管道。

通过 AgentCore Gateway 将知识库连接到代理非常直接。您将知识库添加为 Connectors 目标并选择标准检索或代理式检索(agentic retrieval),Gateway 会将其作为一个命名的 MCP 工具与您的后端 API 工具一起暴露出来。代理随后会在运行时发现它并按名称调用,无需编写自定义 Lambda 或检索代码。有关设置步骤,请参阅 添加知识库作为网关目标.

要使用您自己的政策文件,请将您的 PDF 或文本文件放入 policy documents 文件夹中,然后重新部署知识库堆栈。

使用 Amazon Bedrock AgentCore 的语音 AI 处理

每个会话作为托管容器在 AgentCore runtime 上运行,并通过 microVM 隔离,确保高负载下旅客的对话相互隔离。AgentCore 提供自动扩缩容、内置监控和会话路由。

对于生产环境部署,请添加 Amazon Bedrock Guardrails 用于过滤提示词注入尝试并验证响应的依据。此解决方案中的写入前确认模式会要求旅行者在进行更改之前予以确认。该模式与能将答案追溯到源文档的知识库引用相结合,已经提供了负责任 AI 实践的基础。

该代理使用 Strands BidiAgents 用于定义系统提示词、工具和对话流程的框架。Amazon Nova 2.5 Sonic 为礼宾服务带来以下功能。

  • 跨口音的语音识别以及对背景噪音的鲁棒性。
  • 能够适应旅行者语气的口头回复。
  • 具有低延迟的双向流式传输。
  • 异步工具调用,可以并行获取数据或进行工具调用,而无需暂停对话。
  • 延迟掩盖:在等待工具结果期间生成过渡性语音回应,保持对话的自然流畅。
  • 打断对话与自然的话轮转换。
  • 跨越多轮对话的上下文。

前端通过 WebSocket 以 16 kHz PCM 将音频流式传输到 AgentCore runtime。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 User Pools 和 Identity Pools 实现基于角色的访问。旅客使用用户名和密码登录并接收 JWT,即一个访问令牌(access token)和一个 ID 令牌(ID token)。前端将 ID 令牌与 Cognito Identity Pool 交换,获得由访问密钥、秘密密钥和会话令牌组成的临时 AWS 凭证。这些凭证使用 Signature Version 4 (SigV4) 对到 AgentCore runtime 的 WebSocket 连接以及对 API Gateway 的请求进行签名。只有通过身份验证的旅客才能访问该应用和服务 API。

身份验证与 WebSocket 连接流程

前端使用临时 AWS 凭证建立到 AgentCore runtime 的 SigV4 签名 WebSocket 连接,并发送访问令牌以进行身份验证。随后浏览器通过同一连接流式传输 16 kHz PCM 音频,并接收语音响应和工具通知。中间没有任何服务端代理。

下图展示了浏览器、Amazon Cognito 与 AgentCore runtime 之间的身份验证和 WebSocket 连接顺序。

图 2:旅客通过 Amazon Cognito 完成身份验证,浏览器建立到 AgentCore runtime 的 SigV4 签名 WebSocket 连接,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。知识库运行带有托管重排序器(reranker)的代理式检索,并返回作为引用的相关政策段落。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 runtime、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 上的解决方案仓库 并将其适配到你自己的航空公司系统。

其他资源


关于作者

原始出处

AWS Machine Learning

内容说明

原始发布及相关权利归来源方。

机器翻译 · 请以原文为准