AI News HubLIVE
站内改写3 分钟阅读

使用Amazon Bedrock AgentCore和Amazon Nova 2 Sonic构建餐厅电话AI接待员

本文演示了如何构建一个语音点餐系统,使用Amazon Bedrock AgentCore和Amazon Nova 2 Sonic,处理从问候到确认的整个点餐流程。系统通过模型上下文协议(MCP)连接餐厅后端,并利用AWS CDK部署,通过ECS Fargate上的SIP网关桥接电话呼叫。

来源AWS Machine Learning Blog作者: Sergio Barraza

餐厅每处地点平均每月错过150通电话,其中约60%是顾客试图下单或预订餐桌。这些电话大多在晚餐时段打入,此时接待员正忙于引导客人入座,服务员在翻台,电话往往被忽略。让人从餐厅现场抽身接电话并不能真正解决问题,反而会恶化两方面体验。虽然添加应用或网站有助于偏好在线下单的顾客,但对只想打电话的人无济于事。

本文展示如何构建一个语音点餐系统,该系统能接听电话并从问候到确认完成整个订单流程。系统使用Amazon Bedrock AgentCore来托管和运行代理,Amazon Nova 2 Sonic实现实时语音交互,并通过模型上下文协议(MCP)连接餐厅后端。本指南涵盖使用AWS Cloud Development Kit(AWS CDK)部署完整堆栈,以及通过Amazon Elastic Container Service(Amazon ECS)和AWS Fargate上的会话发起协议(SIP)网关将电话呼叫桥接到代理。此外,系统会在电话振铃期间预热代理会话,因此呼叫者永远不会听到静音。

解决方案概述 系统分为三层。电话层处理电话相关事项:音频通过电话网络而非浏览器传输,系统通过电话号码而非登录信息识别呼叫者。SIP网关通过签名WebSocket连接将音频流传输到代理层,代理层使用Amazon Nova 2 Sonic进行对话。代理通过MCP工具访问后端层,后端层包含菜单、购物车、订单和位置信息。这种分层设计使得订单逻辑独立于调用渠道,新渠道(如移动应用或自助终端)可以连接到同一代理而无需重写后端。由于MCP是连接代理与外部工具的开源标准,后端可以在不影响代理的情况下更改。代理支持文本和音频作为输入输出,在单个双向流中处理转录、轮流发言和打断。

部署解决方案时,电话侧使用Amazon Chime SDK Voice Connector提供SIP中继和免费号码,接收来电。Amazon ECS on AWS Fargate运行SIP网关,后端为Network Load Balancer。代理层中,AgentCore Runtime托管对话逻辑,每个呼叫在独立微VM中运行以确保隔离。Amazon Nova 2 Sonic处理语音到语音交互。AgentCore Gateway将后端API暴露为MCP工具,代理可以发现并按名称调用。后端层使用Amazon API Gateway前端REST端点,通过AWS Identity and Access Management(IAM)保护安全。AWS Lambda运行菜单、购物车、订单和位置查询的业务逻辑。Amazon DynamoDB存储数据,Amazon Location Service处理地理编码和路线计算。Amazon Elastic Container Registry(Amazon ECR)、AWS CodeBuild和Amazon Simple Storage Service(Amazon S3)构建并存储代理容器镜像。

架构图 解决方案分为四个部分。第一部分部署餐厅后端基础设施:Amazon DynamoDB存储客户、订单、菜单、购物车和位置数据,Amazon Location Service处理地址和路线,AWS Lambda执行业务逻辑,Amazon API Gateway以IAM授权对外暴露。第二部分创建AgentCore Gateway,设置IAM权限,并将后端端点配置为代理可访问的MCP工具,这一层解耦了代理与后端。第三部分配置代理:创建Amazon ECR仓库,使用Amazon S3和AWS CodeBuild构建并推送容器镜像,然后部署AgentCore Runtime,同时部署支持个性化呼叫的组件,包括提示渲染Lambda函数和存储提示模板及客户识别密钥的AWS Systems Manager Parameter Store条目。第四部分提供电话路径:设置Amazon Chime SDK Voice Connector和免费号码、SIP媒体应用Lambda(决定如何处理来电)、共享Amazon Virtual Private Cloud(Amazon VPC)以及在Amazon ECS on AWS Fargate上运行的SIP网关(drachtio-server),后接Network Load Balancer。网关在Chime SDK Voice Connector和AgentCore Runtime之间桥接呼叫。

呼叫流程 当呼叫者拨打免费号码时,Amazon Chime SDK Voice Connector应答并调用SIP媒体应用Lambda。Lambda计算会话标识符,向AgentCore Runtime发送预热请求以便在振铃期间准备会话,然后指示Voice Connector将呼叫桥接到ECS Fargate上的SIP网关,并传递会话标识符。SIP网关使用同一会话标识符打开到AgentCore Runtime的SigV4签名WebSocket,呼叫连接到预热会话,呼叫者音频流向代理,代理音频返回给呼叫者。代理使用Amazon Nova 2 Sonic进行对话,并通过AgentCore Gateway在需要菜单、购物车、订单或位置数据时调用后端工具。

部署前提条件包括拥有AWS账户、在部署区域启用Amazon Bedrock模型访问(Amazon Nova 2 Sonic)、申请Amazon Chime SDK PSTN Audio访问及电话号码配额增加、安装Node.js 24+、AWS CLI 2.x、git,并引导AWS CDK。完整解决方案可在GitHub示例仓库中找到。克隆仓库并运行预检脚本后,使用部署脚本(例如./scripts/deploy-all.sh --deploymentPrefix qsr-tel)按顺序部署各堆栈。脚本会播种示例菜单和位置数据,以便测试。部署完成后会打印可拨打的号码。

SIP网关的工作原理是将来电转换为代理可读写的媒体流。Amazon Chime SDK Voice Connector接收来电并调用SIP媒体应用Lambda,该Lambda返回桥接指令。SIP网关运行在ECS Fargate上,使用drachtio-server进行SIP信令,节点.js桥接处理音频转换。这种设计使代理无需了解电话网络细节,从而保持渠道无关性。